2017-05-18 55 views
0

我嘗試過在A列中檢查單詞「Apple」的循環(我對VBA很新)。列A包含水果名稱。當找到「Apple」時,則代碼將範圍「H2:S2」複製到列G以及列A中的相應行值。VBA使用通配符查找行中的值

但是,當搜索條件部分更改爲通配符時,代碼不會運行我的目標是包含存在單詞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 
+2

邊注意:請確保您爲每個**變量指定一個類型。 'Dim i,j,lastrowA As Long'你只能將最後一個聲明爲'Long',前2個將保持'Variant':使用Dim i As Long,j As Long,lastrowA As Long'來聲明所有3個輸入'Long'。 –

+0

感謝您指出! – Wiz

回答

3

可以使用Like操作:

If currVal Like lookupVal Then 

所以,如果lookupVal"*Apple*"currVal"Aren't Apples nice to eat",測試將True


您可能還需要使用

If LCase$(currVal) Like LCase$(lookupVal) Then 

如果你想避免區分大小寫的問題。


你也可以考慮使用Find(用LookAt:=xlPartLookAt:=xlWhole參數如需要),而不是做一個細胞的細胞比較。但這要取決於你的要求是否是一個可行的解決方案。

+0

非常感謝!!!!對我來說很完美。 還有一個額外的感謝,指出了大小寫敏感的問題,很高興知道。我現在還沒有遇到它,但可能會這樣做。 – Wiz

+0

我試過使用'Find',但在我的知識階段仍然很難,我無法使它正常工作。 – Wiz

+0

@Wiz - 對於初學者來說,雖然你沒有太多可能導致速度問題的數據,但使用Like就一定是「最簡單」的選擇。 – YowE3K