Excel VBA:如果在数组中,则删除列表框项目

Dim libRng As Range, item As Long Dim refArrCheck As Variant, refArr As Variant Set libRng = Sheets("Sheet2").Range("B2:F1000") refArr = Sheets("Sheet1").Range("A1:BA1") For Each refArrCheck In refArr For Each cell In libRng.Cells For item = Me.ListBox1.ListCount - 1 To 0 Step -1 If Me.ListBox1.Column(0, item) = cell.Value And cell.Value = refArrCheck Then Me.ListBox1.RemoveItem (item) End If Next Next Next refArrCheck 

本质上,我试图告诉Excel通过libRng来查看,并与数组refArr比较,如果有任何匹配,从列表框中删除项目refArr值是列表框中列出的项目。 下面的代码似乎“工作”,但它不能正常工作,当我运行它,它只会删除1个匹配的项目时,有更多的匹配。

我的第三For循环或If语句是错误的? 如果libRng中的某些单元是空白的, 也会影响吗?

似乎有很多不必要的循环和检查。 有原生的工作表函数可以一次search整个范围来确定值的存在。

 Dim libRng As Range, refArr As Range, itm As Long Set libRng = Worksheets("Sheet2").Range("B2:F1000") Set refArr = Worksheets("Sheet1").Range("A1:BA1") For itm = Me.ListBox1.ListCount - 1 To 0 Step -1 If CBool(Application.CountIf(libRng, Me.ListBox1.Column(0, itm))) And _ CBool(Application.CountIf(refArr, Me.ListBox1.Column(0, itm))) Then Me.ListBox1.RemoveItem (itm) End If Next 

WorksheetFunction对象 canot使用具有COUNTIF函数的数组,但可以使用MATCH函数 。