粘贴具有3个小数位置的Double值的二维数组,丢失分隔符并转换为数千



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

非常感谢!!!:)

最新更新