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

我试图将Variant / String的二维数组粘贴到一个范围中。 那没问题。 这个Variant / String列可以包含string或double值。

所有工作都很好,除了那些double值包含3个十进制值或更多的单元格。 逗号(,)是小数点分隔符,点(。)是我的Excel的千位分隔符。

例如:

当在数组中来到2,3时,它将在Excel单元格中粘贴2,3

当在数组中来到2,34时,它将在Excel单元格中粘贴2,34

当在数组中来到2,321时,它在Excel单元格值中粘贴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 

我有一个类似的问题。 这只是Excel误解变体结束types的经典案例。 不幸的是,用于填充范围的整洁vector公式必须去除。 相反,你可以使用这样的东西(我和j指定您的variables范围左上angular的单元格):

 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 

经过testing,它的工作原理。 如果你省略了可选的行,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 

非常感谢!!! 🙂