Excel VBA设置NumberFormat为@未真正将单元格内容转为文本求助
问题原因
你只修改了单元格的显示格式,没有变更单元格内容的实际存储类型,已存在的数值型数据仍然会被Excel识别为数值,因此会触发状态栏求和统计,必须触发单元格内容的重写入才能让文本格式生效。
解决方案
方案1:使用TextToColumns(推荐,大数据量效率高)
不需要循环遍历,单句代码即可完成批量转换,不会丢失长数字等内容:
Dim rng As Range Set rng = wb.Sheets(1).Range("A1").CurrentRegion rng.NumberFormat = "@" ' 调用文本分列,不做任何拆分直接重写入内容,强制转换为文本存储 rng.TextToColumns Destination:=rng, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2)
其中FieldInfo:=Array(1, 2)就是指定第一列转换为文本格式,多列的话对应补充数组参数即可。
方案2:循环逐个单元格重赋值(适合小数据量)
逻辑简单直观,小范围使用足够:
Dim rng As Range, cell As Range Set rng = wb.Sheets(1).Range("A1").CurrentRegion rng.NumberFormat = "@" For Each cell In rng If Not IsEmpty(cell) Then cell.Value = cell.Text End If Next cell
注意事项
- 如果单元格内有超过15位的长数字,转换前不要修改单元格内容,直接执行上述代码即可避免数字被截断
- 转换完成后再选中数值单元格,状态栏不会再出现求和结果,符合纯文本格式的特征
内容的提问来源于stack exchange,提问作者Jayl
相关产品推荐
相关产品推荐

