プログラムの肝! 条件分岐と繰り返しの基本文法とさまざまな書き方Excelマクロ/VBAで始める業務自動化プログラミング入門(6)(4/4 ページ)

» 2016年08月10日 05時00分 公開
[薬師寺国安PROJECT KySS]
前のページへ 1|2|3|4       

条件式が真の間、処理を繰り返すDo Until〜Loop

 次に、Do Until〜Loopについて解説しよう。構文は下記の通りだ。

Do Until〜Loop構文

Do Until {条件式}

 '〜ここに{条件式}に一致するまで実行する処理を書く〜

Loop


 これは、条件式が真(True)である間、または条件式が真(True)になるまで、一連の処理を繰り返す。

 図12のような学科の平均点の表があったとしよう。

図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
リスト8 平均点が50点以下のセルを赤で塗りつぶす

 Do Until〜Loop構文で、空のセルが見つかるまで処理を繰り返す。50点以下のセルが見つかると、背景色を赤で塗りつぶす。行を表す変数noは、11行より大きくなった場合は、Exit Doで処理を抜ける。それ以外の場合は1行ずつ下方に移動していく。その途中で50点以下の値を見つけると、背景色を赤で塗りつぶす。

 リスト8を実行すると、図13のようになる。

図13 学科の平均点が50点以下の場合背景色が「赤」で塗りつぶされた

「配列」「コレクション」の各要素に対して繰り返し処理を行うFor Each〜Next

 最後に、For Each〜Nextについて解説しよう。これは、「配列」「コレクション」の各要素に対して繰り返し処理を行う。構文は下記の通りだ。

※「配列」は変数の集まりを意味し、「コレクション」は「オブジェクトの集合体」を意味する。

For Each〜Next構文

For Each {要素} In {オブジェクトコレクションまたは配列}

 '〜ここに処理を書く〜

Next


 図14のような複数のシートとそのシートの中に簡単なデータがあったとしよう。

図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
リスト9 全シートからの「名前」検索

 WorkSheet型の変数mySheetを宣言する。検索する名前を格納する文字列型のsearchName変数を宣言する。

 searchNameには「メニュー」シート内の「名前検索」の欄(C2セル)に入力された値を格納しておく。変数searchNameが空の場合、すなわち、検索名が入力されていない状態で「全シートからの検索」ボタンをクリックすると、警告メッセージを表示する。

 それ以外の場合は、For Each〜Nextを使って、Worksheet変数で全シートのコレクションWorksheetsの中を検索する。Nameプロパティで、searchName変数の値と「シート名」が一致した場合は、そのシートを選択すると、そのシートが表示される。「シート名」にないデータが入力された場合は「該当なし」と表示する。

 実行すると、図15のようになる。

図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年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。