Excel 按列表查找替换的宏仅替换列表中的第一个元素
My宏to FindReplace仅替换数组中的第一个元素 我想不出是怎么回事 谢谢Excel 按列表查找替换的宏仅替换列表中的第一个元素,excel,vba,Excel,Vba,My宏to FindReplace仅替换数组中的第一个元素 我想不出是怎么回事 谢谢 Sub sReplace() 'Column header for Search 'List of words to look for 'Word to Change elements is list to fReplace "location", Array("Saint Paul", "SAINT PAUL", "St Paul", "St. Paul, St. Paul"), "Minneapol
Sub sReplace()
'Column header for Search
'List of words to look for
'Word to Change elements is list to
fReplace "location", Array("Saint Paul", "SAINT PAUL", "St Paul", "St. Paul, St. Paul"), "Minneapolis-St. Paul"
End Sub
请尝试以下代码:
Sub sReplace()
'Column header for Search
'List of words to look for
'Word to Change elements is list to
fReplace "location", Array("Saint Paul", "SAINT PAUL", "St Paul", "St. Paul, St. Paul"), "Minneapolis-St. Paul"
End Sub
在上面的数组中,您可以删除任何“圣保罗”、“圣保罗”
,因为您使用的是MatchCase:=False
并更新了fReplace
sub:
Sub fReplace(colHeader As String, LookFor As Variant, ReplaceWith As String)
Dim ws As Worksheet
Dim aCell As Range
Dim lookForVal
Set ws = ActiveWorkbook.Sheets("Helper")
Set aCell = ws.Rows("1:1").Find(What:=colHeader, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False)
If Not aCell Is Nothing Then
For Each lookForVal In LookFor
aCell.EntireColumn.Replace What:=lookForVal, Replacement:=ReplaceWith, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next lookForVal
End If
End Sub
但是要小心,因为您在word中的替换方法中使用了LookAt:=xlPart
“Minneapolis-St.Paul”部分“St.Paul”
可以替换为“Minneapolis-St.Paul”
,您将得到“Minneapolis-Minneapolis-St.Paul”
(因为“St.Paul”
位于查找数组中)。备用(simoco提供了相同的注意事项)
Sub-fReplace(sColHeader作为字符串,varFind作为变量,sReplace作为字符串)
将ws设置为工作表
暗淡的rngFound As范围
作为变量的Dim sFind
第一个作为字符串
设置ws=ActiveWorkbook.Sheets(“助手”)
设置rngFound=ws.Rows(1).Find(sColHeader,ws.Cells(1,ws.Columns.Count),xlValues,xlWhole)
如果不是,那么rngFound什么都不是
sFirst=rngFound.Address
做
带范围(rngFound.Offset(1),ws.Cells(ws.Rows.Count,rngFound.Column).End(xlUp))
对于varFind中的每个sFind
.更换sFind、S更换、xlPart
下一个sFind
以
设置rngFound=ws.Rows(1).Find(“位置”,rngFound,xlValues,xlWhole)
在rngFound.Address sFirst时循环
如果结束
端接头
Thank all(感谢所有人)在我看到您如何修复它之后就有意义了!,感谢您出于某种原因,您的警告性评论在我第一次阅读时未被注册,感谢您指出我的疏忽。谢谢您,看到不同的方法和方法总是很有帮助的。
Sub fReplace(colHeader As String, LookFor As Variant, ReplaceWith As String)
Dim ws As Worksheet
Dim aCell As Range
Dim lookForVal
Set ws = ActiveWorkbook.Sheets("Helper")
Set aCell = ws.Rows("1:1").Find(What:=colHeader, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False)
If Not aCell Is Nothing Then
For Each lookForVal In LookFor
aCell.EntireColumn.Replace What:=lookForVal, Replacement:=ReplaceWith, _
LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next lookForVal
End If
End Sub
Sub fReplace(sColHeader As String, varFind As Variant, sReplace As String)
Dim ws As Worksheet
Dim rngFound As Range
Dim sFind As Variant
Dim sFirst As String
Set ws = ActiveWorkbook.Sheets("Helper")
Set rngFound = ws.Rows(1).Find(sColHeader, ws.Cells(1, ws.Columns.Count), xlValues, xlWhole)
If Not rngFound Is Nothing Then
sFirst = rngFound.Address
Do
With Range(rngFound.Offset(1), ws.Cells(ws.Rows.Count, rngFound.Column).End(xlUp))
For Each sFind In varFind
.Replace sFind, sReplace, xlPart
Next sFind
End With
Set rngFound = ws.Rows(1).Find("location", rngFound, xlValues, xlWhole)
Loop While rngFound.Address <> sFirst
End If
End Sub