VBAでForと関数Ifを組み合わせて使用する方法【繰り返し処理で作業効率アップ】
こんな疑問にお答えします。
この記事では、繰り返し処理(For~Next)と関数IFを組み合わせる書き方をサンプル事例を使って詳しくご紹介します。
繰り返し処理(For~Next)と関数IFを組み合わせて使えるようになれば、以下のような処理を自動化することができます。
- 条件によって行を削除する
- 条件によって列を削除する
- 条件によってセルの塗り潰しをする
大量のデータをエクセルを使って分析、編集しているろいう方におすすめのVBAです。是非使い方をマスターしてください。
目次
VBAでの関数IFの使い方
VBAで関数IFを使う基本的な構造をご紹介します。
1 | If 条件 Then |
2 | 処理① |
3 | Else |
4 | 処理② |
5 | EndIF |
「もし条件ならば処理①、条件ではないなら条件②」という意味になります。条件をもっと増やしたいときは以下のようになります。
1 | If 条件① Then |
2 | 処理① |
3 | ElseIf 条件② Then |
4 | 処理② |
5 | ElseIf 条件③ Then |
6 | 処理③ |
7 | Else |
8 | 処理④ |
9 | EndIf |
「もし条件①ならば処理①、条件②ならば処理②、条件③ならば処理③、これら以外ならば処理④」という意味になります。ポイントは、「記載したプログラムを上から順番に処理をしていく」ということです。
サンプル事例を使って関数Ifの使い方をより詳しく解説していきます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub テスト() |
2 | If Cells(5, 1) >= 80 Then |
3 | Cells(5, 2) = “〇" |
4 | ElseIf Cells(5, 1) < 80 And Cells(5, 1) >= 60 Then |
5 | Cells(5, 2) = “△" |
6 | Else |
7 | Cells(5, 2) = “×" |
8 | End If |
9 | End Sub |
上記サンプルVBAをコピーしてModuleにペーストしてください。
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「テスト」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
A5セルに「70」という数字を入力し、ボタンを押すとBセルに「△」が表示されました。VBAが正常に実行されているか確認することができます。
関数IFはセルに直接入力する方法よりもVBAを使った方が簡単により複雑な条件を与えることができるようになります。
ちなみに、セルに直接関数IFを使った数式を入力すると以下のようになります。
こっちの方がスッキリしていると思われるかもしれませんが、条件が複雑になるとVBAの方がはるかに扱いやすくなります。
繰り返し処理(For〜Next)の使い方
基本的には繰り返し行いたいプログラムをForとNextで挟む!たったこれだけでFor~Nextを扱うことができます。
繰り返しの回数や範囲の指定をしなければなりませんが、サンプル事例を参考にするとわかりやすいので、下記のサンプル事例を参考にしてみてください。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub テスト() |
2 | For i = 1 To 10 |
3 | Cells(i, 1) = “〇" |
4 | Next |
5 | End Sub |
上記サンプルVBAをコピーしてModuleにペーストしてください。
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「テスト」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
ボタンを押してVBAを実行すると、A1セル~A10セルにテキスト「〇」が一瞬で入力されました。たったこれだけで繰り返し処理(For~Next)のVBAを設定することができます。
サンプルVBAの2行目と3行目のを編集するだけでテキスト「〇」を入力する場所を変更することが可能です。
繰り返し処理(For〜Next)と関数IFを組み合わせる方法
基本的な考え方は、関数IFを使ったプログラムを繰り返し処理(For~Next)で挟む!ということです。VBAは以下のように記載することになります。
1 | For i = 〇 To 〇 |
2 | If 条件① Then |
3 | 処理① |
4 | ElseIf 条件② Then |
5 | 処理② |
6 | ElseIf 条件③ Then |
7 | 処理③ |
8 | Else |
9 | 処理④ |
10 | EndIf |
11 | Next i |
1行ずつプログラムが処理されて、処理が「Next」に達すると「For」に戻り繰り返される!という仕組みです。この基本的な使い方さえ理解することができればOKです。あとはForで何回繰り返し処理を行うのか、関数IFでの処理はどうするのかを決めれば完成です。
言葉で説明してもわかりにくいと思いますので、下記で紹介しているサンプル事例をみて理解を深めてみてください。
サンプル事例① 条件によってテキストを入力する処理を繰り返すVBA
下図ようなデータ分析をVBAを使って処理してみます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub サンプル事例①() |
2 | For i = 2 To 5 |
3 | If Cells(i, 1) >= 80 Then |
4 | Cells(i, 2) = “〇" |
5 | ElseIf Cells(i, 1) < 80 And Cells(i, 1) >= 60 Then |
6 | Cells(i, 2) = “△" |
7 | Else |
8 | Cells(i, 2) = “×" |
9 | End If |
10 | Next |
11 | End Sub |
上記サンプルVBAをコピーしてModuleにペーストしてください。
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「テスト」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
B列の結果が一瞬で入力されました。VBAが正常に実行されているか確認することができます。関数IFを使ったプログラムを繰り返し処理(For~Next)で挟み、何回繰り返すのかを定義した文字を入力するだけでVBAが完成します。
簡単な例ですが、他に少しつけ加えたり、変更したりするだけで十分仕事で使えるプログラムになります。
サンプル事例② 空欄のセルがあった場合、行ごと削除するVBA
下図ようなデータ分析をVBAを使って処理してみます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
1 | Sub サンプル事例②() |
2 | For i = 10 To 2 Step -1 |
3 | If Cells(i, 1) = “" Then |
4 | Cells(i, 1).EntireRow.Delete |
5 | Else |
6 | End If |
7 | Next |
8 | End Sub |
上記サンプルVBAをコピーしてModuleにペーストしてください。
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。「サンプル事例②」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
ボタンを押してVBAを実行すると、A列で空欄セルがある行が一瞬で削除されました。VBAが正常に実行されているか確認することができます。
この「行を削除するVBA」では、削除した行の下の行が上に移動し、移動してきた行を数えないで次の行を数えてしまう!ということに注意が必要です。この問題を解決するためにサンプルVBAでは、「下の行から上の行に向かって繰り返し処理をする」プログラムになっています。サンプルVBAの2行目がこの注意点に該当する箇所です。
繰り返し処理(For~Next)と関数IFの使用頻度はかなり高い
繰り返し処理(For〜Next)と関数IFの組み合わせはエクセル業務の効率化に欠かすことのできないVBAです。
まずは簡単なVBAから導入していき、慣れていけば「セルを塗り潰す」、「フォントを変える」といったような処理を肉付けしていきましょう。自分のイメージするVBAを作り上げられるようになっていきます。
私が実際の仕事に導入したVBAのほとんどに、今回繰り返し処理(For~Next)と関数IFの組み合わせVBAが使われています。
例えば下記の動画で紹介している検査表を自動的に作成するVBAでは、繰り返し処理(For~Next)と関数IFが何度も使われています。
繰り返し処理(For~Next)と関数IFの他にも、シートを区別するVBAやセルを結合するVBAなどを組み合わせたプログラムになっています。検査表を作成するのに何十時間もの時間を費やしていたのですが、VBAを導入してからは数分で作業を完了させることができるようになりました。
より複雑なVBAを作れるようになれば、セルに直接数式を入力する方法では表現出来ないことができるようになります。そうなればVBAの開発が楽しくなってくると思います。いろいろなVBAの開発に挑戦してみましょう。
これからVBAを勉強をはじめるには
繰り返し処理(For~Next)と関数IFの組み合わせのように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。
VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。
【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。
- 基礎からプログラミングを勉強したい
- まとまった勉強時間の確保が難しい
- 途中で挫折したくない
上記のように考えている方に【1st Step】はおすすめです。
下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。
これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません