Lista rozwijana z opcją wielokrotnego wyboru

Klasyczna lista rozwijana w arkuszu Excela jest świetna, ale pozwala wybrać tylko jedną opcję z prezentowanego zestawu. Czasami jest to dokładnie to, czego chcesz, ale są sytuacje, w których użytkownik musi mieć możliwość wyboru kilka elementy z listy.

Przyjrzyjmy się kilku typowym implementacjom takiej listy wielokrotnego wyboru.

Opcja 1. Pozioma

Użytkownik wybiera elementy z listy rozwijanej jeden po drugim i pojawiają się one po prawej stronie zmienianej komórki, automatycznie wyświetlane w poziomie:

Listy rozwijane w komórkach C2:C5 w tym przykładzie są tworzone w standardowy sposób, tj

  1. zaznacz komórki C2:C5
  2. karta lub menu Dane wybierz drużynę Walidacja danych
  3. w oknie, które się otworzy, wybierz opcję Lista i określ jako zakres Źródło komórki z danymi źródłowymi dla listy A1:A8

Następnie do modułu arkusza należy dodać makro, które wykona całą główną pracę, czyli doda wybrane wartości po prawej stronie zielonych komórek. Aby to zrobić, kliknij prawym przyciskiem myszy kartę arkusza z listami rozwijanymi i wybierz polecenie Kod żródłowy. Wklej następujący kod do otwartego okna edytora Visual Basic:

Private Sub Worksheet_Change(ByVal Target As Range) W przypadku błędu Wznów dalej, jeśli nie przecina(Target, Range("C2:C5")) jest niczym i Target.Cells.Count = 1 Then Application.EnableEvents = False Jeśli Len(Target.Offset (0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

W razie potrzeby zamień wrażliwy zakres list rozwijanych C2:C5 w drugim wierszu tego kodu na własny.

Opcja 2. Pionowa

Tak samo jak w poprzedniej wersji, ale nowe wybrane wartości nie są dodawane po prawej, ale na dole:

Odbywa się to dokładnie w ten sam sposób, ale kod makra obsługi nieznacznie się zmienia:

Private Sub Worksheet_Change(ByVal Target As Range) W przypadku błędu Wznów dalej, jeśli nie przecina(Target, Range("C2:F2")) jest niczym i Target.Cells.Count = 1 Then Application.EnableEvents = False Jeśli Len(Target.Offset (1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Ponownie, jeśli to konieczne, zastąp wrażliwy zakres list rozwijanych C2:F2 własnymi w drugim wierszu tego kodu.

Opcja 3. Z akumulacją w tej samej komórce

W tej opcji akumulacja następuje w tej samej komórce, w której znajduje się lista rozwijana. Wybrane elementy są oddzielone dowolnym znakiem (na przykład przecinkiem):

Listy rozwijane w zielonych komórkach są tworzone w całkowicie standardowy sposób, tak jak w poprzednich metodach. Cała praca jest wykonywana ponownie przez makro w module arkusza:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Cofnij oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Napis końcowy  

W razie potrzeby możesz zastąpić znak separatora (przecinek) w 9. wierszu kodu własnym (na przykład spacją lub średnikiem).

  • Jak utworzyć prostą listę rozwijaną w komórce arkusza Excel?
  • Lista rozwijana z zawartością
  • Lista rozwijana z dodanymi brakującymi opcjami
  • Czym są makra, jak ich używać, gdzie wstawić kod makr w Visual Basic

Dodaj komentarz