我想在 Excel 查找和替换对话框中使用通配符,以模式匹配的方式替换单元格。示例列如下:
_4
_44
_13
...
我想用以下值替换这些值:
(4)
(44)
(13)
...
因此,我尝试使用_*
which 成功找到模式,但我找不到任何地方是否显示 Excel 功能匹配占位符。例如,使用正则表达式时,我会使用括号和\1
作为匹配占位符。Excel 有这个功能吗?
答案1
Excel 的模式匹配功能极其有限:文字字符、* 匹配任意数量的未指定字符,以及 ? 匹配单个未指定字符。工作表函数或 VBA 中都没有原生的匹配占位符功能。
但是,正如 Excellll 所指出的,您可以在 VBA 中使用正则表达式,并且可以开发基于正则表达式的用户定义函数。
要在代码中访问正则表达式,请通过Visual Basic 代码编辑器主菜单中的Tools
->选择添加对“Microsoft VBScript Regular Expression 5.5”库的引用。References
我没有找到该库的任何全面文档,但你可以通过 Google 搜索找到很多零碎的信息和示例代码。
答案2
虽然这是一个很晚的答案,但我已经成功使用了一个名为RegEx 查找/替换做你想做的事。但我不知道 Excel 中是否有内置的此功能。
该插件会在功能区上创建一个按钮,该按钮会启动一个与 Excel 查找/替换非常相似的对话框。它的大部分功能也相同 - 您可以在工作表或工作簿中按列或行进行搜索,匹配大小写等。(但没有格式匹配。)
但请注意,该插件使用 VBScript 中实现的正则表达式,因此其工作方式与标准 Excel 查找/替换不同。例如,您的搜索字符串_*
将不起作用。它匹配任何带有零个或多个下划线的单元格,即任意内容。对于您的示例,我成功找到_(\d+)
并替换为'($1)
。(撇号只是为了防止 Excel 将其解释(4)
为负值。)
我与该网站或开发者没有任何关系 - 只是通过网络搜索找到的。另外,我使用 Excel 2007,无法确定它在更高版本中是否仍然有效。我在 Windows 7 和 Windows 10 中都成功使用过它。
这RegEx 查找/替换插件可以在以下位置找到:http://www.codedawn.com/excel-add-ins.php
答案3
将文件扩展名从 .xlsx 重命名为 .zip
解压整个文件
在子文件夹 \xl\worksheets 中找到工作表
在 emacs(或任何其他具有足够功能的 txt 编辑器)中打开文件
更改内容
重新压缩,将 .zip 重命名为 .xlsx
注意:Excel 保留计算依赖项的内部列表,因此如果您的更改涉及对其他单元格的某种引用,则不会重新计算。我通过两步方法解决了这个问题,第二步使用 excel 的替换功能,它将触发正确的内部更新。
听起来很复杂,但实际上只需 5 分钟!
答案4
另一个解决方案是将工作表复制到 Word 中的表格,执行查找和替换,然后将其复制回 Excel。