前回記事では列と行の取得についてお話しました。今回はリストのセルを参照する方法を説明します。いつも同じデータばかり使っていると飽きてしまうので、今回から新しいデータを使いましょう。
氏名 | ふりがな |
---|---|
谷頭 慶子 | たにがしら けいこ |
若島 祐子 | わかしま ゆうこ |
藁粥 幸子 | わらがゆ ゆきこ |
桐淵 多美子 | きりぶち たみこ |
射手矢 三香 | いでや みか |
これをコピーしてセル B2 に貼りつけてからテーブルに変換してね。テーブル名は「氏名」としておいてくださいな。データ部分の1列1行目にある「谷頭 慶子」というデータを取得してみます。
'[VBA] Setステートメントのサンプルコード Sub Select_Data() Dim my_data As Range 'データ部分を取得して my_data に格納 Set my_data = ActiveSheet.ListObjects("氏名").DataBodyRange '左上隅のデータを表示 Debug.Print my_data.Cells(1, 1) End Sub
Select_Data() を実行すると VBE 画面の下にあるイミディエイトウィンドウに「谷頭 慶子」と表示されます。
【VBA】Set ステートメント
Setステートメントを使うと、変数にオブジェクトを丸ごと格納できます。
Set my_data = ActiveSheet.ListObjects("氏名").DataBodyRange
という記述はテーブルのデータ部分だけをとって my_data に放り込んでいます。上のような短いマクロではあまり有難味を感じられませんけど、
ActiveSheet.ListObjects("氏名").DataBodyRange
のように何度も同じオブジェクトを参照しなくてはならない場合、記述を簡略化できるので、とても重宝するのです。とりあえず、データ範囲などを取得するオブジェクトは Set ステートメントで変数にぽいっと放り込む癖をつけておきましょう。
Debug オブジェクトはイミディエイトウィンドウのことです。このオブジェクトに対して Print メソッドを用いて
Debug.Print x
と記述すると x の値が表示されます。
my_data にデータ範囲が入っているので、
my_data.Cells(1, 1)
と書くだけでセルを参照できます。cells プロパティは
Cells(行, 列)
という記述でデータ範囲に対して「相対位置」でセルを参照します。
my_data は見出しを除いたデータ部分が入っているので、1行1列目はセル B3 となっています。つまりこのセルを抜き取ってイミディエイトウィンドウに表示するには
Debug.Print my_data.Cells(1,1)
と記述します。ここを起点に3行1列目のデータ「藁粥 幸子」を表示させたい場合は
Debug.Print my_data.Cells(3,1)
と書けばよいのです。
コメント
VBAのSetステートメントは、オブジェクト型で定義したオブジェクト変数にオブジェクトを格納するときに使用します。
構文:Set オブジェクト変数 = オブジェクト
オブジェクト変数:オブジェクト型で定義した変数を指定します。
オブジェクト:オブジェクトを指定します。オブジェクトは、Excelのワークブック、シート、セル、コントロールなど、さまざまなものがあります。
説明:Setステートメントは、オブジェクト変数にオブジェクトへの参照を代入します。オブジェクトへの参照とは、オブジェクトのインスタンスを識別するために使用される値です。オブジェクト変数にオブジェクトへの参照が代入されると、その変数を使用してオブジェクトのメソッドやプロパティを操作できるようになります。
例:
この例では、wbというオブジェクト変数を定義し、ワークブックオブジェクトのインスタンスを代入しています。
注意点:Setステートメントを使用してオブジェクトを代入すると、オブジェクトへの参照が代入されるだけです。オブジェクトそのものは複製されません。そのため、複数のオブジェクト変数が同じオブジェクトへの参照を共有することになります。
まとめ:Setステートメントは、オブジェクト型で定義したオブジェクト変数にオブジェクトを格納するために使用します。Setステートメントを使用してオブジェクトを代入すると、その変数を使用してオブジェクトのメソッドやプロパティを操作できるようになります。