3

バリアント変数があり、次の範囲の値を次のように渡します。

Option Base 1
Dim varEmployees As Variant

varEmployees = Range("A1:B5").Value

この 2D バリアントには、第 1 次元に従業員 ID、第 2 次元に従業員名が含まれるようになりました。したがって、次のようなものが得られます。

varEmployees(1,1) = 1234    varEmployees(1,2) = John Doe
varEmployees(2,1) = 5678    varEmployees(2,2) = Jane Smith
varEmployees(3,1) = 9012    varEmployees(3,2) = Mary Major
varEmployees(4,1) = 3456    varEmployees(4,2) = Judy Stiles
varEmployees(5,1) = 7890    varEmployees(5,2) = Richard Miles

ループを使わずに2次元のみを範囲に書き戻したいのですが、以下のコードを使うと...

Range("D1:D5") = varEmployees

実際の結果の下に示されているように、1 番目のディメンションしか得られませんが、必要なのは望ましい結果 (2 番目のディメンションのみ) です。

Actual Results       Desired Results
--------------       ---------------
    1234             John Doe
    5678             Jane Smith
    9012             Mary Major
    3456             Judy Stiles
    7890             Richard Miles

これを行う方法はありますか、または私が認識していないバリアント配列に関する規則はありますか。

4

1 に答える 1

7

を使用して取得したバリアント配列someRange.Valueは常に 1 ベースであるため、実際には必要ありません。Option Base 1

これがあなたが望むことをする方法です:

Sub Test()

    Dim a As Variant, b As Variant
    a = Range("A1:B5").Value

    'get a specific column
    b = Application.Index(a, 0, 2) '0="all rows"
    With Range("D10")
        .Resize(UBound(b), 1).Value = b
    End With

    'get a specific row
    b = Application.Index(a, 2, 0) '0="all cols"
    With Range("D21")
        .Resize(1, UBound(b)).Value = b
    End With        
End Sub
于 2013-09-20T00:16:30.897 に答える