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 进行比较,如果有任何匹配项,则删除 item来自列表框。 refArr 值是列表框中列出的项目。下面的代码似乎“工作”,但它不能正常工作,因为当我运行它时,它只删除 1 个匹配的项目,而当有更多匹配的项目时。
我的第三个 For 循环或 If 语句是否错误?如果 libRng 中的某些单元格为空白,也会有影响吗?
最佳答案
似乎有很多不必要的循环和检查。有一些 native 工作表函数可以一次搜索整个范围以确定值是否存在。
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不能使用 COUNTIF function 的数组但它可以与 MATCH function .
关于vba - Excel VBA : Remove ListBox Item if in Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662942/