Benutzer-Werkzeuge

Webseiten-Werkzeuge


kb:s:0086:faq:dropdownfeld-fuellen-aus-tabellenblatt

Dropdown-Feld nutzen um mehrere Zellen zu füllen

Problem:

Ich möchte in Tabelle1 ein Auswahlfeld erstellen, das mehrere Werte zur Auswahl aus Tabelle2 anbietet.

1. Lösung: Liste des Drop-Down-Feldes kommt aus anderen Tabellenblatt

In Excel 2007 bzw. Excel 2010 gehen Sie wie folgt vor:

  • Alle Zellen auswählen, für die das Dropdown-Feld erstellt werden soll.
  • Registerkarte Daten, Gruppe: Datentools, Befehl: Datenüberprüfung
  • Registerkarte: Einstellungen
    • Befehl: Zulassen = Liste
    • Befehl: Quelle = hier den Quellbereich für die Daten auswählen
    • Mit „OK“ bestätigen

2. Lösung: Liste des Drop-Down-Feldes wird direkt hinterlegt

In Excel 2007 bzw. Excel 2010 gehen Sie wie folgt vor:

  • Alle Zellen auswählen, für die das Dropdown-Feld erstellt werden soll.
  • Registerkarte Daten, Gruppe: Datentools, Befehl: Datenüberprüfung
  • Registerkarte: Einstellungen
    • Befehl: Zulassen = Liste
    • Befehl: Quelle = ErsterWert;ZweiterWert;DritterWert … (die eingegebenen Werte müssen also mit Semikolon getrennt werden!)
    • Mit „OK“ bestätigen

3. Lösung: VBA-Lösung die ein Drop-Down-Feld (Kombinationsfeld) nutzt, um mehrere Zellen zu füllen

Eine Lösung findet sich in folgendem Artikel:
https://www.ms-office-forum.net/forum/showthread.php?t=300957

Bereiten Sie eine Excel-Datei wie folgt vor:

Füllen Sie im Tabellenblatt „Tabelle1“ die Zellen A3 bis A22 mit einer Liste von Obstsorten (Apfel, Banane, Kiwi, etc.)

Legen Sie folgenden Quellcode für das Tabellenblatt „Tabelle1“ an:

Option Explicit                             ' Variablendeklaration erforderlich

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '**************************************************
    '* 24.12.10                                       *
    '* erstellt von Karin (Beverly), http://Excel-Inn.de*
    '* Beverly_Forums@web.de                          *
    '**************************************************
    Dim oobElement As OLEObject             ' Variable für das Steuerelement als OLEObject
    On Error Resume Next
    ActiveSheet.OLEObjects("DropDownZoom").Delete
    On Error GoTo 0
    If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
        ' Bildschirmaktualisierung aus
        Application.ScreenUpdating = False
        ' ComboBox erstellen
        Set oobElement = OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=0, Top:=0, Width:=0, Height:=0)
        With oobElement
            .Top = ActiveCell.Top          ' Position oben
            .Left = ActiveCell.Left        ' Position links
            .Width = Range(ActiveCell, ActiveCell.Offset(0, 1)).Width ' Breite
            .Height = Range(ActiveCell, ActiveCell.Offset(1, 0)).Height ' Höhe
            .ListFillRange = "Liste"        ' Quellbereich, per Name "Liste" definiert
            .Name = "DropDownZoom"          ' Name zuweisen
            .Object.MatchRequired = True    ' nur vorhandene Einträge
            .Object.ListRows = 14           ' Zeilenanzahl der Liste
            .Object.Font.Size = 12          ' Schriftgröße
            .Object.DropDown                ' DropDown öffnen
            .Object.ListIndex = 0           ' 1. Eintrag auswählen
            ' Umwandeln in ein Datum - nur erforderlich wenn die Auswahl aus Datumswerten besteht
            If IsDate(Range(.ListFillRange).Cells(1)) Then .Object = CStr(CDate(.Object))
            .Activate                       ' aktivieren
            ' erforderlich, da andernfalls der 1. Eintrag nicht in die Zelle eingetragen werden kann,
            ' weil seine Auswahl kein Change-Ereignis auslöst da er bereits ausgwählt ist
            ' mit dem Makro "Eintrag" wird der 1. Eintrag in die Zelle geschrieben
            Application.OnTime Now + TimeValue("00:00:00"), "Eintrag"
        End With
        ' Bildschirmaktualisierung ein
        Application.ScreenUpdating = True
    End If
End Sub

Private Sub DropDownZoom_Change()
    '**************************************************
    '* 24.12.10                                       *
    '* erstellt von Karin (Beverly), http://Excel-Inn.de*
    '* Beverly_Forums@web.de                          *
    '**************************************************
    ' Wert aus der Liste wurde gewählt
    If DropDownZoom.MatchFound Then
        ' Umwandeln in ein Datum
        If IsDate(Range(DropDownZoom.ListFillRange).Cells(1)) Then _
            DropDownZoom = CStr(CDate(DropDownZoom))
    ' Wert nicht in Liste vorhanden
    Else
        ' leeren
        DropDownZoom = ""
    End If
    ' Wert aus der betreffenden Zelle des Quellbereichs in aktuelle Zelle eintragen
    ' ListIndex beginnt bei 0, deshalb + 1
    Range(DropDownZoom.TopLeftCell.Address) = _
        Range(DropDownZoom.ListFillRange).Cells(DropDownZoom.ListIndex + 1)
    ' aktuelle Zelle wie Ausgangszelle formatieren
    Range(DropDownZoom.TopLeftCell.Address).NumberFormat = _
        Range(DropDownZoom.ListFillRange).Cells(DropDownZoom.ListIndex + 1).NumberFormat
End Sub



' Makro nur zu Programmierzwecken erforderlich falls die Reaktion auf die Eingabe
' nicht mehr erfolgt
Sub bbbb()
Application.EnableEvents = True
End Sub

Legen Sie ein Modul mit dem Bezeichnung „mdlAllgemein“ mit folgendem Quellcode an:

Option Explicit
Option Private Module

Sub Eintrag()
    '**************************************************
    '* 24.12.10                                       *
    '* erstellt von Karin (Beverly), http://Excel-Inn.de*
    '* Beverly_Forums@web.de                          *
    '**************************************************
    If Not Intersect(Range(ActiveSheet.DropDownZoom.TopLeftCell.Address), Range("C5:C35")) Is Nothing Then
        ' Eintrag des 1. Wertes (ListIndex = 0) der ComboBox
        Range(ActiveSheet.DropDownZoom.TopLeftCell.Address) = _
            Range(ActiveSheet.DropDownZoom.ListFillRange).Cells(1)
        Range(ActiveSheet.DropDownZoom.TopLeftCell.Address).NumberFormat = _
            Range(ActiveSheet.DropDownZoom.ListFillRange).Cells(1).NumberFormat
    End If
End Sub

Weiterführende Hinweise:

  • die Schriftgröße sowie die Anzahl der Einträge der Liste eines DropDown-Listenfeldes aus Daten Gültigkeit lassen sich nicht verändern dies wird mithilfe einer ComboBox aus der Steuerelemente-Toolbox simuliert, ohne dass die betreffende Zelle mit einer Gültigkeit formatiert wurde
  • bei Klick auf eine Zelle im Bereich C5:C35 wird die ComboBox eingefügt und dabei Schriftgröße 12 und Zeilenanzahl 14 festgelegt die Größe ist auf Breite der Spalten C:D, Höhe auf der aktiven + nächstfolgende Zeilen sowie Position auf linke obere Ecke activen Zelleim Code eingestellt
  • ListIndex wird auf 0 gesetzt, sodass der erste Wert ausgewählt ist - wird kein ListIndex gesetzt, entsteht ein Laufzeitfehler
  • Da jedoch in diesem Fall eine Auswahl des 1. Eintrages kein Change_Ereignis auslöst, wird durch ein zusätzliches Makro beim Erstellen der CombBox (gestartet mit Application.OnTime, da bei zur Laufzeit erstellen Steuerelementen anders nicht möglich), der 1. Eintrag in die Zelle geschrieben
  • bei Auswahl eines Wertes wird dieser in die Zelle eingetragen und die ComboBox wieder gelöscht
  • handelt es sich um Datumswerte, müssen diese in der ComboBox entsprechend formatiert werden, da andernfalls statt des Datums sein Zahlenwert angezeigt wird dies muss sowohl beim Erstellen der ComboBox als auch bei Änderung der Auswahl erfolgen
  • erstellte ComboBox erhält den Namen DropDownZoom, da für diesen Namen der weitere Code vorgegeben ist
  • Quellbereich für die ComboBox ist durch einen definierten Namen dynamisch festgelegt Name Liste: =BEREICH.VERSCHIEBEN(Tabelle1!$A$1;2;;ANZAHL2(Tabelle1!$A:$A);1)
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
kb/s/0086/faq/dropdownfeld-fuellen-aus-tabellenblatt.txt · Zuletzt geändert: 2021/04/24 20:53 von 127.0.0.1