VBA の With
ステートメントは、オブジェクトの繰り返し記述を省略できる便利な構文 です。
この With
の中に If
文を入れることで、オブジェクトの特定条件に応じた処理 をスマートに書くことができます。
本記事では、Excel VBA で With
の中に If
を組み合わせて使う方法や、その注意点、実践例 を解説します。
With の中に If を入れる基本構文
VBA では、With
ステートメントの中に If
文を入れることができます。With
の対象オブジェクトに対して条件分岐をしたいときに便利です。
✅ 基本構文
With オブジェクト
If .プロパティ = 条件 Then
' 条件に一致した場合の処理
Else
' 条件に一致しない場合の処理
End If
End With
📌 With
の中では、「.プロパティ」のように .
をつけてオブジェクトの各要素にアクセスできます。
📌 If
を入れ子にしても構文エラーにはなりません。
セルの値に応じてフォント色を変える
Sub FormatByValue()
With Range("A1")
If .Value >= 100 Then
.Font.Color = RGB(0, 128, 0) ' 緑色
Else
.Font.Color = RGB(255, 0, 0) ' 赤色
End If
.Font.Bold = True
End With
End Sub
📌 A1セルの値が 100 以上なら緑、未満なら赤に!
📌 .Font.Bold = True
のように、If
の外でもプロパティ設定が可能!
【VBA】シートを指定して With ステートメントを使う方法と実践例
複数条件で書式を変更
Sub FormatByConditions()
With Range("B2")
If .Value = "" Then
.Interior.Color = RGB(200, 200, 200) ' グレー(未入力)
ElseIf IsNumeric(.Value) And .Value > 1000 Then
.Interior.Color = RGB(255, 255, 0) ' 黄色(大きい数値)
Else
.Interior.Color = RGB(255, 255, 255) ' 白(その他)
End If
End With
End Sub
📌 With
の中で If...ElseIf...Else
の条件分岐が可能!
📌 書式設定をスッキリ記述できる!
【VBA】複数オブジェクトで With を使う方法と書き方の工夫
セルのフォント設定+条件付き出力
Sub FontStyleByContent()
With Range("C3")
.Font.Name = "Meiryo"
.Font.Size = 11
If .Value = "重要" Then
.Font.Bold = True
.Font.Color = RGB(255, 0, 0)
Else
.Font.Bold = False
.Font.Color = RGB(0, 0, 0)
End If
End With
End Sub
📌 セルに「重要」と入力されていれば赤字・太字にする!
📌 それ以外は通常の文字にリセット!
【VBA】フォーマット設定:数値形式・フォント・背景色の一括/条件設定
■メリットと注意点
✅ メリット
同じオブジェクトに対する条件処理をスッキリ書ける
.プロパティ
を繰り返さなくてよい処理速度も若干向上する(オブジェクト参照が一度で済む)
注意点
With
の中で別のオブジェクトを参照した場合、.
を付けるとWith
の対象オブジェクトとして解釈されるため、混乱に注意ネストが深くなりすぎると可読性が下がるので適度に分ける
ネストされた If も使える!
If
の中に If
をネストして使うことも可能です。
Sub NestedIfInWith()
With Range("D1")
If IsNumeric(.Value) Then
If .Value < 0 Then
.Font.Color = RGB(0, 0, 255) ' 青(負の数)
Else
.Font.Color = RGB(0, 128, 0) ' 緑(正の数)
End If
Else
.Font.Color = RGB(128, 128, 128) ' グレー(非数値)
End If
End With
End Sub
📌 入れ子の If
も With
の中で使用可能!
■まとめ
項目 | 内容 |
---|---|
目的 | With の中で条件に応じた処理を簡潔に書く |
構文 | With ... If .プロパティ = 条件 Then ... End If End With |
メリット | 同一オブジェクトへのアクセスがスッキリする/処理が高速 |
注意点 | .プロパティ の付け間違いに注意/ネストしすぎに注意 |