如何使用VBA在excel中搜索单列(a)中的字符串

如何使用VBA在excel中搜索单列(a)中的字符串,excel,vba,Excel,Vba,我想将excel VBA代码中的这些行更改为更快的行,而不是遍历所有行,我确实看到了示例,但无法理解它们,因为我不是VBA用户 当我在示例(谷歌,这个网站)中使用代码时,我没有看到我想要的正确需求,我想搜索A列,如果找到的值返回B列中搜索值旁边的值,否则返回空值 我使用的大多数代码在找不到时都返回错误和其他一些神秘行为 我当前要搜索的代码是: Dim k As Integer For k = 2 To sheet2Counter - 1 Dim

我想将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
也让我知道这是一个更好的方式或任何代码,将取代它更快速

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

ColumnA        ColumnB
trees          leaves
oranges        fruits
pineapple      fruits
leaves         trees
所以,正如我上面的代码,应该搜索树并返回叶子


谢谢

下面是两种优于循环的方法。两者都处理“找不到”的情况

  • 如果变量不存在,则具有错误处理的正常函数
    VLOOKUP
    的VBA等价物(
    INDEX/MATCH
    可能比
    VLOOKUP
    更好,即如果a列和B列顺序相反,或相距很远)
  • VBAs
    FIND
    方法(匹配给定列a中的整个字符串,我使用
    xlWhole
    参数)

    子方法1()
    作为字符串的Dim stresearch
    像弦一样的暗弦
    Dim b失败为布尔值
    strearch=“树”
    出错时继续下一步
    strOut=Application.WorksheetFunction.VLookup(strearch,Range(“A:B”),2,False)
    如果错误号为0,则bFailed=True
    错误转到0
    如果没有失败的话
    MsgBox“对应值为”&vbNewLine&strOut
    其他的
    MsgBox strSearch&“未找到”
    如果结束
    端接头
    子方法2()
    变暗rng1 As范围
    作为字符串的Dim stresearch
    strearch=“树”
    设置rng1=范围(“A:A”)。查找(strSearch,xlValues,xlWhole)
    如果不是,那么rng1什么都不是
    MsgBox“Find has matched”&strSearch&vbNewLine&“对应单元格为”&rng1。偏移量(0,1)
    其他的
    MsgBox strSearch&“未找到”
    如果结束
    端接头
    

  • 您在A列中查找哪些值,以及是否匹配全部或部分字符串等?我发现在给定所有变量的情况下,很难读取当前代码。@brettdj每个单元格一个字符串,所以我会说整个字符串。也请看上面我已经更新了描述。谢谢谢谢谢谢-树是出现一次还是多次?列中的值是不同的(不要重复),但是它们有时会出现在列B中。请参见上文。谢谢你是的,正是我需要的,非常感谢。一个查询是这行“Set rng1=Range(“a:a”)。Find(strearch,xlValues,xlother)”我想这行带我到工作表,搜索对我来说是可见的,我可以看到单元格被选中,等等,如何隐藏它?我的意思是,我在一个文本框中显示我的流程进度,但它会将我带到工作表,并显示选择的不同列等。。。感谢you@confusedMind当然可以。否-我的代码中没有
    选择
    激活
    注释,因此它不会进行任何突出显示。
    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