跳到主要内容

使用 VBA 将数字格式的显示结果转为数值

如果在单元格区域中设置了自定义数字格式,您可能希望将单元格自定义数字格式的显示结果作为单元格的值。

示例

在下图所示的数据列表中,单元格区域 B2:B10 设置的数字格式为 G/通用格式"元"!/"斤",例如,如果单元格 B2 的值为 4,此时显示的结果即为 4元/斤,这只是改变了显示结果,单元格的值还是 4,就跟每天穿不同的衣服一样,人没变,只是衣服变了。

将数字格式的显示结果转为数值
将数字格式的显示结果转为数值

如果您希望将单元格的值转为显示数字格式的显示结果,即将 4 转化为 4元/斤,可以使用下面 VBA 代码:

'---------------- 模块 ----------------
Sub NumberFormat2Value()
    Dim rng As Range
    For Each rng In Range("B2:B10")
        With rng
            .Value = .Text
        End With
    Next
End Sub

其中 Range.Value 属性返回单元格的数值或公式结果。

Range.Text 属性返回的是显示在单元格上的文本,包括格式化信息,即我们在单元格中所看到的文本。

Range.Text 属性和 Range.Value 属性的差异

以下是一个简单的例子来说明 Range.Text 属性和 Range.Value 属性的差异:

Sub RangeExample()
    Dim rng As Range
    Set rng = Range("A1")
    
    '将数值赋给单元格
    rng.Value = "12345"
    
    '修改单元格的格式,不影响Range.Value的值
    rng.NumberFormat = "#,##0.00_ "
    
    '获取单元格的文本值
    Dim textValue As String
    textValue = rng.Text
    
    '获取单元格的数值或公式结果
    Dim numericValue As Variant
    numericValue = rng.Value
    
    '在消息框中显示文本值和数值
    MsgBox "文本值: " & textValue & vbNewLine & _
        "数值: " & numericValue
End Sub

在上述代码中,我们将数值 12345 赋给了单元格 A1

接着修改了单元格 A1 的格式,并不影响 Range.Value 的值。

然后,我们使用 Range.Text 属性将该单元格的文本值存储在 textValue 变量中,使用 Range.Value 属性将该单元格的数值或公式结果存储在 numericValue 变量中。

最后,我们通过消息框将 textValuenumericValue 的值显示出来,以便您可以观察它们的差异。

运行结果如下:

文本值: 12,345.00
数值: 12345

评论

您的电子邮件地址不会显示出来。*号为必填项。