gpt4 book ai didi

regex - 可以在范围内运行 Regex-Replace 而不是循环遍历 Excel 中的单元格吗?

转载 作者:行者123 更新时间:2023-12-04 21:56:24 28 4
gpt4 key购买 nike

我需要在一系列单元格(各不相同,但最多 4 或 5 位单元格计数)上进行许多正则表达式替换(目前约 100 个,但列表会增长)。
目前,我的工作草案是为每个模式重复循环遍历所有单元格,但显然这是很多循环。

理想情况下,我会称之为(伪代码):

Sheet.Range("A1:G1000").RegexReplace(pattern, replacement)

然而,最接近的是 Range.Replace 仅提及“您希望 Microsoft Excel 搜索的字符串”。

list of Regex.Replace overloads没有提及与单元格或范围相关的任何内容。

所以,由于 Range.RegexReplace好像没了 - 有没有比循环遍历每个模式、行和列更有效的方法来替换许多单元格中的许多模式?

最佳答案

不要迭代单元格。无论您是在编写 VBA、C# 还是 VB.NET,如果您使用的是 Range嵌套循环中的对象,您正在做的事情是您可以用 Excel 对象模型做的最慢的事情。

改为使用数组 - 你 需要在您的工具箱中有这样的功能:

Public Function ToArray(ByVal target As Range) As Variant
Select Case True
Case target.Count = 1
'singe cell
ToArray = Array(target.Value)
Case target.Rows.Count = 1
'horizontal 1D range
ToArray = Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Transpose(target.Value))
Case target.columns.Count = 1
'vertical 1D range
ToArray = Application.WorksheetFunction.Transpose(target.Value)
Case Else
'2D array: let Excel to the conversion itself
ToArray = target.Value
End Select
End Function

现在您迭代一个内存中的值数组(使用 For 循环),并为每个值迭代多个 Regex.Replace调用 - 缓存和重用 Regex尽可能多的对象,因此您不会为成千上万个值一遍又一遍地重新创建相同的对象。

遍历整个数组后,将其转储到工作表中(根据需要调整大小和转置),然后瞧——您已经在一次操作中立即重写了数千个单元格。

关于regex - 可以在范围内运行 Regex-Replace 而不是循环遍历 Excel 中的单元格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852107/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com