在Excel中创build批量replacefunction

我试图在Excel中使用Visual Basic创build一个函数,它将遍历一个值的表来search一个string,并进行replace。 例如,在表中,

[A] [B] [1] foo REPLACE1 [2] bar REPLACE2 

我想要公式=BULKREPLACE("I foo my bar.", Lists!A:A)呈现I REPLACE1 my REPLACE2.

我开始编写下面的代码片段,但意识到我不知道如何让这个Visual Basic代码工作,所以决定发布在这里寻求帮助。

 Function BULKREPLACE(Vcell As String, Vsearch As Range) As String Dim Vwksht As String Dim Vlastrow As Integer Dim Vx1 As String Dim Vrow As Integer Vwksht = Vsearch.Worksheet.Name Vlastrow = Vsearch.Cells.Find("*", , , , xlByRows, xlPrevious).Row Vx1 = Vcell For Vrow = 2 To Vlastrow If Not IsEmpty(Worksheets(Vwksht).Range(Vsearch.Column & Vrow)) Then Vx1 = replace(Vx1, Worksheets(Vwksht).Range(Vsearch.Column & Vrow).Value, Worksheets(Vwksht).Range(Chr(Asc(Vsearch.Column) + 1) & Vrow).Value) End If Next BULKREPLACE = Vx1 End Function 

我希望代码也遍历每个可能的值。 我只是没有在那里得到循环语句。 此外,查找值表将存储在不同的工作表( Lists )中,而不是使用BULKREPLACE函数的工作表,因此获取代码在定义的表单上运行查找非常重要。


devise说明

  1. 该function应该是dynamic的:可以多次使用,每次使用不同的search和replace定义。
  2. search和replace定义存储在一个单独的工作表中,总是在两列中彼此相邻,并且是用户可更新的。 定义工作表还将包含其他数据。
  3. 该function仅用于全字replace。

尝试这个:

 Option Explicit Public Function BULKREPLACE(ByVal Vcell As String, ByRef Vsearch As Range) As String Dim v As Variant, i As Long, lr As Long If Len(Vcell) > 0 And Not Vsearch Is Nothing Then If Vsearch.Columns.Count = 1 Then lr = Vsearch.Cells(Vsearch.Row).End(xlDown).Row v = Vsearch.Resize(lr, Vsearch.Columns.Count + 1) For i = 1 To lr If Len(v(i, 1)) > 0 Then Vcell = Replace(Vcell, v(i, 1), v(i, 2)) Next End If End If BULKREPLACE = Vcell End Function 

BULKREPLACE

它将使用A:B中的第一个连续范围进行查找值映射

您将需要一个过渡stringvariables来保存更改的值,当您迭代可能的更改。 提供区分大小写或不区分大小写的replace(具有默认值)的选项也可能是值得的。

 Function BULKREPLACE(sTMP As String, rTERMS As Range, Optional bCASE As Boolean = False) As String Dim rWhat As Range For Each rWhat In rTERMS.Columns(1).Cells sTMP = Replace(sTMP, rWhat.Value2, rWhat.Offset(0, 1).Value2, 1, -1, _ IIf(bCASE, vbBinaryCompare, vbTextCompare)) Next rWhat BULKREPLACE = sTMP End Function 

像任何本地工作表函数一样使用。 在下面的示例图像中,

 =BULKREPLACE(D4, $A$2:$B$3) 

批量文本替换UDF功能