gpt4 book ai didi

excel - VBA:如果值在列表中,则删除行,遍历列表

转载 作者:行者123 更新时间:2023-12-04 22:13:36 26 4
gpt4 key购买 nike

我有两张 table 。一个表称为 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 以进入下一行。

最佳答案

首先,您必须澄清您的问题有点复杂。删除行时必须注意索引
为此,您必须指出最大行数以优化循环
一个简单的方法是使用预定义的搜索功能,并稍微编辑您的代码。
我最喜欢的是 Application.match(),它需要 3 个参数:

  • 寻找的值(value)
  • 您查看的数组(在我们的例子中是 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

    关于excel - VBA:如果值在列表中,则删除行,遍历列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71408895/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com