更新日:、 作成日:
VBA With 文の使い方
はじめに
Excel VBA マクロの With 文でオブジェクトを参照したり、入れ子にする方法とを紹介します。
With オブジェクト のようにして、. からオブジェクトを参照できます。
オブジェクトには参照型か構造体を指定できます。
With の中に With を入力して入れ子にできますが、わかりづらいので使用しません。
参照型については「クラス」をご覧ください。
構造体については「構造体」をご覧ください。
With
With オブジェクト のように入力し、改行して End With を入力します。
With の中に . を入力すると オブジェクト. を入力したことになります。変数を宣言しなくても、オブジェクトを何度も参照できるのが便利です。
オブジェクトには参照型か構造体を指定します。Sheet1 などのシートや、セルを表す Range、クラスなどがオブジェクトです。
With Range("A1")
.Value = "Tips" ' Range("A1").Value
.Font.Color = RGB(255, 0, 0) ' Range("A1").Font.Color
End With
' 次のコードと同じ
Dim r As Range
Set r = Range("A1")
r.Value = "Tips"
r.Font.Color = RGB(255, 0, 0)
With の中にはオブジェクトを使用しないコードも入力できます。
With Range("A1")
Range("B1").Value = .Value ' Range("A1").Value
Debug.Print(.Address) ' Range("A1").Address
Debug.Print("関係ない")
End With
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
' このようにもできますが、入れ子にする意味がない
With 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"
.Font.Color = RGB(255, 0, 0)
End With
また With が長くなると、何のオブジェクトを参照しているのかわかりづらくなります。
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
スポンサーリンク