Listă derulantă cu selecție multiplă

Lista derulantă clasică dintr-o foaie Excel este grozavă, dar vă permite doar să selectați o opțiune din setul prezentat. Uneori, asta este exact ceea ce îți dorești, dar există situații în care utilizatorul trebuie să poată alege unele elemente din listă.

Să ne uităm la câteva implementări tipice ale unei astfel de liste cu selecție multiplă.

Opțiunea 1. Orizontală

Utilizatorul selectează elementele din lista derulantă unul câte unul și apar în dreapta celulei care se modifică, fiind listate automat pe orizontală:

Listele derulante din celulele C2:C5 din acest exemplu sunt create într-un mod standard, de exemplu

  1. selectați celulele C2:C5
  2. filă sau meniu Date alege o echipa Data validarii
  3. în fereastra care se deschide, selectați o opțiune Listă și specificați ca interval Sursă celule cu date sursă pentru lista A1:A8

Apoi trebuie să adăugați o macrocomandă la modulul de foaie, care va face toată munca principală, adică să adăugați valorile selectate în dreapta celulelor verzi. Pentru a face acest lucru, faceți clic dreapta pe fila foaie cu liste derulante și selectați comanda Cod sursa. Lipiți următorul cod în fereastra editorului Visual Basic care se deschide:

Private Sub Worksheet_Change(ByVal Target As Range) La eroare Reluați Next If Not Intersect(Target, Range("C2:C5")) Este Nimic și Target.Cells.Count = 1 Apoi Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Apoi Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Dacă este necesar, înlocuiți intervalul sensibil al listelor derulante C2:C5 din a doua linie a acestui cod cu al dvs.

Opțiunea 2. Verticală

La fel ca în versiunea anterioară, dar noile valori selectate nu sunt adăugate în dreapta, ci în partea de jos:

Se face exact în același mod, dar codul macro de gestionare se modifică ușor:

Private Sub Worksheet_Change(ByVal Target As Range) La eroare Reluare Next If Not Intersect(Target, Range("C2:F2")) Este Nimic Și Target.Cells.Count = 1 Apoi Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Apoi Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Din nou, dacă este necesar, înlocuiți intervalul sensibil al listelor derulante C2:F2 cu propria dvs. în a doua linie a acestui cod.

Opțiunea 3. Cu acumulare în aceeași celulă

În această opțiune, acumularea are loc în aceeași celulă în care se află lista derulantă. Elementele selectate sunt separate prin orice caracter dat (de exemplu, o virgulă):

Listele derulante în celulele verzi sunt create într-un mod complet standard, ca în metodele anterioare. Toată munca este realizată, din nou, de o macrocomandă din modulul de foaie:

Private Sub Worksheet_Change(ByVal Target As Range) La eroare Reluați Next If Not Intersect(Target, Range("C2:C5")) Este Nimic și Target.Cells.Count = 1 Apoi Application.EnableEvents = False newVal = Target Application.Undo 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 End Sub  

Dacă doriți, puteți înlocui caracterul separator (virgulă) din a 9-a linie de cod cu propriul dvs. (de exemplu, un spațiu sau un punct și virgulă).

  • Cum să creați o listă derulantă simplă într-o celulă de foaie Excel
  • Listă derulantă cu conținut
  • Listă drop-down cu opțiunile lipsă adăugate
  • Ce sunt macrocomenzile, cum să le folosiți, unde să introduceți codul macro în Visual Basic

Lasă un comentariu