粘贴具有3个小数位的Double值的二维数组会丢失分隔符并变为数千

时间:2013-07-24 14:36:59

标签: excel vba excel-vba

我正在尝试将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

2 个答案:

答案 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

非常感谢你! :)