我有兩張桌子。一個表稱為 DRData (Blad3),另一個表是 CheckData (Blad2)。EANCODE 是 DRData 的 J 列和 Checkdata 的 A 列。
我想檢查 DRData.EANCODE 中是否存在 CheckData.EANCODE。如果是這樣的話; 從 CheckData 中洗掉該行。
我嘗試了幾件事,但還沒有成功。我現在寫的代碼如下:
Sub FindEAN()
Dim i As Long
Dim x As Long
x = 1 'Start on first row
EANtoFind = Blad2.Range("A" & x).Value
For i = 1 To 99999 '
If Blad3.Cells(i, 1).Value = EANtoFind Then
Blad2.Range("A" & x).EntireRow.Delete
Else: x = x 1
End If
Next i
End Sub
當 EANCODE 不存在時,我想跳過一行來檢查該代碼。我想以 CheckData 中的串列結束,其中顯示了所有不在 DRData 中的 EANCODE 值。使用上面的代碼,只有第一行被洗掉,現在我不知道如何讓它回圈。包括 x 1 以進入下一行。
uj5u.com熱心網友回復:
首先,您必須澄清您的問題有點復雜。洗掉行時必須注意索引
為此,您必須指出最大行數以優化回圈
一個簡單的方法是使用預定義的搜索功能,并稍微編輯您的代碼。
我最喜歡的是 Application.match(),它需要 3 個引數:
- 尋找的價值
- 您查看的陣列(在我們的例子中是 Blad3 的 J 列或位置 10)
- 0:完全匹配
有關更多詳細資訊,請參閱檔案
https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheetfunction.match
一個有效的代碼示例如下
Sub FindEAN()
Dim x As Long
x = 1 'Start on first row
maxline = Blad2.Range("A" & Rows.count).End(xlUp).row
While x <= maxline '
EANtoFind = Blad2.Range("A" & x).Value
If Not IsError(Application.Match(EANtoFind, Blad3.Columns(10), 0)) Then
Blad2.Range("A" & x).EntireRow.Delete
maxline = maxline - 1
Else
x = x 1
End If
Wend
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/440560.html
上一篇:回圈由VBA類制作的集合
