Excel

how to display on listbox unique data

Ease of Use

Easy

Version tested with

2003 

Submitted by:

d_rajan_nair

Description:

i want 3 listbox list from excel data only view on unique datas. then multiselect items in 3 listbox then click ok. only view select items only 

Discussion:

how to above rectify problem. 

Code:

instructions for use

			

Private Sub ComboBox1_Change() Select Case ComboBox1.Value Case "All" If Range("F12:BA665").EntireColumn.Hidden = False Then Range("F12:BA665").EntireColumn.Hidden = True Else: Range("F12:BA665").EntireColumn.Hidden = False End If Case "AdPro" If Range("v12:BA665").EntireColumn.Hidden = True Then Range("v12:BA665").EntireColumn.Hidden = False Else: Range("v12:BA665").EntireColumn.Hidden = True End If Case "Sample" If Range("F12:U665,AL12:BA665").EntireColumn.Hidden = True Then Range("F12:U665,AL12:BA665").EntireColumn.Hidden = False Else: Range("F12:U665,AL12:BA665").EntireColumn.Hidden = True End If Case "AdPro & Sample" If Range("F12:AK665").EntireColumn.Hidden = True Then Range("F12:AK665").EntireColumn.Hidden = False Else: Range("F12:AK665").EntireColumn.Hidden = True End If End Select End Sub Private Sub ComboBox2_Change() Select Case ComboBox2.Value Case "All" If ComboBox1 = "All" Then If ComboBox2 = "All" Then If Range("F12:BA665").EntireColumn.Hidden = False Then Range("F12:BA665").EntireColumn.Hidden = True Else: Range("F12:BA665").EntireColumn.Hidden = False End If End If End If Case "Actual" If ComboBox1 = "AdPro" Then If ComboBox2 = "Actual" Then If Range("L12:BA665").EntireColumn.Hidden = False Then Range("L12:BA665").EntireColumn.Hidden = True Else: Range("L12:BA665").EntireColumn.Hidden = False End If End If End If Case "Achivement" If ComboBox1 = "AdPro" Then If ComboBox2 = "Achivement" Then If Range("F12:K665,Q12:BA665").EntireColumn.Hidden = False Then Range("F12:K665,Q12:BA665").EntireColumn.Hidden = True Else: Range("F12:K665,Q12:BA665").EntireColumn.Hidden = False End If End If End If Case "Growth" If ComboBox1 = "AdPro" Then If ComboBox2 = "Growth" Then If Range("F12:P665,U12:BA665").EntireColumn.Hidden = False Then Range("F12:P665,U12:BA665").EntireColumn.Hidden = True Else: Range("F12:P665,U12:BA665").EntireColumn.Hidden = False End If End If End If ' Case "Actual + Achivement" ' Case "Actual + Growth" ' Case "Achivement + Growth" ' .AddItem "All" ' .AddItem "Actual" ' .AddItem "Achivement" ' .AddItem "Growth" ' .AddItem "Actual + Achivement" ' .AddItem "Actual + Growth" ' .AddItem "Achivement + Growth" 'If ComboBox1 = "AdPro" Then 'If ComboBox2 = "Actual" Then End Select End Sub Private Sub CommandButton11_Click() Dim lItem As Long Dim UserRange As Range Dim MySelection() As String Dim NCrit As Long Dim HideRange As Range Dim HideRows As Range Dim TheCell As Range ' Dim HideRange1 As Range ' Dim HideRows1 As Range ' Dim TheCell1 As Range ' Dim HideRange2 As Range ' Dim HideRows2 As Range ' Dim TheCell2 As Range Dim i As Long, msg As String, Check As String 'Generate a list of the selected items With ListBox1 ' Dim i1 As Long, msg1 As String, Check1 As String 'Generate a list of the selected items ' With ListBox2 ' Dim i2 As Long, msg2 As String, Check2 As String ' 'Generate a list of the selected items ' With ListBox3 ' Dim i3 As Long, msg3 As String, Check3 As String ' 'Generate a list of the selected items ' With ListBox4 For i = 0 To .ListCount - 1 If .Selected(i) Then msg = msg & .List(i) & vbNewLine End If Next i ' For i1 = 0 To .ListCount - 1 ' If .Selected(i1) Then ' msg1 = msg1 & .List(i1) & vbNewLine ' End If ' Next i1 ' For i2 = 0 To .ListCount - 1 ' If .Selected(i2) Then ' msg2 = msg2 & .List(i2) & vbNewLine ' End If ' Next i2 ' For i3 = 0 To .ListCount - 1 ' If .Selected(i3) Then ' msg3 = msg3 & .List(i3) & vbNewLine ' End If ' Next i3 ' End With ' End With ' End With End With If msg = vbNullString Then 'If nothing was selected, tell user and let them try again MsgBox "Nothing was selected! Please make a selection!" Exit Sub Else 'Ask the user if they are happy with their selection(s) Check = MsgBox("You selected:" & vbNewLine & msg & vbNewLine & _ "Are you happy with your selections?", _ vbYesNo + vbInformation, "Please confirm") End If ' If msg1 = vbNullString Then ' 'If nothing was selected, tell user and let them try again ' MsgBox "Nothing was selected! Please make a selection!" ' Exit Sub ' Else ' 'Ask the user if they are happy with their selection(s) ' Check1 = MsgBox("You selected:" & vbNewLine & msg1 & vbNewLine & _ "Are you happy with your selections?", _ vbYesNo + vbInformation, "Please confirm") ' End If ' If msg2 = vbNullString Then 'If nothing was selected, tell user and let them try again' ' MsgBox "Nothing was selected! Please make a selection!" ' Exit Sub ' Else 'Ask the user if they are happy with their selection(s) ' Check2 = MsgBox("You selected:" & vbNewLine & msg2 & vbNewLine & _ ' "Are you happy with your selections?", _ ' vbYesNo + vbInformation, "Please confirm") ' End If ' If msg3 = vbNullString Then 'If nothing was selected, tell user and let them try again ' MsgBox "Nothing was selected! Please make a selection!" ' Exit Sub ' Else 'Ask the user if they are happy with their selection(s) ' Check3 = MsgBox("You selected:" & vbNewLine & msg3 & vbNewLine & _ ' "Are you happy with your selections?", _ ' vbYesNo + vbInformation, "Please confirm") ' End If '------------------------------------------------------------------------------------------- If Check = vbYes Then ' If Check1 = vbYes Then ' If Check2 = vbYes Then ' If Check3 = vbYes Then Set HideRange = Sheets("Sheet1").Range("B12:C665") For Each TheCell In HideRange Set HideRows = Rows(TheCell.Row) If TheCell = ListBox2.List(ListBox2.ListIndex) Then HideRows.EntireRow.Hidden = False Else HideRows.EntireRow.Hidden = True End If Next TheCell '------------------------------------------------------------------------------------------- Set HideRange1 = Sheets("Sheet1").Range("C12:D665") For Each TheCell1 In HideRange1 Set HideRows1 = Rows(TheCell1.Row) If TheCell1 = ListBox3.List(ListBox3.ListIndex) Then HideRows1.EntireRow.Hidden = False Else HideRows1.EntireRow.Hidden = True End If Next TheCell1 '------------------------------------------------------------------------------------------- ' Set HideRange2 = Sheets("Sheet1").Range("D12:E665") ' For Each TheCell2 In HideRange2 ' Set HideRows2 = Rows(TheCell2.Row) ' If TheCell2 = ListBox4.List(ListBox4.ListIndex) Then ' HideRows2.EntireRow.Hidden = False ' Else ' HideRows2.EntireRow.Hidden = True ' End If ' Next TheCell2 ' Else ' For i = 0 To ListBox1.ListCount - 1 ' ListBox1.Selected(i) = False ' Next ' For i1 = 0 To ListBox2.ListCount - 1 ' ListBox2.Selected(i1) = False ' Next ' For i2 = 0 To ListBox3.ListCount - 1 ' ListBox3.Selected(i2) = False ' Next ' For i3 = 0 To ListBox4.ListCount - 1 ' ListBox4.Selected(i3) = False ' Next End If 'End If 'End If 'End If End Sub Private Sub CommandButton12_Click() Unload Me End Sub Private Sub CommandButton13_Click() If Range("F12:BA12").EntireRow.Hidden = False Then Range("F12:BA665").EntireRow.Hidden = True Else: Range("F12:BA665").EntireRow.Hidden = False End If End Sub Private Sub ListBox1_Change() Dim UniqueList2() As String Dim UniqueList3() As String Dim UniqueList4() As String Dim x1 As Long Dim x2 As Long Dim x3 As Long Dim x4 As Long Dim Rng2 As Range Dim Rng3 As Range Dim Rng4 As Range Dim c2 As Range Dim c3 As Range Dim c4 As Range Dim y2 As Long Dim y3 As Long Dim y4 As Long Dim iLstInx As Long Dim i1LstInx As Long Dim i2LstInx As Long Set Rng2 = Sheets("Sheet1").Range("B12:B665") Set Rng3 = Sheets("Sheet1").Range("B12:B665") Set Rng4 = Sheets("Sheet1").Range("B12:B665") y2 = 1 y3 = 1 y4 = 1 Me.ListBox2.Clear Me.ListBox3.Clear Me.ListBox4.Clear ReDim UniqueList2(1 To Rng2.Rows.Count) ReDim UniqueList3(1 To Rng3.Rows.Count) ReDim UniqueList4(1 To Rng4.Rows.Count) For iLstInx = 0 To ListBox1.ListCount - 1 y2 = 0 For Each c2 In Rng2 Me.MousePointer = fmMousePointerHourGlass If ListBox1.Selected(iLstInx) = True Then If c2.Columns(1) = ListBox1.List(iLstInx) Then If Not c2.Value = vbNullString Then Unique2 = True On Error Resume Next For x2 = 1 To y2 If UniqueList2(x2) = c2.Columns(2) Then Unique2 = False End If Next If Unique2 Then y2 = y2 + 1 Me.ListBox2.AddItem (c2.Columns(2)) UniqueList2(y2) = c2.Columns(2) End If End If Else y2 = y2 + 1 End If End If Me.MousePointer = fmMousePointerDefault Next Next '---------------------------------------------------------------------------------------- For i1LstInx = 0 To ListBox1.ListCount - 1 y3 = 0 For Each c3 In Rng3 Me.MousePointer = fmMousePointerHourGlass If ListBox1.Selected(i1LstInx) = True Then If c3.Columns(1) = ListBox1.List(i1LstInx) Then If Not c3.Value = vbNullString Then Unique3 = True On Error Resume Next For x3 = 1 To y3 If UniqueList3(x3) = c3.Columns(3) Then Unique3 = False End If Next If Unique3 Then y3 = y3 + 1 Me.ListBox3.AddItem (c3.Columns(3)) UniqueList3(y3) = c3.Columns(3) End If End If Else y3 = y3 + 1 End If End If Me.MousePointer = fmMousePointerDefault Next Next '---------------------------------------------------------------------------------------- For i2LstInx = 0 To ListBox1.ListCount - 1 y4 = 0 For Each c4 In Rng4 Me.MousePointer = fmMousePointerHourGlass If ListBox1.Selected(i2LstInx) = True Then If c4.Columns(1) = ListBox1.List(i2LstInx) Then If Not c4.Value = vbNullString Then Unique4 = True On Error Resume Next For x4 = 1 To y4 If UniqueList4(x4) = c4.Columns(4) Then Unique4 = False End If Next If Unique4 Then y4 = y4 + 1 Me.ListBox4.AddItem (c4.Columns(4)) UniqueList4(y4) = c4.Columns(4) End If End If Else y4 = y4 + 1 End If End If Me.MousePointer = fmMousePointerDefault Next Next End Sub Private Sub UserForm_Initialize() With ComboBox1 .AddItem "All" .AddItem "AdPro" .AddItem "Sample" .AddItem "AdPro & Sample" End With With ComboBox2 .AddItem "All" .AddItem "Actual" .AddItem "Achivement" .AddItem "Growth" .AddItem "Actual + Achivement" .AddItem "Actual + Growth" .AddItem "Achivement + Growth" End With Dim UniqueList1() As String Dim x1 As Long Dim Rng1 As Range Dim c1 As Range Dim Unique1 As Boolean Dim y1 As Long Set Rng1 = Sheets("Sheet1").Range("B12:B665") y1 = 1 ReDim UniqueList1(1 To Rng1.Rows.Count) For Each c1 In Rng1 If Not c1.Value = vbNullString Then Unique1 = True For x1 = 1 To y1 If UniqueList1(x1) = c1.Text Then Unique1 = False End If Next If Unique1 Then y1 = y1 + 1 Me.ListBox1.AddItem (c1.Text) UniqueList1(y1) = c1.Text End If End If Next End Sub

How to use:

  1. VBA excel
 

Test the code:

  1. excel 2003
 

Sample File:

No Attachment 

Approved by Jacob Hilderbrand


This entry has been viewed 564 times.

Please read our Legal Information and Privacy Policy
Copyright @2004 - 2020 VBA Express