Vyplňte pole seznamu jedinečnými hodnotami z listu pomocí jazyka VBA v aplikaci Microsoft Excel

Anonim

V tomto článku vytvoříme pole seznamu v uživatelské formě a načteme jej hodnotami po odebrání duplicitních hodnot.

Nezpracovaná data, která vložíme do seznamu, se skládají ze jmen. Tato nezpracovaná data obsahují duplicitu v definovaných názvech.

V tomto příkladu jsme vytvořili uživatelský formulář, který se skládá ze seznamu. Toto pole se seznamem zobrazí jedinečná jména ze vzorových dat. Chcete -li uživatelský formulář aktivovat, klikněte na tlačítko Odeslat.

Tento uživatelský formulář vrátí jméno vybrané uživatelem jako výstup v okně zprávy.

Logické vysvětlení

Před přidáním jmen do seznamu jsme použili objekt kolekce k odstranění duplicitních jmen.

K odstranění duplicitních záznamů jsme provedli následující kroky:-

  1. Přidána jména z definovaného rozsahu v listu aplikace Excel do objektu kolekce. V objektu kolekce nemůžeme vložit duplicitní hodnoty. Objekt Collection tedy vyvolá chybu při zjištění duplicitních hodnot. Ke zpracování chyb jsme použili chybové hlášení „On Error Resume Next“.

  2. Po přípravě kolekce přidejte do pole všechny položky z kolekce.

  3. Potom vložte všechny prvky pole do seznamu.

Pro kód prosím postupujte níže

 Možnost Explicit Sub spuštěná () UserForm1.Show End Sub 'Přidat pod kód v uživatelském formuláři Možnost Explicit Private Sub CommandButton1_Click () Dim var1 As String Dim i As Integer' Smyčka přes všechny hodnoty přítomné v seznamu 'Přiřazení vybrané hodnoty proměnné var1 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected (i) Then var1 = ListBox1.List (i) Exit For End If Next 'Unload the userform. Unload Me 'Zobrazení vybrané hodnoty MsgBox "V seznamu jste vybrali následující název:" & var1 End Sub Private Sub UserForm_Initialize () Dim MyUniqueList As Variant, i As Long' Volání funkce UniqueItemList 'Přiřazení rozsahu jako vstupního parametru MyUniqueList = UniqueItemList (Rozsah ("A12: A100"), True) With Me.ListBox1 'Vymazání obsahu seznamu .Clear' Přidání hodnot v seznamu pro i = 1 do UBound (MyUniqueList) .AddItem MyUniqueList (i) Další i ' Výběr první položky .ListIndex = 0 End with End Sub Private Function UniqueItemList (InputRange As Range, _ HorizontalList As Boolean) As Variant Dim cl As Range, cUnique As New Collection, i As Long 'Declaring a dynamic array Dim uList () As Varianta „Deklarování této funkce jako volatilní“ Funkce znamená, že bude přepočítána vždy, když dojde k výpočtu v jakékoli buňce Aplikace. Volatile On Error Resume Další 'Přidávání položek do kolekce' Bude vložena pouze jedinečná položka 'Vložení duplicitní položky způsobí chybu pro každou cl In InputRange If cl.Value "" Then 'Přidávání hodnot do kolekce cUnique.Add cl.Value, CStr (cl.Value) End If Next cl' Inicializační hodnota vrací funkce UniqueItemList = "" If cUnique.Count> 0 Then 'Změna velikosti pole ReDim uList (1 To cUnique.Count)' Vkládání hodnot z kolekce do pole Pro i = 1 Do cUnique.Count uList (i) = cUnique (i) Další i UniqueItemList = uList 'Kontrola hodnoty HorizontalList' Pokud je hodnota true, pak transponující hodnota UniqueItemList Pokud není HorizontalList Then UniqueItemList = _ Application.WorksheetFunction.Transpose (UniqueItemList) End If End If On Error GoTo 0 End Function 

Pokud se vám tento blog líbil, sdílejte ho se svými přáteli na Facebooku. Také nás můžete sledovat na Twitteru a Facebooku.

Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit naši práci a zlepšit ji pro vás. Napište nám na e -mail