Withステートメント
<< エクセルVBAのIE制御に利用したステートメント一覧(VBAのIE制御入門) :前の記事
<< エクセルVBAのプログラムの制御構文(VBAの初心者入門) :前の記事
こちらは、エクセルVBAのWithステートメントの解説になります。こちらは、ある1つのオブジェクトに対して処理をまとめて記述する場合に利用される便利な機能になります。Withステートメントを利用しなくても実行内容は変わりませんが、処理の追加や変更の容易さやプログラムコードの見易さなどメリットも大きいので積極的に利用するようにしましょう。
また、ステートメントとは「命令文」と訳されるようにコンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
Withステートメントとは
Withステートメントは、オブジェクトやユーザー定義型に対して、一連のステートメントを実行するフロー制御ステートメントです。
Withの後に半角スペースを挟み、1つにまとめたいオブジェクト名を記述します。WithからEnd Withまでの間は、Withの後に記述したオブジェクト名を省略することができます。オブジェクト名が省略できるため、命令文は「.(ピリオド)」から始まりプロパティなどを記述します。
With オブジェクト名・ユーザー定義型名
.プロパティ名
.メソッド名
・・・
End With
構文 | With object [statements] End With | |
---|---|---|
キーワード | 省略 | 説明 |
object | × | こちらは必須キーワードです。オブジェクト名またはユーザー定義型名を指定します。 |
statements | ● | こちらは省略可能です。引数objectに対して、実行するステートメントを指定します。また、複数のステートメントを記述できます。 |
同じオブジェクトをWithステートメントでまとめることで、プログラムを簡素化でき、更にオブジェクトが変更になってもWithの後に記述したオブジェクトを変更することでまとめて変更できるというメリットもあります。
ただし、同じ命令文の中でWithステートメントでまとめられるオブジェクトは1種類のみですのでご注意ください。
オブジェクトを設定したWith文サンプルコード
Sub sample()
With Sheets("Sheet1")
.Range("A1").Value = "エクセル"
.Range("A2").Value = "VBA"
.Range("A3").Value = "入門"
End With
End Sub
実行結果
解説
sampleのSubステートメントには引数の設定はされていません。まず、Withステートメントのオブジェクト名に「Sheets("Sheet1")」を設定しました。これによりオブジェクト名を省略して記述できるようになりました。このように操作したオブジェクトを一度指定するだけで複数のプロパティの設定を行えます。
ユーザー定義型を設定したWith文サンプルコード
Type Personal
Name As String
Age As Byte
End Type
Sub sample()
Dim perA As Personal
With perA
.Name = "鈴木"
.Age = 20
MsgBox "名前:" & .Name & ", 年齢:" & .Age
End With
End Sub
実行結果
解説
こちらのユーザー定義型を作成した事例です。ユーザー定義型名はPersonalで、名前の変数Nameに文字列型(String)、年齢の変数Ageにバイト型(Byte)を設定しています。
続いて、変数perAに作成したユーザー定義型のPersonalを宣言しています。これによりユーザー定義型「Personal」を利用できるようになりました。そしてWithステートメントのユーザー定義型名に「perA」を設定し、これによりユーザー定義型名を省略して記述できるようになりました。
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。