Αναπτυσσόμενη λίστα με πολλαπλή επιλογή

Η κλασική αναπτυσσόμενη λίστα σε ένα φύλλο Excel είναι εξαιρετική, αλλά σας επιτρέπει να επιλέξετε μόνο μία επιλογή από το παρουσιαζόμενο σύνολο. Μερικές φορές αυτό είναι ακριβώς αυτό που θέλετε, αλλά υπάρχουν περιπτώσεις όπου ο χρήστης πρέπει να μπορεί να επιλέξει μερικοί στοιχεία από τη λίστα.

Ας δούμε πολλές τυπικές υλοποιήσεις μιας τέτοιας λίστας πολλαπλών επιλογών.

Επιλογή 1. Οριζόντια

Ο χρήστης επιλέγει τα στοιχεία από την αναπτυσσόμενη λίστα ένα προς ένα και εμφανίζονται στα δεξιά του κελιού που αλλάζει, και εμφανίζονται αυτόματα οριζόντια:

Οι αναπτυσσόμενες λίστες στα κελιά C2:C5 σε αυτό το παράδειγμα δημιουργούνται με τυπικό τρόπο, π.χ

  1. επιλέξτε κελιά C2:C5
  2. καρτέλα ή μενού ημερομηνία επιλέξτε μια ομάδα επικύρωση δεδομένων
  3. στο παράθυρο που ανοίγει, επιλέξτε μια επιλογή Λίστα και καθορίστε ως εύρος Πηγή κελιά με δεδομένα πηγής για τη λίστα A1:A8

Στη συνέχεια, πρέπει να προσθέσετε μια μακροεντολή στη μονάδα φύλλου, η οποία θα κάνει όλη την κύρια εργασία, δηλαδή θα προσθέσει επιλεγμένες τιμές στα δεξιά των πράσινων κελιών. Για να το κάνετε αυτό, κάντε δεξί κλικ στην καρτέλα του φύλλου με τις αναπτυσσόμενες λίστες και επιλέξτε την εντολή Ο πηγαίος κώδικας. Επικολλήστε τον ακόλουθο κώδικα στο παράθυρο του προγράμματος επεξεργασίας της Visual Basic που ανοίγει:

Ιδιωτικό δευτερεύον φύλλο εργασίας_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Τότε Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Στη συνέχεια Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Εάν είναι απαραίτητο, αντικαταστήστε το ευαίσθητο εύρος των αναπτυσσόμενων λιστών C2:C5 στη δεύτερη γραμμή αυτού του κωδικού με το δικό σας.

Επιλογή 2. Κάθετη

Το ίδιο όπως και στην προηγούμενη έκδοση, αλλά οι νέες επιλεγμένες τιμές δεν προστίθενται στα δεξιά, αλλά στο κάτω μέρος:

Γίνεται με τον ίδιο ακριβώς τρόπο, αλλά ο κώδικας μακροεντολής χειριστή αλλάζει ελαφρώς:

Ιδιωτικό δευτερεύον φύλλο εργασίας_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Τότε Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Στη συνέχεια Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Και πάλι, εάν είναι απαραίτητο, αντικαταστήστε το ευαίσθητο εύρος των αναπτυσσόμενων λιστών C2:F2 με το δικό σας στη δεύτερη γραμμή αυτού του κώδικα.

Επιλογή 3. Με συσσώρευση στο ίδιο κελί

Σε αυτήν την επιλογή, η συσσώρευση γίνεται στο ίδιο κελί όπου βρίσκεται η αναπτυσσόμενη λίστα. Τα επιλεγμένα στοιχεία διαχωρίζονται με οποιονδήποτε δεδομένο χαρακτήρα (για παράδειγμα, κόμμα):

Οι αναπτυσσόμενες λίστες στα πράσινα κελιά δημιουργούνται με εντελώς τυπικό τρόπο, όπως και στις προηγούμενες μεθόδους. Όλη η εργασία γίνεται, πάλι, από μια μακροεντολή στη μονάδα φύλλου:

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 Τότε 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  

Εάν θέλετε, μπορείτε να αντικαταστήσετε τον διαχωριστικό χαρακτήρα (κόμμα) στην 9η γραμμή κώδικα με τον δικό σας (για παράδειγμα, ένα κενό ή ένα ερωτηματικό).

  • Πώς να δημιουργήσετε μια απλή αναπτυσσόμενη λίστα σε ένα κελί φύλλου excel
  • Αναπτυσσόμενη λίστα με περιεχόμενο
  • Αναπτυσσόμενη λίστα με προστιθέμενες επιλογές που λείπουν
  • Τι είναι οι μακροεντολές, πώς να τις χρησιμοποιήσετε, πού να εισαγάγετε κώδικα μακροεντολής στη Visual Basic

Αφήστε μια απάντηση