連載
» 2016年08月10日 05時00分 UPDATE

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

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。今回は、For〜Next、Step、If〜Then、Else、Exit、比較演算子、Select〜Case、Do While/Until〜Loopの使い方などを解説する【Windows 10、Excel 2016に対応】。

[薬師寺国安,PROJECT KySS]

初心者には難関だが、実用的なVBAには欠かせない

 プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。今回は、前々回の「Excelの基本オブジェクト「セル」の参照、移動、コピー、選択、挿入、削除」、前回の「セルの数値、フォント、文字位置、背景色、けい線など表示形式/書式設定の使い方」といった、具体的な処理から少し離れ、VBAプログラミングにおける「条件分岐」と「繰り返し処理」について解説する。また、この2つの中でも、それぞれに異なった処理の構文があるので、それらについて、サンプルを交えながら解説していく。

 これらの処理は、VBAプログラムを作る上で、最低限、必ず知っておかねばならない構文だ。これらの処理を知らずして、実用的なVBAを書くことはできない。単に任意のセルに値を表示させる処理も、確かにプログラムではあるが、実用的なプログラムとはいえない。

 本格的なプログラムを書こうとすれば必ず、条件による分岐処理、また繰り返し処理の手続きが必要になる。これらの処理はVBAに限らず、他の手続き型プログラミング言語、プラットフォームでも同様に必要なものだ。

 特にVBAのこれらの処理は、ほとんどがVB(Visual Basic)の処理と同じであるから、VBAは知らなくてもVBを知っているなら、「条件分岐」「繰り返し処理」の書き方も知っていることだろう。ただ本連載はVBAについての解説なので、Excelマクロの中でこれらの処理をどのように使っていけばいいのかを解説していこう。

 この連載は、プログラミング初心者を対象としているので、プログラムの専門用語などが出てきた場合は、その用語についても簡単に解説を付け加えて解説をする。少々抽象的な話になるが、お互いに頑張ってVBAマスターへとまい進しようではないか!

For〜Nextで繰り返し処理

 本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」のテーマである「業務自動化」を実現するには、プログラミングで繰り返し処理を行うことは欠かせない。繰り返し処理を行うには、ある「条件」が必要となる。

 その「条件」には、さまざまな指定の仕方があるが、まずは分かりやすく「N(数値)回になるまで処理を繰り返す」という条件を指定する方法を紹介しよう。

 回数を指定して、処理を繰り返すには、「For」を使用する。その中で、「ループカウンター」(何回目の処理かを数えるカウンター代わりに使う変数)を指定する。例えば、変数「i」を宣言する。カウンターは1回、2回と増えていくので、変数iのデータ型は整数(Integer型)になる。

 取りあえず、変数「i」に、繰り返し回数として「5」を指定しておく。つまり、加算処理を5回繰り返すことになるわけだ。

 繰り返しのマクロはForで始まりNextで終わる。構文は下記の通りだ。

For〜Nextの構文

For {カウンターとなる変数} = {初期値} to {終値}

 '〜ここに繰り返したい処理を書く〜

Next


 ではFor〜Next文を使って、「Sheet1」の後ろに、「1月期売上」〜「12月期売上」の12枚のシートを追加してみよう。マクロはリスト1のようになる。シートの詳細な使い方については、後の連載で解説する。

Option Explicit
Sub シートを12枚追加()
Dim i As Integer
For i = 1 To 12
  Worksheets.Add After:=Worksheets(i)
  ActiveSheet.Name = i & "月期売上"
Next
End Sub
リスト1 12枚のシートを追加する

 もともと表示されている「Sheet1」の後ろに「1月期売上」〜「12月期売上」のシートを追加した。シート名にはNameプロパティを使って、繰り返し変数「i」と文字列「月期売上」を&(アンパサンド)で連結して表示している。

 [シートを12枚追加]というボタンを作成して、リスト1のマクロを登録している。実行すると、図1のようになる。

図1 「1月期売上」〜「12月期売上」のシートを追加した

For〜NextにStepを使い、増分を配慮した繰り返し処理

 では、次に「増分」を使ったサンプルを紹介しよう。構文は以下のようになる。

Stepを使う、増分を配慮した構文

For {カウンターとなる変数} = {初期値} to {終値} Step {増分}

 '〜ここに繰り返したい処理を書く〜

Next


 図2のような表があったとする。

図2 番号と氏名の入った表

 図2の表を「1行おきに背景色を黄色にする」ボタンをクリックして、ボタンのタイトル通りにしてみよう。マクロはリスト2のようになる。背景色については、前回の「セルの背景色を設定」を参照してほしい。

Sub 1行おきに背景色を黄色にする()
Dim i As Integer
For i = 5 To 13 Step 2
  Range(Cells(i, 7), Cells(i, 8)).Interior.ColorIndex = 27
Next
End Sub
リスト2 1行おきに背景色を黄色にする

 繰り返し変数iを5〜13行で2つおきにFor文の内容を繰り返す。「Cells(i,7),Cells(i,8)」は、行が5〜13行で、7列目(G)と8列目(H)に対して、「Interior.ColorIndex」プロパティに黄色を表す色番号「27」を指定している。

コラム「見た目が美しく見やすい資料の作成にマクロは有効」

こういった処理をマクロ化して何がうれしいのか? それはデータのUI(ユーザーインタフェース)が良くなることだ。資料は見た目が美しく見やすい方が訴える力はある。その意味でも、このようなマクロの利用方法はアリだ、と筆者は思っている。


 実行すると、図3のように表示される。

図3 1行おきに背景色が黄色になった
       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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