初心者のためのExcel エクセルマクロVBA入門-オブジェクト変数はSetを使う
オブジェクト(ロボ)はセットしないと使えない!
通常のString型やLong型の変数というのは値を格納するには代入式(=)を使えばいいだけでした。
strHoge = "これは文字列です" lngHoge = 12345
ですね。しかし、ロボ。つまりオブジェクト型の変数に実際のロボを入れるには、Setステートメントを使わないといけません。イメージ的にはデータではなくて、オブジェクトなのでちゃんとガチャンとセットしましょう。くらいでいいです。
だって文法ですもの。
オブジェクト型というのは、以前からも使っていますが、たとえばRange型。これはRangeロボを格納する用の変数ということですし、Sheet型ならSheetロボを入れるためのものです。この他にも無数にエクセルにはロボがいるわけですから、それぞれ用に変数を用意してあげることができます。
ロボの汎用型はObject型になります。なんかわからないけどオブジェクトを入れることだけははっきりしている場合はObjectを使ってもいいです。もちろんVariantでもいいですよ。ただし、変数に格納する時には必ずSetを付けましょう。ということです。よく見るのは・・・
Set shtHoge = Sheets("Sheet1")
でしょう。こうすれば後はshtHogeをそのままSheetロボとしてメソッドやプロパティを設定することができるのです。
※上級者のお話※
でも実は私の場合はSheets("Sheet1")なんてことはほとんどしません。する時はVBAで特定のエクセルファイルを開いてその中のシートを操作する時くらいです。というのも元々のマクロファイルとしてあるものはシートオブジェクトには自分で名前を付けてしまえるからです。そうすることでシート名とは全く関係なくオブジェクトを指定することができます。変数はマクロ製造者が勝手に作れるものですので、他の人が見るとどうしてもわかりにくくなるのです。変数は極力作らないことも、実は大切です。ですが、全部が全部というわけではなくパフォーマンスを考えて変数は適切に使えるようになりましょう。
オブジェクト型の変数は同じようにDimステートメントを使って作成します。前回もやりましたね。
Dim sht As WorkSheet Dim wbk As WorkBook Dim rng As Range Dim obj As Object
というようにAs の後にオブジェクトの名前を書いておけばOKです。ルートオブジェクトであるアプリケーションですら。
Dim app As Application
と書くこともできちゃいます。
次回は変数の名前について。色々とHogeとかFugaとかshtとかwbkとか使ってますが・・・
じつはちょっとルールがあります。
今日はここまで!
かしこ