2013-07-24 27 views
0

我试图将Variant/String的二维数组粘贴到范围中。那没问题。 此Variant/String列可以包含字符串或双精度值。粘贴具有3位小数位的Double值的双维数组失去分隔符并变为数千

除了在double值包含3个十进制值或更多值的单元格中,所有工作都正常。 逗号(,)是小数点分隔符,圆点(。)是Excel的千位分隔符。

例如:

当阵列在未来2,3,它在Excel单元粘贴2,3-

当阵列在未来2,34,它在Excel单元格粘贴2,34

当阵列在未来2321,它以Excel cell.value粘贴2321和在cell.text示出2.321

当阵列在未来2,3215,它以Excel cell.value粘贴23215和显示23.215 in cell.text

代码:

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 
+1

您是否检查过您的范围的数字格式? – Ripster

+0

在'...代码中填充DataArray',确保'Double'分配给'DataArray(?,?)',而不是'String',这正在发生。 –

+1

更好,使用'Dim DataArray(2,2)As Double' –

回答

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”。

希望这有助于。

+0

嗨!那是我的下一步。迭代。效果很好,但问题是一样的,当你得到3个十进制或更多的值时,它会丢失小数点分隔符并转向数千... :(。谢谢你的帮助。 – Biggum

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 

太谢谢你了! :)

相关问题