2017-10-05 5 views
0

私は郵便番号を書いています。これは即時のウィンドウに210と表示されます。配列の範囲の値を代入する

Sub RangeToArr() 
    Dim data() As Variant 
    data = Range("Salary[EmpNum]").Value 
    Debug.Print UBound(data) 
End Sub 

私がベローを使用すると、Subscript out of range実行時エラーメッセージが表示されます。

Sub RangeToArr() 
    Dim data() As Variant 
    data = Range("Salary[EmpNum]").Value 
    Debug.Print data(210) 
End Sub 

dataが配列である場合は、それ以外、問題が何であるか、どのように上記のように、アレイに割り当てられた範囲の値にアクセスすることができますか?

+0

また、ローカルウィンドウのデータの範囲をブレークポイントでチェックします.1つの次元だけですか?列のデータでさえ、(1〜210,1〜1)のようにスコープすることができます。さらにこれを見て、データが範囲を表すことを前提にして、代入線から '.Value'部分を削除してください。 – Zerk

+0

上の範囲は、フィルタリングされたテーブル範囲の列です。有効範囲は6〜215です。 – mgae2m

+0

給与[EmpNum]とは何ですか? – Vityata

答えて

2

範囲を1次元配列のように参照しているデータ(210)を返そうとすると、配列に変換された範囲は2次元配列を作成します。範囲内の210番目のセルから値を得ることができます。

data(210, 1) 

2次元配列を強制する理由については、私は仮定できます。私の推測は、範囲に2列目の配列が追加された列が含まれているためです。たとえ列が1つしかない場合でも、2次元配列を作成するという行為は、データを扱う方法が同じままであることを意味します。これには例外があります - 範囲が単一のセルの場合、VBAは値を単なる次元として設定します。

+0

給与[EmpNum]が単一の列である場合、配列サイズはデータ(1〜210,1)でなければなりません。それが間違っていれば私の答えを訂正しても構いませんが、私の前提に間違っていることを理解する必要があります。 – Dave

1

サンプルが正しく動作するようにするには、テーブルサンプルに210行あることを確認してください。

  • クレート複数の列と複数の行
  • 入れたシンプルな名前付き範囲MyNamedRange:一般的に


    、配列や範囲のアイデアを得るために、このような何かを試してみてくださいその中のいくつかの値

  • 実行これとあなたはすぐに窓になっているかを見る:

Sub RangeToArr() 

    Dim arrVar As Variant 
    arrVar = Range("MyNamedRange") 
    Debug.Print arrVar(1, 2) 

End Sub 

の値を少し変更してください。

関連する問題