我可以使用VBA来检测数字是否作为文本存储在单元格中?

我正在考虑按照以下方式:

if Range("A1").NumberFormat = "@" AND test to show that the content of A1 can be a number Then Debug.Print("A1 is a number stored as text") end if 

我可以使用VBA来检测数字是否作为文本存储在单元格中?

让我也玩:)

要做一个确切的testing来检查一个数字是否作为文本存储在一个单元格中,使用这个

 Sub Sample() If (Range("A1").NumberFormat = "@" And IsNumeric(Range("A1"))) Or _ (Range("A1").PrefixCharacter = "'" And IsNumeric(Range("A1"))) Then Debug.Print ("A1 is a number stored as text") End If End Sub 

这将照顾这样的情况

在这里输入图像描述

请注意,在第一个单元格中,数字格式为“ General ,并且数字以“文本'

编辑

为了进一步certificate这一点。 我们将把上面的子转换成UDF

 Function IsNumberStoredAsText(Rng As Range) IsNumberStoredAsText = "Number is not stored as text" If (Rng.NumberFormat = "@" And IsNumeric(Rng)) Or _ (Rng.PrefixCharacter = "'" And IsNumeric(Rng)) Then IsNumberStoredAsText = "Number stored as text" End If End Function 

现在在工作表中使用它

在这里输入图像描述

UPD:

所有的解决scheme都很好,但是在下一种情况下不能工作:

也可以使用Number format (或任何其他格式),但数字存储为文本(您可以在我的testingwotkbook中看到它)的单元格。 试想一下,如果您使用Text格式在单元格中编号,然后将Text格式更改为Nubmer format (在单元格属性中或使用function区中的“格式”combobox),就可以想象这种情况。 你的价值仍然会保存为文本(尽pipe事实上,Excel表示它存储在Number Format ),直到你按F2ENTER (你可以检查我的testing工作簿)。 您可以简单地重现此行为:将单元格的格式更改为Text ,然后input值(即123),然后将单元格的Number Format更改为Number Format (完全按此顺序)。 现在你的值存储为文本,但有Number Format

所以,检查Range.NumberFormat是一个错误的方法。

这里是testing工作簿

有一个非常简单和优雅的方式来检测,如果一个数字存储为文本或数字:

 Function IsNumberStoredAsText(Rng As Range) If Not IsNumeric(Rng) Then IsNumberStoredAsText = "NOT number" Exit Function End If IsNumberStoredAsText = "Number NOT stored as text" If Rng.Value + "0" <> Rng.Value Then IsNumberStoredAsText = "Number stored as text" End If End Function 

怎么运行的:

让单元格A1包含以文本forms存储的数字“123”。 在这种情况下, Range("A1").Value + "0"将连接两个string并返回“1230”,但是如果A1包含数字123 存储为数字"0"将被转换为0Range("A1").Value + "0"将返回123

结果:

在这里输入图像说明

你所寻求的testing是

 ISNUMERIC(...) 

从Excel帮助:

返回一个布尔值,指示expression式是否可以被评估为一个数字。

实际上有一种更方便的方式来检测单元格是否包含以文本forms存储的数字:

  If Range("A1").Errors.Item(xlNumberAsText).Value = True Then MsgBox "Number Stored As Text" Else MsgBox "Number Not Stored As Text" End If 

一个。

对于迟到的答案(我是新来的),我感到抱歉,但我认为正确的答案仍然存在。 所以恐怕你也错了,simoco。

例如,每当我引用一个数据透视表中的一个数字,并将其存储为文本(数据源可能是另一个表或数据库)时,您的函数将不起作用。 我的解决scheme似乎适用于所有情况。 Excel已经有一个函数可以用来作为公式: =ISTEXT(reference)

由于OP要使用VBA,解决scheme是: Application.WorksheetFunction.IsText (reference) ,它返回TrueFalse