2015-11-02 16 views
1

我有一個奇怪的行爲在我的VBA代碼中使用Format。我有一個應該轉換爲文本並寫入單元格的雙數字。當我使用三個小數要顯示的數1.0076237755被錯誤地轉換:錯誤使用「格式」雙三位小數

thisSheet.Cells(...) = Format(cellValue, "#,##0.000") 

被示出具有僅使用兩個1008,000(德國號位置與十進制分隔符「」)

小數它在某種程度上工作:

thisSheet.Cells(...) = Format(cellValue, "#,##0.00") 

是顯示1,01(德國數的位置,小數點分隔符 「」)

我不知道我在這裏錯過了什麼。我從來沒有見過這個,我使用Format很多。 有什麼建議嗎?

+0

你有沒有嘗試類似的格式(CDbl(cellValue),「#,## 0.000」)'? – R3uK

+0

你想輸出爲1,008或1.008嗎? –

+1

@ R3uK,讓我檢查... – JFS

回答

1

我已經嘗試了很多可能性Format但它似乎不能正常工作。

如果添加thisSheet.Cells(...).NumberFormat = "#,##0.000",它會顯示你想要什麼,但你仍然有存儲整個價值(以.Value2

所以我決定嘗試用Round功能,而且它正常工作:

thisSheet.Cells(...) = Round(CDbl(Replace(Cel, ".", ",")), 3) 
thisSheet.Cells(...) = Format(Round(CDbl(Replace(Cel, ".", ",")), 3), "#,##0.000") 
+0

我會嘗試格式化單元格而不是字符串。我不想強制分隔符行爲。使用不同的區域設置時可能會出現問題。 – JFS

+1

我想我找到了原因。一旦格式化爲字符串的數字寫入單元格,分隔符行爲就會變得混亂。發生這種情況是因爲該字符串被識別爲一個數字並被轉換爲分隔符行爲。 Interessting是使用像Format(cellValue,「#,## 0.000」)&「+」&Format(cellValue,「#,## 0.000」)這樣的組合字符串時它以某種方式工作。 ... – JFS

+1

...但只要我使用'「+」&格式(cellValue,「#,## 0。000「)它不會顯示數字字符串,因爲單元格會將字符串讀爲數字,最好的工作就是使用'」'「'如:'」'+「&Format(cellValue,」# ,## 0.000「)'。它會將數字寫入字符串中。 – JFS

1

根據this page,聽起來像在VBA中,小數點分隔符總是一個句點。你可以使用下面的代碼來解決這個問題。

thisSheet.Cells(...) = Replace(Format(cellValue, "#,##0.000"), ".", ",") 

由於小數點分隔符現在是一個字符串,該小區的任何行動都會把它當作好像它是一個千位分隔符,而不是一個小數。但是這應該給你你想要的。