如何识别 Excel 中的水平制表符并替换它

如何识别 Excel 中的水平制表符并替换它

我的 excel 文件中有数千条数据,它们都是从各个网站抓取的数据,最初存储在 CSV 文件中,然后迁移到 Excel 中。这些数据供我的网络服务器使用。

现在我的问题是horizontal tabs隐藏在众多之中spaces,它们给我的网络服务器带来了严重的问题。


我在这里举一个例子来澄清一下:

Excel 中的数据:“这是一个牢房”

编码后的数据可用作 URL 参数: "这是一个单元格"

你可以清楚地看到,中间的一个空格被编码为%09,这代表水平制表符。这导致我的服务器出现严重问题,我需要识别并替换它。

那么,我该如何找到水平制表符在 Excel 中?

答案1

Burgi 的答案可以解决问题,但是您不必使用充满公式的工作表复制整个数据集,而是可以通过几行脚本实现相同的效果。

Sub ReplaceTabs()
   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c
End Sub

有几种方法可以遍历所有相关单元格(例如,您可以只使用等来定位特定列ActiveSheet.Range("A:A"),或者选择有问题的单元格并使用Selection.Cells),但如果单元格是连续的并且选项卡可能位于任何单元格中,则此方法会起作用。

它不是超级快(在我的计算机上 200,000 个单元大约需要 10 秒)但应该足够快。

如果这是一项常见任务,那么您可以将其构建到导入脚本中。

答案2

该代码应该适合您:

=SUBSTITUTE(A1,CHAR(9),CHAR(32))

上述公式用替换CHAR(9)CHAR(32)定字符串中的所有实例。

  • CHAR(9)- 制表符
  • CHAR(32)- 空格字符

看到这个维基百科文章用于 Windows 使用的查找表。

答案3

为了加快 Lunatik 的回答,在宏工作时关闭/打开更新。

Dim tmp As Boolean
tmp = Application.ScreenUpdating
' this stores current value
Application.ScreenUpdating = False

   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c

Application.ScreenUpdating = tmp

相关内容