次に、Do Until〜Loopについて解説しよう。構文は下記の通りだ。
Do Until {条件式}
'〜ここに{条件式}に一致するまで実行する処理を書く〜
Loop
これは、条件式が真(True)である間、または条件式が真(True)になるまで、一連の処理を繰り返す。
図12のような学科の平均点の表があったとしよう。
「実行」ボタンをクリックすると平均点が50点以下のセルを赤で塗りつぶす。マクロはリスト8のようになる。
Option Explicit Sub 平均が50点以下のセルを赤にする() Dim no As Long no = 4 Do Until Cells(no, 3) = "" If Cells(no, 3).Value < 50 Then Cells(no, 3).Interior.ColorIndex = 3 End If If no >= 11 Then Exit Do Else no = no + 1 End If Loop End Sub
Do Until〜Loop構文で、空のセルが見つかるまで処理を繰り返す。50点以下のセルが見つかると、背景色を赤で塗りつぶす。行を表す変数noは、11行より大きくなった場合は、Exit Doで処理を抜ける。それ以外の場合は1行ずつ下方に移動していく。その途中で50点以下の値を見つけると、背景色を赤で塗りつぶす。
リスト8を実行すると、図13のようになる。
最後に、For Each〜Nextについて解説しよう。これは、「配列」「コレクション」の各要素に対して繰り返し処理を行う。構文は下記の通りだ。
※「配列」は変数の集まりを意味し、「コレクション」は「オブジェクトの集合体」を意味する。
For Each {要素} In {オブジェクトコレクションまたは配列}
'〜ここに処理を書く〜
Next
図14のような複数のシートとそのシートの中に簡単なデータがあったとしよう。
「メニュー」シートの「検索名前」に、このサンプルでは「栗餡子(くりあんこ)」と入力する。[全シートから検索]ボタンをクリックして、「栗餡子」のシートを選択させるマクロはリスト9のようになる。
Option Explicit Sub 全シートからの検索() Dim mySheet As Worksheet Dim searchName As String searchName = Range("C2").Value If searchName = "" Then MsgBox "検索名を入力してください。" Else For Each mySheet In Worksheets If mySheet.Name = searchName Then Worksheets(searchName).Select Exit Sub End If Next MsgBox "該当なし" End If End Sub
WorkSheet型の変数mySheetを宣言する。検索する名前を格納する文字列型のsearchName変数を宣言する。
searchNameには「メニュー」シート内の「名前検索」の欄(C2セル)に入力された値を格納しておく。変数searchNameが空の場合、すなわち、検索名が入力されていない状態で「全シートからの検索」ボタンをクリックすると、警告メッセージを表示する。
それ以外の場合は、For Each〜Nextを使って、Worksheet変数で全シートのコレクションWorksheetsの中を検索する。Nameプロパティで、searchName変数の値と「シート名」が一致した場合は、そのシートを選択すると、そのシートが表示される。「シート名」にないデータが入力された場合は「該当なし」と表示する。
実行すると、図15のようになる。
以上で主だったVBAの各処理の構文の解説は終わりだ。今回は、VBAで使用する「条件分岐」や「繰り返し処理」について解説してきた。サンプルも一緒に紹介しているので分かりやすい内容になっているのではないだろうか。
今回紹介した構文を知っていれば、それなりに実用性にあるVBAは作成できる。これらの処理を組み合わせて複雑な処理も実装できる。また機会があれば紹介したい。
ここで紹介したサンプルのマクロを、実際に自分でVBEの開発環境を起動して、直接手で入力して動作を確認してほしい。コピー&ペーストでコードを貼り付けることは厳禁だ。そんなことをしていたら、マクロの意味が理解できず、単なるまねごとに過ぎなくなる。必ず、コードを目で追いながら、自分の手で入力していただきたい。そうすればきっと理解も早まると思う。
また説明不足の点もあったかもしれない、その場合はWebで情報を探せば、VBAに関しては必要十分な情報が存在している。そちらも参考にして、より一層理解を深めていただきたいと願う。
次回は、今回覚えた「条件分岐」を生かして、Excelの「データ操作」について解説する予定だ。データの操作では、「データの並べ替え(Sort)」「検索」「データの置換」、AutoFilterでの「データの抽出」、セル値の合計、セル値の平均などについて解説するので、お楽しみに。
【2016/8/10】Windows 10、Excel 2016に対応しました。
PROJECT KySS 薬師寺 国安(やくしじ くにやす)
1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット
Copyright © ITmedia, Inc. All Rights Reserved.