如何确保列中实际格式化为文本的所有Excel单元格

时间:2012-01-25 17:42:32

标签: excel excel-vba string-formatting vba

我有一个由多个用户提交的内容列,通常是从多个来源粘贴到工作表中。此列的数字应始终格式化为文本。 事实上,无论如何做到这一点,总会有一些项目从未在左下角显示警告,这些项目被格式化为文本(我们希望在所有情况下都能看到)

检查单个单元格时,它确实显示为格式化文本,但实际上在导入到数据表中时,如果指示符丢失,则数据类型将作为数字导入。 单击数字并按Enter键将指示符更改为文本。

我怎样才能在VBA中这样做?我不想访问每个单元格,单击内容的结尾并按Enter键。切割和粘贴特殊的无组合可靠地修复这些。

excel看到了什么,它使用这些文本格式警告指示符来解决格式问题,但是当您查看单元格格式属性时似乎没有做到这一点?

enter image description here

Excel 2003,但在更高版本中也遇到了同样的问题。

3 个答案:

答案 0 :(得分:2)

对我有用的是检查错误指示符,它似乎比单元格格式本身更可靠。这会查找缺少指示符的任何内容并强制它成为文本。

除非有人知道为什么不应该这样做,否则它会解决我的问题。

Sub check4textformat()
 For Each cell In Range("E2:E15000")
 If cell.Errors.Item(xlNumberAsText).Value = False Then cell.Formula = cell.Text
 Next
End Sub

答案 1 :(得分:1)

由于你的主要目标不是访问每个单元格,我建议比VBA更简单(实际上,它可能是最简单的方法)。

  1. 选择所需的列。
  2. 转到数据>列到文本。
  3. 选择“分隔”(默认情况下应该已选中)并按“下一步”。
  4. 取消选中所有分隔符并按“下一步”(您也可以将默认状态“Tab”保留为唯一分隔符。)
  5. 在“列数据格式”下,选择“文本”,然后单击“完成”。
  6. 完成。列中的所有数字现在都应存储为文本。

答案 2 :(得分:0)

你真的只需要在每个数字之前添加文本指示符“'”。假设您的值在第一列中,在前120行中,您可以这样做:

For i = 1 To 120
    Me.Cells(i, 1).Value = "'" & Me.Cells(i, 1).Value
Next i

如果单元格已有文本值,则忽略前置。复制时(以及在VBA中获取值时),“'”完全被忽略,因为它只表示单元格内容的“类型”。