如果特定列的vba excel值为零(0),则列表框显示唯一编号,不显示列出的编号
'我的代码在这里Userform1为listbox1初始化如果特定列的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
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
以
端接头