サイトについて      連絡先   検索

VBA With 文

はじめに

Excel VBA マクロの With 文を使用してコードを省略する方法を紹介します。

繰り返し同じオブジェクトを指定する必要がなくなります。

With 文を入れ子にしたり、長すぎると逆にコードが見づらくなるので多様は禁物です。

  • 目次
    • With

With

With オブジェクトのように入力し、改行してEnd Withを入力します。その間に.を入力するとオブジェクト.と入力したことになります。


With Range("A1")
    .Value = "Tips"              ' Range("A1").Value
    .Font.Color = RGB(255, 0, 0) ' Range("A1").Font.Color
End With

With は入れ子にできます。ただし見づらいので通常は使いません。


' 入れ子にする
With Sheet1
    With .Range("A1") ' Sheet1.Range("A1")
        .Value = "Tips"              ' Sheet1.Range("A1").Value 
        .Font.Color = RGB(255, 0, 0) ' Sheet1.Range("A1").Font.Color 
    End With
End With

' 入れ子にしない方が見やすい
With Sheet1.Range("A1")
    .Value = "Tips"                  ' Sheet1.Range("A1").Value
    .Font.Color = RGB(255, 0, 0)
    .Interior.Color = RGB(255, 255, 0)
End With

また処理が長くなると、何のオブジェクトを指定していたのかわかりづらくなります。

素直に変数にオブジェクトを設定しても処理は実行できます。


' With を使わない
Dim cell As Range
Set cell = Range("A1")
cell.Value = "Tips"
cell.Font.Color = RGB(255, 0, 0)

' 変数名を短くすると見やすくなる
Dim r As Range
Set r = Range("A1")
r.Value = "Tips"
r.Font.Color = RGB(255, 0, 0)

With のいいところはオブジェクトの参照が 1 回で済みます。ほんのわずかに処理が速くなります。


' 通常のコード、3 回参照している
Dim cell As Range
Set cell = Range("A1")           ' 1
cell.Value = "Tips"              ' 2
cell.Font.Color = RGB(255, 0, 0) ' 3

' With のコード、1 回参照している
With Range("A1")                 ' 1
    .Value = "Tips"              
    .Font.Color = RGB(255, 0, 0) 
End With
  • 目次
    • With