0

マクロに次のコードがありますが、実行すると、以下のコードの5行目で指定したように、B2:D2の値の全範囲ではなく、セルB2の値のみがコピーされます。

Sub copying()
Dim calval as variant
With worksheets("sheet1")
Set calval=.Cells(Rows.Count,"B").End(xlUp).Offset(2,3)
calval.value=Range("B2:D2").Value 'copy range of values
End With
End Sub

これはセルB2:D2のデータです

21.7 21.3 22.4

B2の値だけでなく、B2:D2のすべての値をcalvalに割り当てる方法を教えてもらえますか。

4

2 に答える 2

3

ここでいくつか問題があります。まず、バリアントにコピーする場合、それらはオブジェクトではないため、setを使用する必要はありません。また、変数として範囲がありません。また、値を出力範囲に設定する前に、値をバリアントにコピーして、順序が少しずれているようにする必要があります。次のコードが機能します。

Sub Copying()
    Dim calval as Variant

    'Read it in from the worksheet
    With Worksheets("Sheet1")
        calval=.Range("B2:D2").value

        'Set it back to the dsired range using the bounds of the variant instead of hardcoding.
       .Range(.Cells(Rows.Count,"B").End(xlUp).Offset(2,3), .Cells(Rows.Count,"B").End(xlUp).Offset(1 + UBound(calval, 1), 2 + UBound(calval, 2))).Value = calval
    End With
End Sub
于 2013-01-20T20:05:46.893 に答える
2

あなたが答えを受け入れたことを理解しました。あなたが必要とすることを達成するための別の方法があります:WorkSheetFunction.Transpose方法を使用する。

Dim calval as Variant
'--- Range("B2:D2").Value

calval = WorkSheetFunction.Transpose(Sheets(1).Range("B2:D2").Value)

offset必要にresize応じて、自由に使用できます。たとえば、範囲を最大に拡大しますB12

calval = WorkSheetFunction.Transpose(Sheets(1).Range("B2:D2").Resize(10).Value)
于 2013-01-21T04:06:32.463 に答える