石田修二研究室 > VBA >

Statement(ステートメント)

Ifステートメント

このように「状況に応じて処理を選択する」手法を「条件分岐」と呼ぶ。

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ステートメント

同一処理を何度も繰り返すことを「ループ」と呼ぶ。繰り返し処理。

カウンタ変数の宣言:

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

Withステートメント

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

複数のステートメントを組み合わせる

工事中


リンクはご自由にどうぞ。

【石田修二研究室】 【石田修二個人ページ】