【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 サンプルブック
パソコンの年間売上台数リストです。
この図に対して、売り上げが10台以上の場合は
わかりやすく印をつけたいです。
10台以上は
・文字を青く
・背景色は肌色
・太文字
下記がその実行結果のイメージ図です。
図2 サンプルブック(イメージ図)
もし、上記のような作業を行うとしたら皆様でしたらどうしますか?
私の場合は、2重のFor Next ステートメントで作成する方法がまずは頭に浮かびます。
プログラムとしては下記のような感じです。
サンプルプログラム1
Sub test2()
Dim i As Long, j As Long
For j = 3 To 22
For i = 2 To 13
If Cells(j, i).Value > 9 Then
Cells(j, i).Font.Color = RGB(0, 0, 255)
Cells(j, i).Interior.Color = RGB(255, 242, 204)
Cells(j, i).Font.Bold = True
End If
Next i
Next j
End Sub
こんな感じで2重のFor Nextを使って作成していきます。
繰り返し処理というとFor Nextが一番イメージにありますが、
今回は他の繰り返し処理であるFor Eachについて説明をします。
For Nextでは、指定した回数だけ繰り返しを行うのに対して、
For Eachでは、指定した範囲だけ処理を行う方法になります。
そのため、For Nextでは2重におこなった作業もFor Eachではそれが必要無くなります。
イメージでいうと下記の図のような感じです。
図3 For Next説明図
For Nextは1~ のカウントです。
そのため、図3のようなセルの(B3)~(D6)の範囲指定をする場合、
2つのFor Nextを使う必要があり、
1つ目のFor Nextが2の時、2つ目のFor Nextが3~6
1つ目のFor Nextが3の時、2つ目のFor Nextが3~6
1つ目のFor Nextが4の時、2つ目のFor Nextが3~6
という感じで行っていきます。
図4 For Each説明図
For Eachはカウントではなく、範囲で設定します。
そのため、セル(B3)~(D6)という感じで範囲の設定が出来ます。
そうすると
1個目のセル(B3)、2個目のセル(C3)、3個目のセル(D3)
4個目のセル(B4)、5語目のセル(C4)、・・・12個目のセル(D6)
といった感じで、2重ループとかをしないで、行うことが出来ます。
For Eachステートメントを使用する時は、
まず、Range型のオブジェクト変数を定義する必要があります。
このオブジェクト変数にFor Eachで指定した範囲の1つ1つが格納されます。
記載例
Dim オブジェクト変数名 As Range
その次に作成したオブジェクト名と範囲を指定してFor Eachステートメントを記載します。
記載例
For Each オブジェクト変数名 In セルの範囲
***処理***
Next
これにより、範囲指定したセルの1つ1つがオブジェクト変数に格納されるようになりました。
そしたらその1つ1つに対して、処理(文字の色を変える)などを記載していきます。
オブジェクト変数の中に1つ1つのセルの箇所が格納されているので
Cells(j, i).Font.Color = RGB(0, 0, 255)
と記載しないで、
↓
記載例
オブジェクト変数名.Font.Color = RGB(0, 0, 255)
と省略して記載することが出来ます。
For Eachステートメントを使用したものが下記のものになります。
図1 サンプルブックを使用して、図2 サンプルブック(イメージ図)ような結果が出力されるようにします。
サンプルプログラム2
Sub test2()
Dim r As Range
For Each r In Range("B3:M22")
If r.Value > 9 Then
r.Font.Color = RGB(0, 0, 255)
r.Interior.Color = RGB(255, 242, 204)
r.Font.Bold = True
End If
Next
End Sub
”r”という名前で、オブジェクト変数名を宣言しました。
そして範囲はセル(B3~M22)です。
これにより、指定した範囲内のセルを1つ1つを見ていきます。
そして、1つ1つのセルの値が9以上なら、文字の色を変える等の処理を行うことになります。
上記サンプルプログラム2を実行した結果です。
図5 サンプルプログラム実行結果
範囲であるセル(B3~M22)において全て確認して、
条件に当てはまるセルについては、文字の色を変えています。
図2 サンプルブック(イメージ図)と同じ結果です。
セルの範囲を利用して繰り返し処理を行うことができました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート