【问题标题】:How to make sure all excel cells formatted as text in a column actually are如何确保所有格式化为列中文本的excel单元格实际上是
【发布时间】:2012-01-25 17:42:32
【问题描述】:

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

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

如何在 VBA 中做到这一点?我不想访问每个单元格,单击内容的末尾并按回车键。特殊的剪切和粘贴不能可靠地修复这些问题。

excel 看什么,通过这些文本格式警告指示正确解决格式问题,但在查看单元格格式属性时似乎没有正确处理?

Excel 2003 但在以后的版本中也有同样的问题。

【问题讨论】:

  • 您确定如果指标丢失,它不会粘贴吗?指示器只是一个可以忽略的消息,指示器消失了。
  • 指标实际上正确地指出了我想要的格式。问题是那些没有指示符的似乎实际上不是格式化的文本,尽管单元格格式说它们是
  • 在单元格中写入数字会使 Excel 将单元格内容视为数字,单元格格式很少影响内容“类型”。

标签: excel string-formatting vba


【解决方案1】:

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

除非有人进一步了解为什么不应该这样做,否则它可以解决我的问题。

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

【讨论】:

  • 这对我有用!虽然 Value 需要设置为 TRUE 才能工作。
【解决方案2】:

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

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

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

【讨论】:

  • 如果我在每一个前面加上“'”,导入表时可能会发生什么。我不想将“'”导入固定长度的字段并冒截断内容的风险
  • 除非你导入公式,否则你不会。如果您导入值,则不会包含 '.
  • 其实excel文件是一个用于查询的链接表。我将不得不测试如何处理“'”前面的待处理谢谢
【解决方案3】:

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

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

完成。列中的所有数字现在都应存储为文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-06-04
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多