我正在尝试将Variant / String的二维数组粘贴到一个范围内。那没问题。 此Variant / String列可以包含字符串或双精度值。
除了在double值包含3个十进制值或更多值的单元格中,所有工作正常。 逗号(,)是小数点分隔符,点(。)是我的Excel的千位分隔符。
e.g:
当数组中出现2,3时,它会在Excel单元格中粘贴2,3
当数组中出现2,34时,它会在Excel单元格中粘贴2,34
当数组中出现2,321时,它会在Excel cell.value中粘贴2321并在cell.text中显示2.321
当数组中出现2,3215时,它会在Excel cell.value中粘贴23215并在cell.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
答案 0 :(得分:2)
我有类似的问题。这只是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”。
希望这会有所帮助。
答案 1 :(得分:0)
适用于下一次修改:
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
非常感谢你! :)