【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
エンジニアのIMMRです。
今まで、セルやフォントの設定などの方法を紹介してきましたが、それは1列のみのデータです。
Sub samp1()
Cells(1, 1).Font.Color = RGB(0, 255, 255)
End Sub
図1 ブック(上記、コードによって、文字の色が変更されたもの)
もし、下記のように複数列のデータを同様の処理で行うとすると下記のような記述になってしまいます。
図2 ブック(複数の文字が記載されているもの)
Sub samp2()
Cells(1, 1).Font.Color = RGB(0, 255, 255)
Cells(2, 1).Font.Color = RGB(0, 255, 255)
Cells(3, 1).Font.Color = RGB(0, 255, 255)
Cells(4, 1).Font.Color = RGB(0, 255, 255)
Cells(5, 1).Font.Color = RGB(0, 255, 255)
End Sub
ほぼ、同じプログラムを何度も記載することになります。
今回の場合、データ数が5件なので、5行で済みましたが
データ数が、1000件 2000件あると1000行 2000行の記載が必要になります。
似たような処理文を記載するのは非効率です。
ここで、便利なものが繰り返しを行う命令文で、
1回分の処理文を記載するだけで必要な回数を繰り返すことが出来ます。
同じ処理を繰り返し行う方法は、複数ありますが、一番よく使われる(For Next)を説明します。
同じ処理を繰り返し行う方法の1つはFor Nextです。
For Nextの処理は、指定した回数だけ、処理を行うことができます。
メッセージボックスを5回表示したい場合、
For Nextを使用すれば1回の記述で指定した回数(ここでは5回)だけ表示することが出来ます。
図3 そのまま記述したものとFor Nextを使用した時の比較
上記図では、繰り返しが出来るというイメージ図を記載しましたが、実際は、繰り返し自体の回数の値は記載しません。
では、どの値で繰り返しを実施しているのかというとFor Nextで持っているカウンターの値です。
カウンターのStartの値とEndの値を設定して、Start値からEnd値になるまで繰り返しが行われています。
このカウンターがとても便利で、繰り返し以外の使い道があるのです。
例えば、カウンター(i)のStart値を1、End値を5とします。
カウンター(i)が1の状態で処理が行われると、繰り返しが行われるスタート地点に戻ります。
そうしたら、カウンター に+1 つまり、カウンター(i)が2になり先ほどと同じ処理が行われます。
結果、カウンター(i)が1→2→3→4→5 という感じで、5回行われます。 ※カウンター(i)が6になると繰り返しから抜けます。
図 4 For Nextの流れ
カウンターのiが増えるとどのようなことが出来るのかというと、指定セルをずらすことが出来ます。
指定したいセルを Cell(i, 1)で指定すると
1回目は、iが1で Cell(1,1)
2回目は、iが2で Cell(2,1)
3回目は、iが3で Cell(3,1) ・・・
という感じでです。
図5 For Nextを使用しての処理のイメージ
そうなると、下記のように記載してあるものを置き換えることが出来ます。
Cells(1, 1).Font.Color = RGB(0, 255, 255)
Cells(2, 1).Font.Color = RGB(0, 255, 255)
Cells(3, 1).Font.Color = RGB(0, 255, 255)
Cells(4, 1).Font.Color = RGB(0, 255, 255)
Cells(5, 1).Font.Color = RGB(0, 255, 255)
↓
Cells(i, 1).Font.Color = RGB(0, 255, 255)
後は、For Nextを使用して、start値を1、End値を5と設定
1 iが1の時はCells(i, 1)のiは1となるため、Cells(1,1)つまり、Cells(1,1).Font.Color = RGB(0, 255, 255)が行われます。
2 iが2の時はCells(i, 1)のiは2となるため、Cells(2,1)つまり、Cells(2,1).Font.Color = RGB(0, 255, 255)が行われます。
同様に、iが3, 4, 5で行われます。
このような方法を使用することにより、記載した処理は、一回でも複数のセルに対して行うことが出来ます。
下記のように記載します。
For counter = start To end Step step数
処理文
Next i
〇counterは、カウンターに使う変数です。
※一般的には、i, j, k等の英字一文字が使われます。
〇startは、カウンタの初期値です。
〇endは、カウンタの最終値です。
〇stepは、カウンターの増減値です。
※1→3→5のように2つずつ増加したい場合は、Step2 と記載します。1つずつなら記載不要です。
また、counterに使うi等の変数は宣言が必要です。 例 Dim i As Long
上記サンプルコードで同じ処理が行われるか、実行して試してみます。
図6 ブック(処理前)
サンプルコード
Sub Test4()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Font.Color = RGB(0, 255, 255)
Next i
End Sub
図7 ブック(上記、コード実行後)
カラー変更の実行文は、1行のみですが、
それぞれの行のセルに対して、フォントのカラー変更が行われました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート