Withを使うか、オブジェクト変数を使うか
Withステートメントを使うと入力を省略できます。
例えば次のようなコードについて説明します。
Sheets("Sheet1").Cells(1,1) = 1
Sheets("Sheet1").Range("A2") = 2
このコードをWithステートメントを使うと
次のコードのように入力できます。
With Sheets("Sheet1")
.Cells(1,1) = 1
.Range("A2") = 2
End With
これをオブジェクト変数を使ってやってみます。
Dim sh As Object
Set sh = Sheets("Sheet1")
sh.Cells(1,1) = 1
sh.Range("A2") = 2
個人的には上から順番に
コードの仕方が変わってきました。
WithはJavaにはなかったのでスルーしていましたが、
使えば便利です。
しかし、Withステートメントは入れ子状に使うので
その中のコードが長くなるとき見にくくなるので、
最近は避けるようになりました。
またIf文のような中でWithを使うと
何重にも入れ子になり見にくくなると思います。
このような理由でオブジェクト変数を使うのを好みます。
大体の処理や操作は
A → B
なので汎用のオブジェクト変数が2つあれば
たくさん変数を宣言しなくても対応できます。
例えば、"Sheet1"シートのセルA1の値を
"Sheet2"シートのセルC1の値に代入するときこのようにします。
Dim sh1 As Object
Dim sh2 As Object
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
sh2.Range("C1") = sh1.Range("A1")
もう一つWithステートメントの使いにくいところを挙げると、
デバッグモードのときに
Withの中のコンマで始まる個所を変更できないことです。
変更しようとすると
次のようなダイアログが出て終了しなければいけません。
現時点での方針は、
扱うオブジェクトが少ない、つまり
WithとEnd Withの間が短くて済む場合は
Withステートメントを使います。
そのほかの場合はオブジェクト変数を使います。
本ブログを参考にする場合、
この事を頭の片隅に置いて読むと理解しやすいかと思います。
| 固定リンク
この記事へのコメントは終了しました。

コメント