vba - Excel VBA : Remove ListBox Item if in Array

标签 vba excel

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/

相关文章:

excel - 比较具有不同记录数和不同顺序的两个数据集

excel - 对象范围的方法复制图片失败

VBA Excel 加载项 : code to change format of column from general to custom date

excel - 路径适用于 PC,但不适用于 Mac

mysql - 如何从 Microsoft Excel 工作表插入/更新数据到 Mysql 数据库?

excel - 如何创建动态范围变量

excel vlookup 多行到一个单元格中

Excel VBA hlookup 返回 400

python - 如何使用python删除excel中的合并行?

c# - 更改 Excel 按钮的标签