【VBA】Withステートメントの使い方


今回はVBAで使える便利なWithステートメントについて見ていきます。Withは使わなくともプログラムはかけますが、より簡潔で読みやすいスマートなコードを書くためには必須ですので、ぜひ活用してください。
VBAを使用していると、同じオブジェクトに対して複数の操作を行うことが頻繁にあります。
たとえば、Excelのワークシートにある特定のセルに対して、値を設定したり、フォントを変更したり、色を設定したりといった一連の操作を行うことがあります。
しかし、それぞれの操作で毎回オブジェクトのフルパスを指定すると、コードが冗長で読みにくくなります。
そこで役立つのが With
ステートメントです。
このステートメントを使うと、一つのオブジェクトに対する複数の操作を一つのブロックにまとめることができ、コードがよりスッキリと整理され、読みやすくなります。
今回のブログでは、この With
ステートメントの基本的な使い方と、それを利用した具体的な例について解説していきます。是非、最後まで読んで、With
ステートメントの使い方をマスターし、より賢いコーディングを実現しましょう!
With
ステートメントとは何か?
Visual Basic for Applications (VBA) で利用できる With
ステートメントは、一つのオブジェクトに対して複数の操作を行うときに、そのオブジェクトを繰り返し参照する必要を省くための構造を提供してくれて、一連の命令をグループ化し、それら全てが同一のオブジェクトに対して適用されることを保証してくれます。
With
ステートメントの基本的な構文は次のようになります。
With object
.property1 = value1
.method1
.property2 = value2
End With
ここで object
は With
ステートメントの対象となるオブジェクトを指します。
そして With
と End With
の間に記述される .property
や .method
は、その object
に対するプロパティやメソッドを示します。
このステートメントを使用することで、各プロパティやメソッドの呼び出しにおいてオブジェクト名を繰り返す必要がなくなります。
これによりコードは整理され、読みやすくなり、さらに誤字や打ち間違いの可能性も減少します。
例えば、ある Excel ワークシートの特定のセルに対して一連の操作を行う場合、With
ステートメントを使用することで以下のようにコードを簡略化できます。
With Worksheets("Sheet1").Range("A1")
.Value = "Hello, World!"
.Font.Bold = True
.Interior.Color = RGB(255, 0, 0)
End With
このコードは、シート1のセルA1に対して以下の操作を行います:
- セルの値を “Hello, World!” に設定します。
- フォントを太字にします。
- セルの内部色を赤にします。
With
ステートメントを使わない場合、各行で全体のオブジェクト参照を繰り返さなければなりません。しかし、With
ステートメントはコードをシンプルに保つことができます。
ただし、With
ステートメントを適切に使用することが重要です。その範囲が長すぎると、コードの読みやすさを低下させる可能性があります。
また、多重の With
ステートメント(With
ステートメントの中に別の With
ステートメントがある場合)も注意深く使用する必要があります。それらはコードの複雑さを増加させ、エラーの原因となる可能性があります。
With
ステートメントの具体的な例
With
ステートメントの具体的な使用例についてもう少し詳しく説明しておきます。
エクセルシートのセルに対する操作
まず最初に、Excelのワークシートにある特定のセルに対して一連の操作を行う例を見てみましょう。
With Worksheets("Sheet1").Range("A1")
.Value = "Hello, World!"
.Font.Name = "Arial"
.Font.Size = 12
.Font.Bold = True
.Interior.Color = RGB(255, 0, 0)
.Borders.LineStyle = xlContinuous
End With
この例では、シート “Sheet1” のセル “A1” に対して、テキストの設定、フォント名とサイズの指定、太字の適用、背景色の変更、セルの境界線のスタイル設定という一連の操作を行っています。
フォームコントロールのプロパティ設定
次に、UserFormにあるコントロール(例えば、TextBox)のプロパティを一括で設定する例を見てみましょう。
With UserForm1.TextBox1
.Height = 20
.Width = 100
.Top = 10
.Left = 10
.Font.Name = "Arial"
.Font.Size = 10
End With
この例では、UserForm1のTextBox1に対して、高さ、幅、上辺と左辺からの位置、フォント名とサイズという一連のプロパティを設定しています。
ワークシートのプロパティ設定
最後に、ワークシート全体のプロパティを一括で設定する例を見てみましょう。
With Worksheets("Sheet1")
.Cells.Font.Name = "Arial"
.Cells.Font.Size = 10
.Cells.HorizontalAlignment = xlCenter
.PageSetup.Orientation = xlLandscape
End With
この例では、シート “Sheet1” に対して、全セルのフォント名とサイズ、セルの水平方向の配置、ページの印刷設定(ページの向き)という一連のプロパティを設定しています。
まとめ
ここまでWith
ステートメントについて見てきました。他言語を触ったことがある人でもWithはVBA独特の概念のため、少し混乱する人もいるかもしれません。
With
ステートメントを使用することで、同じオブジェクトに対する一連の操作をまとめて行え、コードがすっきりし、読みやすくなります。
また、タイプミスを減らすこともできます。
VBAの With
ステートメントは、あるオブジェクトに対する一連の操作をまとめて行うことを可能にします。
ただし、With
ステートメントの使い過ぎはコードの読みづらさを招くことがあるので、適切に使用することが大切です。

VBAを体系的に学びたい場合、本で学ぶことをお勧めしています。
kindle unlimited(キンドルアンリミテッド)であれば、いくつかのVBA関係の本を無料で読むこともできますよ。