Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA使用通配符在行中查找值_Vba_Excel_Find - Fatal编程技术网

VBA使用通配符在行中查找值

VBA使用通配符在行中查找值,vba,excel,find,Vba,Excel,Find,我试着做一个循环(我对VBA很陌生)来检查a列中的单词“Apple”。a列包含水果名称。当找到“Apple”时,代码将范围“H2:S2”复制到G列和A列中相应的行值 但是当搜索条件部分更改为通配符时,代码将不会运行(我的目标是包括存在单词Applecake的行) 我应该如何调整下面的代码,使其以通配符运行,或者可能有比此代码状态更好的解决方案来实现结果 完整代码: Sub CopypasteValues() Dim i, j, lastrowA As Long Dim looku

我试着做一个循环(我对VBA很陌生)来检查a列中的单词“Apple”。a列包含水果名称。当找到“Apple”时,代码将范围“H2:S2”复制到G列和A列中相应的行值

但是当搜索条件部分更改为通配符时,代码将不会运行(我的目标是包括存在单词Applecake的行)

我应该如何调整下面的代码,使其以通配符运行,或者可能有比此代码状态更好的解决方案来实现结果

完整代码:

Sub CopypasteValues()
    Dim i, j, lastrowA As Long
    Dim lookupVal As String

    'finds the last row in Column A
    lastrowA = Sheets("Dataset").Cells(Rows.Count, "A").End(xlUp).Row

    'loop over values in Sheet "Dataset"
    For i = 1 To lastrowA 
        lookupVal = "Apple" 'Define search critera

        For j = 1 To lastrowA
            currVal = Sheets("Dataset").Cells(j, "A")
            If lookupVal = currVal Then
                ValueCopy = Range("G2:S2").Copy 'Range to copy
                Sheets("Dataset").Cells(j, "G") = Range("G" & j).PasteSpecial 
            End If
        Next j
    Next i
End Sub

您可以使用
Like
操作符:

If currVal Like lookupVal Then
因此,如果
lookupVal
“*Apple*”
currVal
“苹果不好吃吗”
,那么测试将是
正确的


您可能还需要使用

If LCase$(currVal) Like LCase$(lookupVal) Then
如果您想避免区分大小写的问题



您也可以考虑使用<代码>查找< />代码(使用<<代码>查找:= xLtabs<代码>或<代码>查找:= xLtWord参数),而不是按单元格比较进行单元格比较。但这完全取决于您的要求,即这是否是一个可行的解决方案。

您可以使用
之类的
操作符:

If currVal Like lookupVal Then
因此,如果
lookupVal
“*Apple*”
currVal
“苹果不好吃吗”
,那么测试将是
正确的


您可能还需要使用

If LCase$(currVal) Like LCase$(lookupVal) Then
如果您想避免区分大小写的问题



您也可以考虑使用<代码>查找< />代码(使用<<代码>查找:= xLtabs<代码>或<代码>查找:= xLtWord参数),而不是按单元格比较进行单元格比较。但这完全取决于您的要求,以及这是否是一个可行的解决方案。

非常感谢!!!!这对我来说太完美了。非常感谢你指出了区分大小写的问题,很高兴知道。我现在还没有遇到过它,但可能会遇到。我曾尝试使用
查找
,但在我的知识阶段仍然很难,我无法使它正常工作。@Wiz-对于初学者来说,虽然你没有太多可能导致速度问题的数据,但像
这样使用
肯定是“最简单”的选择。是的,我也这么认为。我在大约700行和1列之间循环。仍然比手动操作快得多。但是我明白你的观点,因为我有很多矩阵或者更多的行。非常感谢!!!!这对我来说太完美了。非常感谢你指出了区分大小写的问题,很高兴知道。我现在还没有遇到过它,但可能会遇到。我曾尝试使用
查找
,但在我的知识阶段仍然很难,我无法使它正常工作。@Wiz-对于初学者来说,虽然你没有太多可能导致速度问题的数据,但像
这样使用
肯定是“最简单”的选择。是的,我也这么认为。我在大约700行和1列之间循环。仍然比手动操作快得多。但我看到你的观点是,矩阵很大或/和行更多。旁注:确保为每个变量指定一个类型。使用
Dim i,j,lastrowA As Long
只将最后一个声明为
Long
前两个仍然是
Variant
:使用
Dim i As Long,j As Long,lastrowA As Long
来声明所有类型的3个
Long
。谢谢您的指出!!旁注:确保为每个变量指定类型。使用
Dim i,j,lastrowA As Long
只将最后一个声明为
Long
前两个仍然是
Variant
:使用
Dim i As Long,j As Long,lastrowA As Long
来声明所有类型的3个
Long
。谢谢您的指出!!