一个正则expression式replace可以运行在一个范围,而不是循环在Excel中的单元格?

我需要做一些正则expression式replace(目前〜100,但列表将增长)在一定范围的单元格(可变,但最多4或5位数的单元格数)。
目前,我的工作草案是循环遍历每个模式的所有单元格,但显然这是很多循环。

理想情况下,我会打电话(伪代码):

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

然而,最接近的是Range.Replace ,它只提到“你想要Microsoft Excelsearch的string”

Regex.Replace超载列表没有提及与单元格或范围有关的任何内容。

因此,由于Range.RegexReplace似乎已经不存在了, 是否有更有效的方法来replace许多单元格中的许多模式,而不是遍历每个模式,行和列?

不要迭代单元格。 无论你是在编写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调用 – 尽可能地caching和重用Regex对象,所以你不会重新创build相同的对象一遍又一遍地重复着成千上万的值。

一旦遍历整个数组,将其转储到工作表中(根据需要resize和转置),然后通过单个操作即时重写数以千计的单元格。