【VBA】Setステートメントでオブジェクトを格納します

 前回記事では列と行の取得についてお話しました。
 今回はリストのセルを参照する方法を説明します。いつも同じデータばかり使っていると飽きてしまうので、今回から新しいデータを使いましょう。

氏名 ふりがな
谷頭 慶子 たにがしら けいこ
若島 祐子 わかしま ゆうこ
藁粥 幸子 わらがゆ ゆきこ
桐淵 多美子 きりぶち たみこ
射手矢 三香 いでや みか

 これをコピーしてセル B2 に貼りつけてからテーブルに変換してね。テーブル名は「氏名」としておいてくださいな。データ部分の1列1行目にある「谷頭 慶子」というデータを取得してみます。

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)

と書けばよいのです。

コメント

タイトルとURLをコピーしました