我试图创建一个循环(我对 VBA 很陌生)来检查 A 列中的“Apple”一词。A 列包含水果名称。找到“Apple”时,代码会将范围“H2:S2”复制到 G 列以及 A 列中的相应行值。
但是当搜索条件部分更改为通配符时,代码将不会运行(我的目标是包含 Applecake 存在的行)。
lookupVal = "Apple" 'Works
lookupVal = "*Apple*" 'Nothing happens
我应该如何调整下面的代码以便它使用通配符运行,或者可能有比此代码状态更好的解决方案来实现结果?
完整代码:
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
运算符(operator):
If currVal Like lookupVal Then
所以,如果
lookupVal
是 "*Apple*"
和 currVal
是 "Aren't Apples nice to eat"
,测试将是 True
.您可能还需要使用
If LCase$(currVal) Like LCase$(lookupVal) Then
如果你想避免区分大小写的问题。
您也可以考虑使用
Find
(根据需要使用 LookAt:=xlPart
或 LookAt:=xlWhole
参数),而不是进行逐个单元格的比较。但这取决于您对这是否是可行的解决方案的要求。
关于VBA使用通配符在行中查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058297/