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