如果特定列的vba excel值为零(0),则列表框显示唯一编号,不显示列出的编号

如果特定列的vba excel值为零(0),则列表框显示唯一编号,不显示列出的编号,excel,vba,Excel,Vba,'我的代码在这里Userform1为listbox1初始化 Private Sub UserForm_Initialize() Dim sh As Worksheet, arr As Variant, arrFin As Variant, countD As Long Dim LastRow As Long, i As Long, j As Long, k As Long, boolDupl As Boolean Set sh = Worksheets("Sheet1&q

'我的代码在这里Userform1为listbox1初始化

Private Sub UserForm_Initialize()

  Dim sh As Worksheet, arr As Variant, arrFin As Variant, countD As Long
  Dim LastRow As Long, i As Long, j As Long, k As Long, boolDupl As Boolean
  Set sh = Worksheets("Sheet1") 
  LastRow = sh.range("A" & Rows.Count).End(xlUp).Row
  ReDim arrFin(1 To 2, 1 To LastRow)  
  arr = sh.range("A2:B" & LastRow).value 
  k = 1 
  For i = 1 To UBound(arr, 1)
    boolDupl = False  
    For j = 1 To k    'iterate between the arrFin elements in order to check for duplicates
        If arr(i, 1) & arr(i, 2) = arrFin(1, j) & arrFin(2, j) Then
              boolDupl = True: Exit For 
        End If
    Next j
    If Not boolDupl Then 
        arrFin(1, k) = arr(i, 1): arrFin(2, k) = arr(i, 2)
        k = k + 1       
    End If
  Next
  ReDim Preserve arrFin(1 To 2, 1 To k - 1)    
  With Me.ListBox1
        .clear
        .ColumnCount = False
        .ColumnCount = 2 
        .List = WorksheetFunction.Transpose(arrFin) 
        .ColumnWidths = "50;500"
        .TopIndex = 0
    End With
End Sub
首先,我希望listbox1通过sheet1列(A)和列(C)显示唯一列表。对于代码:1101,所有值都为零(0),并且它不会被listbox1列出。因此Listbox1仅显示唯一列表代码:1102和1103

请按照我的附加图片了解详细信息。请帮帮我


当前代码基于列A和列B获得唯一值

如果您只需要基于列A的唯一值,并且希望排除列C为0的值,请尝试以下代码

Private Sub UserForm_Initialize()
Dim sh As Worksheet, arr As Variant, arrFin As Variant, countD As Long
Dim LastRow As Long, i As Long, j As Long, k As Long, boolDupl As Boolean

    Set sh = Worksheets("Sheet1")

    LastRow = sh.Range("A" & Rows.Count).End(xlUp).Row

    ReDim arrFin(1 To 1, 1 To LastRow)

    arr = sh.Range("A2:C" & LastRow).Value

    k = 1

    For i = 1 To UBound(arr, 1)
        If arr(i, 3) <> 0 Then
            boolDupl = False
            For j = 1 To k    'iterate between the arrFin elements in order to check for duplicates
                If arr(i, 1) = arrFin(1, j) Then
                    boolDupl = True: Exit For
                End If
            Next j
            If Not boolDupl Then
                arrFin(1, k) = arr(i, 1)
                k = k + 1
            End If
        End If
    Next i

    ReDim Preserve arrFin(1 To 1, 1 To k - 1)
    
    With Me.ListBox1
        .ColumnCount = False
        .ColumnCount = 1
        .List = WorksheetFunction.Transpose(arrFin)
        .ColumnWidths = "50"
        .TopIndex = 0
    End With
    
End Sub
Private子用户表单_Initialize()
调暗sh为工作表,arr为变量,arrFin为变量,计数为长
Dim LastRow为Long,i为Long,j为Long,k为Long,boolDupl为Boolean
设置sh=工作表(“表1”)
LastRow=sh.Range(“A”&Rows.Count).End(xlUp).Row
ReDim arrFin(1到1,1到最后一行)
arr=sh.Range(“A2:C”和LastRow).Value
k=1
对于i=1至UBound(arr,1)
如果arr(i,3)0那么
boolDupl=False
对于j=1到k’,在arrFin元素之间迭代以检查重复项
如果arr(i,1)=arrFin(1,j),则
boolDupl=True:退出
如果结束
下一个j
如果不是boolDupl那么
arrFin(1,k)=arr(i,1)
k=k+1
如果结束
如果结束
接下来我
ReDim保留arrFin(1对1,1对k-1)
和我一起
.ColumnCount=False
.ColumnCount=1
.List=工作表函数.Transpose(arrFin)
.ColumnWidths=“50”
.TopIndex=0
以
端接头
注意,还有其他不涉及多个循环的方法,例如字典,在代码中计算公式

评价实例 下面是一个通过计算公式来实现的示例,它专门针对Office365

Private Sub UserForm_Initialize()
Dim sh As Worksheet, arrFin As Variant
Dim LastRow As Long

    Set sh = Worksheets("Sheet1")

    LastRow = sh.Range("A" & Rows.Count).End(xlUp).Row
    arrFin = Evaluate("SORT(UNIQUE(FILTER(A2:A" & LastRow & ", C2:C" & LastRow & "<>0)))")
    
    With Me.ListBox1
        .ColumnCount = False
        .ColumnCount = 1
        .List = arrFin
        .ColumnWidths = "50"
        .TopIndex = 0
    End With
    
End Sub
Private子用户表单_Initialize()
将sh标注为工作表,将arrFin标注为变量
最后一排一样长
设置sh=工作表(“表1”)
LastRow=sh.Range(“A”&Rows.Count).End(xlUp).Row
arrFin=Evaluate(“排序(唯一(过滤器(A2:A“&LastRow&“、C2:C”&LastRow&“0))))
和我一起
.ColumnCount=False
.ColumnCount=1
.List=arrFin
.ColumnWidths=“50”
.TopIndex=0
以
端接头