我尝试使用Visual Basic在Excel中创建一个函数,它将迭代一个值表来搜索字符串并替换。例如,给出表格,
[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
)中,因此获取代码以在其上运行查找非常重要。定义表。
设计澄清
答案 0 :(得分:0)
答案 1 :(得分:0)
在迭代可能的更改时,您将需要一个过渡字符串变量来保存更改的值。提供区分大小写或不区分大小写的替换(具有默认值)的选项也可能是值得的。
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)