Excel 按列表查找替换的宏仅替换列表中的第一个元素

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

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"), "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