![如何更改数据库导入的表中单元格的数字格式?](https://linux22.com/image/1400177/%E5%A6%82%E4%BD%95%E6%9B%B4%E6%94%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%BC%E5%85%A5%E7%9A%84%E8%A1%A8%E4%B8%AD%E5%8D%95%E5%85%83%E6%A0%BC%E7%9A%84%E6%95%B0%E5%AD%97%E6%A0%BC%E5%BC%8F%EF%BC%9F.png)
我有一张像这样的表格 -
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
(默认适用于这种情况 - 它们是分隔符->制表符->常规(格式))。如果您必须执行相反的操作(重新导入数字但强制将其视为文本),则可以将第三个选项更改为文本