Excel VBA:如果在Array中,则删除ListBox项

时间:2016-01-07 18:52:03

标签: excel vba 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 进行比较,如果有任何匹配项,请移除来自ListBox。 refArr 值是ListBox中列出的项目。以下代码似乎“工作”但它无法正常工作,因为当我运行它时,它只删除1个匹配的项目。

我的第3个For循环或If语句错了吗?如果 libRng 中的某些单元格为空白也是重要的吗?

1 个答案:

答案 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