使用带有三位小数的“格式”双精度错误

时间:2015-11-02 11:58:23

标签: excel vba excel-vba format

我在VBA代码中使用Format有一种奇怪的行为。我有一个双号,应该转换为文本并写入单元格。一旦我使用三位小数显示数字1.0076237755被错误地转换:

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

显示 1008,000 (德语数字位置带小数点分隔符“,”)

只使用两位小数就可以了:

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

显示 1,01 (德语数字位置带小数点分隔符“,”)

我不知道我在这里缺少什么。我以前从未见过,我经常使用Format。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

根据this page,听起来像在VBA中,小数点分隔符始终是句点。您可以使用下面的代码解决这个问题。

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

由于小数分隔符现在是一个字符串,因此对该单元格的任何操作都会将其视为千位分隔符,而不是小数。但这应该给你你想要的东西。

答案 1 :(得分: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")