プログラムの肝! 条件分岐と繰り返しの基本文法とさまざまな書き方:Excelマクロ/VBAで始める業務自動化プログラミング入門(6)(4/4 ページ)
プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、For〜Next、Step、If〜Then、Else、Exit、比較演算子、Select〜Case、Do While/Until〜Loopの使い方などを解説する【Windows 10、Excel 2016に対応】。
条件式が真の間、処理を繰り返すDo Until〜Loop
次に、Do Until〜Loopについて解説しよう。構文は下記の通りだ。
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〜Nextについて解説しよう。これは、「配列」「コレクション」の各要素に対して繰り返し処理を行う。構文は下記の通りだ。
※「配列」は変数の集まりを意味し、「コレクション」は「オブジェクトの集合体」を意味する。
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のようになる。
次回は、Excelの醍醐味、データ操作!
以上で主だった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.
関連記事
- Excelマクロ/VBAリファレンス用途別・キーワード別一覧超まとめ
- ピボットテーブルとは何か──「そもそも、何をする機能か」を理解する
Excelを通じて「ピボットテーブル」の基礎を学び、データ分析を実践するまでを習得する本連載。初回はピボットテーブルの基礎と、「どんなことができるのか」を解説する。 - どんなビジネスにも欠かせないリレーショナルデータベースの基礎知識と作り方――テーブル、レコード、フィールド、主キーとは
Accessを通じて、初心者がリレーショナルデータベースやSQLの基本を学び、データベースを使った簡単なシステムの作り方を習得する本連載。初回はデータベースの基本を理解し、Accessを使い始めてみよう。