3

これは非常に単純な問題ですが、私は1時間頭を悩ませてきました。私は次のことをしようとしています:

  1. スプレッドシートの名前付き範囲からVBA配列を定義する
  2. その配列内のアイテムにアクセスする

ここで、名前付き範囲が多次元領域(行と列)をカバーしている場合、これは正常に機能します。

foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)

ただし、名前付き範囲がデータの単一のディメンション(列のみ)で構成されている場合、「添え字が範囲外」エラーが発生します。

foobar = Range("one_dimensional_range")
MsgBox foobar(1)

foob​​arが実際には配列であることを確認しました。For Each...Nextで繰り返すことができます。Ubound(foobar)を呼び出すと、正しいサイズが得られます。私はそれの単一の要素に直接アクセスすることはできません!

私は何が間違っているのですか?

4

1 に答える 1

6

範囲(単一のセルではない)をバリアント配列に割り当てると、それは常に多次元配列になるため、このMsgBox foobar(1,1)は2番目のインスタンスでも機能します。

この例を参照してください

Option Explicit

Sub Sample()
    Dim Ar As Variant

    Ar = Range("A1:A2")

    Debug.Print Ar(1, 1)
    Debug.Print Ar(2, 1)
End Sub

もう一つの例

Option Explicit

Sub Sample()
    Dim Ar As Variant

    Ar = Range("A1:B2")

    '~~> Get Values from Col A
    Debug.Print Ar(1, 1)
    Debug.Print Ar(2, 1)

    '~~> Get Values from Col B
    Debug.Print Ar(1, 2)
    Debug.Print Ar(2, 2)
End Sub
于 2012-08-30T18:33:49.800 に答える