Excel VBA函数如何检测单元格的numberformat是否为数字

Excel VBA function how to detect if numberformat of cell is number

提问人:Stefanie 提问时间:11/8/2023 更新时间:11/8/2023 访问量:43

问:

我想检测单元格是否具有 numberformat 编号。如果单元格未设置为 numberformat number,则应记录错误消息。 例如: 单元格 A1 的条目为 1000。检查应检测单元格格式是否设置为数字。不允许使用所有其他数字格式(如通用、百分比、货币等)。

使用函数 numberformat 进行检查适用于常规、百分比(格式代码“0.00%”)、科学等,但不适用于数字(格式代码“0”或“0.00”等)。

我尝试了这些功能(在缩短版本中):

  • Cell.Numberformat = “0”
  • Cell.Numberformat = “0,00”
  • Cell.Numberformat = “0.00”
  • Cell.Numberformat = “数字”
  • Cell.Numberformat = “通用编号”
  • Cell.Numberformat = “#.##0,00”
  • Cell.Numberformat = “#,##0.00”

我的 Excel 语言中的正确分隔符是“,”,但使用英文写作时,该函数也不起作用。

尽管单元格中的数字值设置为正确的数字格式,但检查将返回 False。 此外,该检查通过上述函数与所有其他数字格式检查(例如 Cell.Numberformat = “General” 或 Cell.Numberformat = “0.00%”)一起使用,如百分比、科学、一般等

有人知道,我应该使用哪个检查功能?

Excel VBA 数字格式

评论

0赞 Notus_Panda 11/8/2023
为什么不使用(或您的正确范围)来确定您想要哪一个,然后检查?Dim tStr As String: tStr = Range("A1").NumberFormatIf Cell.Numberformat <> tStr Then ....
0赞 Stefanie 11/8/2023
感谢您@Notus_Panda的评论。解决方案是函数表达式....NumberFormatLocal 喜欢....CLR 提到

答:

1赞 CLR 11/8/2023 #1

我过去做过这样的事情,您可能需要根据您的特定要求对其进行调整。

Function is_formatted_as_number(rng As Range) As Boolean
    is_formatted_as_number = Not (rng.NumberFormatLocal Like "*[A-Za-z%]*")
End Function

它只是检查为文本或 % 符号的格式标签返回的文本。如果您愿意,您可以添加其他符号等,例如 £ $。

测试..

If is_formatted_as_number(ActiveSheet.Cells(1,1)) Then
    ...
Else
    ....
End If

评论

0赞 Stefanie 11/8/2023
非常感谢,函数表达式 NumberFormatLocal Like .....解决了我的问题!:)