1

VBA を使用して、Excel スプレッドシートから Access データベースにデータをインポートしています。配列変数 (データ) を 17 個の要素で設定し、スプレッドシートの 1 行から 17 個の値をインポートする次のコードがあります。

For i = 1 To 17
    data(i) = Cells(Line.Row, i).Value
Next i

ループなしでこれを行うことはできますか?

ところで-列1のデータに基づいて異なる行が異なる処理を受けるため、ループ内でスプレッドシートの各行も処理しています。

4

2 に答える 2

1

はい、Range の値をバリアント変数に代入するだけで、値が 2 次元配列に保持されます。

次のように使用できます: debug.print 行では、最初の次元は行を参照し、ここでは常に 1 です。

Sub test()
    Dim v
    Dim line As Range
    Dim i As Long

    Set line = Range("A2:Q2")
    v = line.Value

    ' accessing the values:
    For i = LBound(v, 2) To UBound(v, 2)
        Debug.Print v(1, i)
    Next

End Sub

複数の行を反復処理していると言うように、Range 全体vを両方の次元に割り当てて反復処理することもできます。

于 2013-05-24T16:17:15.343 に答える
0

任意の変数に渡すときrangeに、配列を作成できます。ただし、2次元配列になります。1 次元にするには、(2 回) 転置する必要があります。したがって、コードは次のようになります。

data = Application.Transpose(Application.Transpose(Range(Cells(Line.Row, 1), _
                                                        Cells(Line.Row, 17))))

もう 1 つ重要な情報があります。これdata arrayは、デフォルトの 0 ではなく、インデックス 1 から始まります。

于 2013-05-23T21:16:42.510 に答える