このように「状況に応じて処理を選択する」手法を「条件分岐」と呼ぶ。
Ifステートメントの書式を見ていく。
【書式1】1行形式のIfステートメント
Sub ToggleColumn()
If Columns("C").Hidden = True Then Columns("C").Hidden = False
End Sub
【書式2】ブロック形式のIfステートメント
Sub ToggleColumn()
If Columns("C").Hidden = True Then
Columns("C").Hidden = False
End If
End Sub
なお、Thenキーワード以降の命令が複数あるときは、必然的に【書式2】(ブロック形式)になる。
Sub ToggleColumn()
If Columns("C").Hidden = True Then
MsgBox "C列を表示します"
Columns("C").Hidden = False
End If
End Sub
【書式3】【書式4】複数条件判断
Sub TestIf()
If Range("A1") = "特" Then
MsgBox "あなたは特別会員です"
ElseIf Range("A1") = "正" Then
MsgBox "あなたは正会員です"
ElseIf Range("A1") = "準" Then
MsgBox "あなたは準会員です"
Else
MsgBox "会員種別を入力して下さい"
End If
End Sub
このように、ElseIf節を使うと条件の数を無数に増やせる。上から順に条件判断をし、一致した時点で処理を実行すればよい。対象がいずれの条件 にも該当しないという場合、構文の最後にElse節を記述して、そこでしかるべき処理を実行する。
(補足)Ifステートメントの条件で使用される「=」は、これまでに説明した「右辺を左辺に代入する」演算子ではなく、「左辺と右辺が等しい」こと を意味す る等号記号である。
ついでに比較演算子のおさらいをしておこう。
比較演算子 |
例 |
意味 |
---|---|---|
= |
If Range("A1") = 100 Then ... |
100を等しければ |
> |
If Range("A1") > 100 Then ... | 100より大きければ |
< |
If Range("A1") < 100 Then ... | 100未満ならば |
>= |
If Range("A1") >= 100 Then ... | 100以上ならば |
<= |
If Range("A1") <= 100 Then ... | 100以下ならば |
<> |
If Range("A1") <> 100 Then ... | 100でなければ |
(補足)TrueとFalse
Trueが「真」で、Falseが「偽」を意味する。VBA上ではTrueは「-1」、Falseは「0」を表している。
「= True」「= False」の省略
条件がTrueかFalseかを判断するIfステートメントの場合、「= True」「= False」の記述を省略することができる。
複数の条件による判定(104ページ)
Ifステートメントを重ねる
論理演算子を使う(And演算子、Or演算子)
Sub TestIf2()
If Range("A1").Value > 100 And Range("A1").Value < 200 Then
MsgBox "OKです"
Else
MsgBox "NGです"
End If
End Sub
同一処理を何度も繰り返すことを「ループ」と呼ぶ。繰り返し処理。
カウンタ変数の宣言:
For...Nextステートメントには、ループ回数をカウントするための「カウンタ変数」が不可欠である。一般的に、カウンタ変数は、「i」 「n」などの名前で整数型として定義する。
Sub SheepCountSleep()
Dim i As Long
For i = 1 To 10
MsgBox "ひつじが" & i & "ひき"
Next i
End Sub
&演算子
(例)ワークシート名を変更する
Sub NameWorkSheets()
Dim i As Integer
Dim myWSCnt As Integer
myWSCnt = Worksheets.Count
For i = 1 To myWSCnt
Worksheets(i).Name = "シート" & i
Next i
End Sub
このように、カウンタ変数をループのカウンタ以外の目的にも利用すると、プログラミングの幅がさらに広がる。
(例)ワークシートのA列の2行目から取引先名の一覧が入力されているとします。この一覧にある名称のフォルダを全部作りたい場合は次のようなコードを書きます。
Sub フォルダ作成() Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row MkDir ThisWorkbook.Path & "\" & Cells(i, 1) Next i End Sub
4行目の MkDir 関数はフォルダを作成する際に使います。
単純にNo1からNo10まで10個作りたければ次のように書きます。
Sub フォルダ作成() Dim i As Long For i = 1 To 10 MkDir ThisWorkbook.Path & "\No" & i Next i End Sub
VBAの命令をまとめる。
まずはWithを使わないプロシージャから。
Sub TestWith()
Range("B1").Value = "学籍番号"
Range("B1").Font.Name = "MS ゴシック"
Range("B1").Font.Bold = True
Range("B1").Font.Size = 18
End Sub
これらのステートメントは、すべてB1に対する処理である。このように同じオブジェクトを対象に連続して処理を行うときには、Withステートメン トを使って次のように簡略化できる。
Sub TestWith()
With Range("B1")
.Value = "学籍番号"
.Font.Name = "MS ゴシック"
.Font.Bold = True
.Font.Size = 18
End With
End Sub
このように、Withステートメントは、「With」で始まり、「End With」で終わる。
Sub TestWith()
With Range("B1")
.Value = "学籍番号"
With .Font
.Name = "MS ゴシック"
.Bold = True
.Size = 18
End With
End With
End Sub
工事中
リンクはご自由にどうぞ。