我有一张像这样的表格 -
A | B | C
----------------------
2 | Okay | 0
3 | Not okay | 0
单元格C3
有绿色错误指针,并显示“此单元格中的数字被格式化为文本或前面有撇号”,当然它是左对齐的。
C2
当我显示单元格和的格式时C3
,它们都显示为“常规”。
当我使用 VBA 检查“NumberFormat”时,两者都显示为“General”。
顺便说一下,我正在使用 Office 2010。
我想通过使用 VBA 代码将格式从文本更改为常规来整理它(这发生在多个工作表中的数十个单元格中),但如果它认为相关单元格已被格式化为常规,我该怎么做?
答案1
当 Excel 认为数字存储为文本时(即使它说不是,即使您将格式更改为数字),就会发生这种情况,因为它在另一端编码不正确。
对于以文本形式存储的数字,一个非常简单的解决方法是添加一个额外的列,其中包含将数字转换为数字的公式。
=$C2*1
只需将其向下拖动,然后引用即可。如果您使用的是实时连接表,则将此列放在表的末尾将意味着公式范围将随数据范围扩展。
当然,使用 VBA,您可以运行一个循环,遍历数据并用该公式的结果替换列中的每个值。
答案2
这是一个可以实现此目的的 VBA 代码片段。
Sub FixTextFormattedNumbers()
Dim s As Worksheet, r As Range
'Set target sheet and range
Set s = Sheets("Sheet1")
Set r = s.Range("A1:A10")
For Each c In r
On Error Resume Next
c.Value = CDbl(c.Value)
Next c
End Sub
错误处理只是为了防止在指定范围内有实际文本。
答案3
复制粘贴或导入数据时经常会发生这种情况。如果是整列,那么修复此问题的最佳方法是重新导入该列,并更好地控制 Excel 对某项数据类型的假设。
实现此目的的方法是:
突出显示此问题的列
选择
Data
->Text To Columns
单击
Finish
(默认适用于这种情况 - 它们是分隔符->制表符->常规(格式))。如果您必须执行相反的操作(重新导入数字但强制将其视为文本),则可以将第三个选项更改为文本