在Excel

时间:2015-09-26 21:04:53

标签: excel vba excel-vba

我尝试使用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)中,因此获取代码以在其上运行查找非常重要。定义表。

设计澄清

  1. 该功能应该是动态的:能够多次使用,每次使用不同的搜索和替换定义。
  2. 搜索和替换定义存储在单独的工作表中,始终位于彼此相邻的两列中,并且是用户可更新的。定义工作表还将包含其他数据。
  3. 该功能仅适用于全字替换。

2 个答案:

答案 0 :(得分:0)

试试这个:

});

BULKREPLACE

它将使用A:B中的第一个连续范围作为查找值\ mapping

答案 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)

Bulk Text Replacement UDF function