

以下のコードでセルの値を配列に格納する処理をおこなっていますが、`Debug.Print ary(j, 1)`
で確認しても値が表示されない（取得できていない）ようです。

[code]

    ary = Array(Cells(j, "E").Value, Cells(j, "F").Value, Cells(j, "G").Value, Cells(j, "H").Value, Cells(j, "I").Value)
    
[/code]

下記のコードで何が間違いなのでしょう？エラー等は発生しておりません。

[code]

    Dim j As Long
    Dim ary As Variant
    
    For j = 1 To LastRow
        If Cells(j, "J").Value = "JST" Then
            ary = Array(Cells(j, "E").Value, Cells(j, "F").Value, Cells(j, "G").Value, Cells(j, "H").Value, Cells(j, "I").Value)
            Debug.Print ary(j, 1)
        End If
    Next
    
[/code]


CC BY-SA 4.0
2022-07-20T03:22:13.410
90098
2022-07-20T11:43:48.323
2022-07-20T04:34:44.587
3060
question
vba
VBA　値の取得と配列への格納について


> 下記のコードで何が間違いなのでしょう？エラー等は発生しておりません。

`Debug.Print ary(j, 1)`で「インデックスが有効範囲にありません。」のエラーが発生するはずですが。  
どこかに `On Error Resume Next`当のエラーを無視するコードを記述してませんか。しているなら、まずはそれをコメントアウトしましょう。

エラーの原因は、Array関数は一次元配列を返しますので、aryは一次元配列になります。  
にもかかわらず、`ary(j, 1)`と二次元配列として扱っているので上記のエラーになります。

`Debug.Print ary(0)`  
とすれば配列の先頭の値(=Cells(j, "E").Value)が表示されます。

やりたいことが、E～I列の1行目からLastRowまでの範囲を配列に格納したいということなら、ループせずとも下記の1行で可能です。

[code]

       Dim LastRow As Long
       LastRow = Cells(Rows.Count,"E").End(xlUp).Row
    
       Dim ary() As Variant
       ary = Range(Cells(1,"E"),Cells(LastRow,"I")).Value
    
       '配列の1列目(E列)の値の確認
       Dim i
       For i = 1 to LastRow
           Debug.Print ary(i, 1)
       Next
    
[/code]

ちなみに、上記のようにValueで代入した配列は、インデックスが1から始まります。  
Array関数は0から始まります。


CC BY-SA 4.0
2022-07-20T06:44:52.887
90103
2022-07-20T11:43:48.323
2022-07-20T11:43:48.323
42240
42240
90098
answer