我正試圖在Excel中使用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
我想代碼也遍歷每個可能的值。我只是沒有在那裏得到循環語句。 此外,查找值表將存儲在與使用BULKREPLACE
函數的工作表不同的工作表中,因此重要的是讓代碼在定義的工作表上運行查找。
設計澄清
- 的功能應該是動態的:能夠被多次使用,每次用不同的搜索和替換的定義。
- 搜索和替換定義存儲在一個單獨的工作表中,總是位於彼此相鄰的兩列中,並且是用戶可更新的。定義工作表還將包含其他數據。
- 該功能僅用於全字替換。
是字典表動態 - 它是指不同的列表,或在不隨時間變化表中的數據?否則,使用字典將數據加載到內存中並從中獲取數據會更好。 –
你有多個單詞替換 - '我的'應該被'酒吧MY'替換?如果不是,請考慮使用拆分功能將字符串拆分爲單詞。 –
作爲函數的第二個參數傳遞字符串表名或確切範圍,例如替換表第一行'Lists!A1:A20',但不是整行'Lists!A:A'?表單上只有一個替換表,還是包含其他數據?你打算只取代整個單詞嗎?'替換爲'I REPLACE1my REPLACE2.')? – omegastripes