使用vba将范围值复制到变体中

时间:2013-01-20 19:05:50

标签: excel vba excel-vba

我在宏中有以下代码但是当我运行它时,它只复制单元格B2中的值而不是B2:D2中的整个值范围,正如我在下面代码的第5行中指定的那样。

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

有人可以告诉我如何让calval从B2:D2中分配全部范围的值,而不仅仅是B2中的值。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我知道你接受了答案,这是另一种实现你需要的方法:使用WorkSheetFunction.Transpose方法。

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

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

您可以根据自己的需要自由使用offsetresize。 例如将您的范围扩展到B12

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