2013-07-24 40 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 

太謝謝你了! :)

相關問題