表の範囲を取得する - Excel VBA プログラミング

PROGRAM


表の範囲を取得する

Excel VBA では、範囲だけではなく、テーブルとして設定したセルの範囲も取得することができます。

例えば次のように "値段表" というテーブルがあったとします。

表全体を取得する

この時、次のようにすることで、表全体を範囲 (Excel.Range) として取得することができます。

Set 値段表 = Range("値段表")

こうすることで、表でいう次の範囲が取得できたことになります。

こうして取得したら、たとえば表の 3 番目の商品名を表示したいような場合など、次のような感じでプログラミングできます。

Call MsgBox(値段表(3, 2))

表の左端を (1, 1) として、最初の数値で行番号を、次の数値で列番号を指定してあげる感じです。

ちなみに、通常の範囲と同様 Cells メソッドを使って "値段表.Cells(3, 2)" という指定方法もありますけど、Cells は Excel.Range のディフォルトメソッドなので、上記の例では Cells の記載を省略しています。

個人的な感想ですけど、表の場合は Cells を省略した方が、直感的にわかりやすいように思います。もちろん通常の範囲でも Cells を省略することはできます。

 

また、行番号を 0 で指定することで、その列の名前を取得することもできました。

Call MsgBox(値段表(0, 2))

このようにすると、2 列目の名前が取得されます。

 

また、取得した範囲の Rows.Count を取得することで、その行数を取得することができます。

そこで、次のようにして、表全体を行ごとに順次処理をして行くといったプログラミングも簡単です。

Dim 行番号 As Long

 

For 行番号 = 1 To 値段表.Rows.Count

 

' ここで行ごとの処理を行います。

 

Next

各行ごとの処理としては、たとえば "値段表.Cells(行番号, 3)" とすれば、値段を順に取り出すことができます。

同じように "値段表.Columns.Count" などとして、列の数を取得することも可能です。

表から列を取得する

表の列を取得することもできます。

Set 商品名リスト = Range("値段表[商品名]")

たとえばこのようにすることで、テーブル "値段表" の中の "商品名" の列に限定して、範囲 (Excel.Range) を取得することが可能です。

取得できた範囲についての操作は、これまでの表の時と同じです。

取得した範囲は "商品名" の列に限定されていますので、ここからセルを取得する場合は、次のように列番号を省略して取得することができます。

商品名リスト(3)

これは単に列番号 1 を省略しているだけですので、"商品名(3, 1)" でも同様です。

ちなみになぜか、商品名(3, 2) とすると、隣の列の "価格" の値が取得できるようでした。なんとなく不思議なような気もしますけど、Excel.Range って、そんな感じなのかもしれないですね。

 


[ もどる ]