如何使用VBA在Excel中的单个列(A)中搜索字符串

con*_*ind 8 excel vba excel-vba

我想在我的excel VBA代码中更改这些行更快,而不是循环遍历所有行,我确实看到了示例但无法理解它们,因为我不是VBA用户.

当我在样本中使用代码(谷歌,这个网站)时,我没有看到我想要的正确需求,我想搜索列A,如果找到的值返回搜索值旁边的列B中的值,否则返回空.

我使用的大多数代码在未找到时返回错误以及其他一些神秘行为.

我目前要搜索的代码是:

Dim k As Integer
For k = 2 To sheet2Counter - 1                      
    Dim tmp As String                      

    tmp = ActiveSheet.Range("A" & k).Value                      
    If tmp = tmpstr Then                      
        tmp = ActiveSheet.Range("B" & k).Value                      
        tmp = Replace(tmp, "Q", "A")                      
        mainstringtopaste = mainstringtopaste + tmp + ","

            Exit For                      
    End If                    
Next k
Run Code Online (Sandbox Code Playgroud)

如果这是一种更好的方式或任何代替它的代码更快,请告诉我.

要搜索的工作表中的列如下:

ColumnA        ColumnB
trees          leaves
oranges        fruits
pineapple      fruits
leaves         trees
Run Code Online (Sandbox Code Playgroud)

所以我的上面的代码应该搜索树,并返回叶子...

谢谢

bre*_*tdj 15

以下是两种优于循环的方法.两者都处理"无法找到"的情况.

  1. VLOOKUP如果变量不存在,则VBA等效于具有错误处理的正常函数(INDEX/MATCH可能是更好的路径VLOOKUP,即如果您的两列A和B的顺序相反,或者相距很远)
  2. VBAs FIND方法(匹配A列中的整个字符串,因为我使用了xlWhole参数)

    Sub Method1()
    Dim strSearch As String
    Dim strOut As String
    Dim bFailed As Boolean
    
    strSearch = "trees"
    
    On Error Resume Next
    strOut = Application.WorksheetFunction.VLookup(strSearch, Range("A:B"), 2, False)
    If Err.Number <> 0 Then bFailed = True
    On Error GoTo 0
    
    If Not bFailed Then
    MsgBox "corresponding value is " & vbNewLine & strOut
    Else
    MsgBox strSearch & " not found"
    End If
    End Sub
    
    Sub Method2()
        Dim rng1 As Range
        Dim strSearch As String
        strSearch = "trees"
        Set rng1 = Range("A:A").Find(strSearch, , xlValues, xlWhole)
        If Not rng1 Is Nothing Then
            MsgBox "Find has matched " & strSearch & vbNewLine & "corresponding cell is " & rng1.Offset(0, 1)
        Else
            MsgBox strSearch & " not found"
        End If
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)