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 进行比较,如果有任何匹配项,请移除项来自ListBox。 refArr 值是ListBox中列出的项目。以下代码似乎“工作”但它无法正常工作,因为当我运行它时,它只删除1个匹配的项目。
我的第3个For循环或If语句错了吗?如果 libRng 中的某些单元格为空白也是重要的吗?
答案 0 :(得分:2)
似乎有很多不必要的循环和检查。有一些原生工作表函数可以一次搜索整个范围,以确定是否存在值。
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 object canot使用的数组包含COUNTIF function,但可以使用MATCH function。