在Excel VBA中将数字转换为字符串时,如何保留数字格式?

在Excel VBA中将数字转换为字符串时,如何保留数字格式?,vba,excel,Vba,Excel,考虑以下代码: Sub CombineNumbersToASTring() ' force Excel to show two decimals, even when there are trailing zeros Range("A1", "B1").NumberFormat = "0.00" ' give some values to the previously mentioned cells Cells(1, 1).Value = 0.1 Cells(1, 2).Value = 0.

考虑以下代码:

Sub CombineNumbersToASTring()

' force Excel to show two decimals, even when there are trailing zeros
Range("A1", "B1").NumberFormat = "0.00"

' give some values to the previously mentioned cells
Cells(1, 1).Value = 0.1
Cells(1, 2).Value = 0.2

' combine the previous two values into one cell
Cells(1, 3).Value = "(" & Cells(1, 1).Value & ", " & Cells(1, 2).Value & ")"

End Sub
结果是错误的

0.10 0.20(0.1,0.2)

虽然应该是

0.10 0.20(0.10,0.20)

那么,在Excel VBA中转换为字符串时,如何保留NumberFormat?CStr方法似乎不起作用


(编辑:我还要在这里补充一点,在我的大代码中,小数位的数量正在从一个单元格变为另一个单元格,因此在编写VBA代码时无法事先知道小数位。)

我认为您需要在值周围使用“0.00”格式,如:

Cells(1, 3).Value = "(" & Format(Cells(1, 1).Value, "0.00") & ", " & Format(Cells(1, 2).Value, "0.00") & ")"

我认为您需要在值周围使用“0.00”格式,如:

Cells(1, 3).Value = "(" & Format(Cells(1, 1).Value, "0.00") & ", " & Format(Cells(1, 2).Value, "0.00") & ")"

尝试将数字格式范围扩展到C1列(单元格(1,3)):
范围(“A1”、“C1”)。NumberFormat=“0.00”

尝试将数字格式范围扩展到C1列(单元格(1,3)):
范围(“A1”、“C1”)。NumberFormat=“0.00”

至少有两种方法可以实现这一点

  • 使用
    .Text
    属性。
    Cells(1,3).Value=“(”和Cells(1,1).Text&“,”和Cells(1,2.Text&“)”
  • 在单元格(1,3)中使用公式
    =连接(“(”,文本(A1,“0.00”),“,”,文本(B1,“0.00”),”)

  • 至少有两种方法可以做到这一点

  • 使用
    .Text
    属性。
    Cells(1,3).Value=“(”和Cells(1,1).Text&“,”和Cells(1,2.Text&“)”
  • 在单元格(1,3)中使用公式
    =连接(“(”,文本(A1,“0.00”),“,”,文本(B1,“0.00”),”)

  • 第一个解决方案适合我的需要,我确认它就像一个符咒。疯狂的解决方案是多么简单。这个解决方案不需要事先知道小数点。真的非常感谢。第一种解决方案适合我的需要,我确认它的效果很好。疯狂的解决方案是多么简单。这个解决方案不需要事先知道小数点。真的非常感谢。是的,你的解决方案适用于我最初写的问题。我忘了提到小数点在我的大代码中不是静态的;我现在把这一点补充到我的问题中。但是,无论如何,非常感谢您,并且+1为原始问题提供了一个有效的解决方案。(上面PatricK的解决方案即使在小数位数发生变化的情况下也有效。)是的,你的解决方案适用于我最初写的问题。我忘了提到小数点在我的大代码中不是静态的;我现在把这一点补充到我的问题中。但是,无论如何,非常感谢您,并且+1为原始问题提供了一个有效的解决方案。(上面PatricK的解决方案即使在小数位数发生变化的情况下也有效。)