在我的工作簿中,有一张包含缩写/完整字符串对列表的表格(例如“GG”/“Gotta Go”)。工作表名称是“定义”,列是 C 和 D。将来可能会使用更多对来更新列表。
然后在同一个工作簿中有一个不同的工作表,其中包含 5 列(P 到 T)。这些列包含随机行中的缩写,有些行是空的或包含不同的数据。工作表名称为“目标”。是否有一种方法可以将 VBA 代码放在一起,该代码将通过对列表并用相应的完整字符串替换 cols P 到 T 中的缩写?一些目标列可能包含空单元格,因此如果代码可以检查并跳过空单元格,那将非常好。
编辑:添加由 Mumps 在 Ozgrid 上精心整理的代码。
Sub ReplaceAbbrev()
Application.ScreenUpdating = False
Dim LastRow1 As Long
Dim LastRow2 As Long
Dim foundDef As Range
Dim def As Range
Dim sAddr As String
LastRow1 = Sheets("Definitions").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastRow2 = Sheets("Target").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For Each def In Sheets("Definitions").Range("C2:C" & LastRow1)
Set foundDef = Sheets("Target").Range("P2:T" & LastRow2).Find(def, LookIn:=xlValues, lookat:=xlWhole)
If Not foundDef Is Nothing Then 'if found
sAddr = foundDef.Address
Do
Set foundDef = Sheets("Target").Range("P:T").FindNext(foundDef)
Sheets("Target").Range(foundDef.Address).Value = Replace(Sheets("Target").Range(foundDef.Address).Value, def, def.Offset(0, 1))
Loop While Not foundDef Is Nothing
sAddr = ""
End If
Next def
Set foundDef = Nothing
Application.ScreenUpdating = True
End Sub