我正在尝试将Variant/String的二维数组粘贴到一个范围中。这没问题。此Variant/String列可以包含字符串或双值。
除双值包含3个或更多十进制值的单元格外,所有单元格都可以正常工作。逗号(,)是我的Excel的十进制分隔符,点(.)是千位分隔符。
例如:
当数组中出现2,3时,它会在Excel单元格中粘贴2,3
当数组中出现2,34时,它将2,34粘贴到Excel单元格中
当数组中出现2321时,它将2321粘贴到Excel单元格.value中,并在单元格.text 中显示2.321
当数组中出现23215时,它将23215粘贴到Excel单元格.value中,并在单元格.text 中显示23.215
代码:
Dim DataArray(2, 2) As Variant
...
... code that fills DataArray
...
Range("A1").Resize(UBound(DataArray, 1) + 1,UBound(DataArray, 2) + 1).Offset(1, 0) = DataArray
我也遇到了类似的问题。这只是Excel误解变量结束类型的典型情况。不幸的是,用于填充范围的简洁矢量公式必须取消。相反,您可以使用类似的东西(i和j指定变量范围的左上角单元格):
Dim cell As Range
Dim x As String
Dim i as integer, j as integer
'The first cell is "A1"
i=1
j=1
For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray)))
x = DataArray(cell.Row - i, cell.Column - j)
cell.Value = x
'Next line is optional
If IsNumeric(x) Then cell.NumberFormat = "General"
Next cell
经过测试,效果良好。如果你省略了可选行,Excel会猜测格式,但它基本上是正确的。如果你知道你想要的数字格式,那么一定要在可选行中指定。如果要指定小数位数,可以尝试其他格式,如"###,###0.00"。
希望这能有所帮助。
适用于下一个修改:
Dim cell As Range
Dim x As String
Dim D as Double
Dim i as integer, j as integer
'The first cell is "A1"
i=1
j=1
For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray)))
x = DataArray(cell.Row - i, cell.Column - j)
If IsNumeric(x) Then
D = CDbl(x)
cell.Value = D
Else
cell.value = x
end if
Next cell
非常感谢!!!:)