2015-01-16 7 views
7

Ich habe viele Dropdown-Listen in meinem Blatt, die ich über das Menü Data>Data Validation>list eingerichtet habe. Gibt es einen Massenweg in VBA, um alle auf Standardwerte zu setzen? Standardmäßig meine ich den ersten Wert, der in einer Liste deklariert wird.Einstellung von Standardwerten in der Dropdown-Liste Datenüberprüfung

BTW. Ich habe eine Quelle für eine Drop-Down-Liste in A1 als Bereich durch die Formel bis:

=OFFSET(C1;0;0;1;COUNTA(C1:Z1)) 

Gäbe es eine Möglichkeit geben, diese Formel in B1 zu setzen und sie in der Dropdown-Liste Quelle als =INDIRECT(B1) nur eine Zelle zeigt nennen? (Dies funktioniert nicht).

+0

Meinst du den Wert in B1 SET den Standardwert für alle Dropdowns? – peege

+0

Standardwerte sind sowohl mit VBA als auch mit einer Formel möglich. Es gibt jedoch keine eingebaute 'eval'-Funktion, so dass Sie keinen Text einer Funktion in einer Zelle schreiben und an anderer Stelle ausführen können. Sie können jedoch einen benannten Bereich mit dem' OFFSET' angeben und '= my_named_range' in Daten verwenden Validierung, wäre das ausreichend? – Aprillion

+0

@peege Nein. Der Standardwert ist in C1. In D1, E1, F1 usw. gibt es andere Werte, die ein Benutzer aus der Dropdown-Liste (in A1) auswählen kann. C1 ist ein erster Array-Wert. –

Antwort

2

Meine Lösungsidee basiert auf einem Stil einer Zelle.

(1) Fügen Sie einen neuen Stil für Zellen mit Dropdown-Listen hinzu. Ich nannte es "Dropdown".

style

(2) Wenden Sie den Stil für die Zellen, die Sie Drop-Down-Listen haben werden. Hier ist es B2.

(3) Validierungselemente für Ihre Dropdown-Liste einrichten. Ich lege sie in die Zellen E2: G2.

validation

(4) Wenn Sie in Daten stellen dynamische Validierungsliste haben wollen> Datenvalidierung> Quelle: =OFFSET($E2;0;0;1;COUNTA($E2:$K2)) oder alternativ einen benannten Bereich für die erklären, wie Aprillion beraten. Es ist sehr nützlich. In meinem Beispiel kann ich ein neues Validierungselement in H2 hinzufügen und es wird automatisch in die Validierungsliste aufgenommen.

(5) Führen Sie ein Makro aus, wenn Sie alle Zellen mit einem Dropdown-Stil auf den Standardwert einrichten möchten. In meinem Fall ist der Standardwert '- Choose from the list -. Dieser Wert wird auch dann eingerichtet, wenn er nicht in der Validierungsliste steht.

Sub DropDownListToDefault() 
    Dim oCell As Range 
    Dim ACell As Range 
    Set ACell = ActiveCell 

    For Each oCell In ActiveSheet.UsedRange.Cells 
     If oCell.Style = "Dropdown" Then 
      oCell.Value = "'- Choose from the list -" 
     End If 
    Next 

    ACell.Select 
End Sub 

Nach dem Ausführen des Makros Sie die folgende Wahl haben: enter image description here

Wenn Sie einen Benutzer mögen etwas aus der Dropdown-Liste zu wählen, ist es sehr einfach, den Standardwert in der Weiterverarbeitung zu übernehmen .

3

ein von Spalte C bis Z in der aktuellen Reihe versetzt zu benutzen:

  • wählen beliebige Zelle in der ersten Reihe
  • einen benannten Bereich erstellen (Formulas>Name Manager>New...) mit Name: z.B validation und Refers To: würde Ihre Formel:

    =OFFSET($C1;0;0;1;COUNTA($C1:$Z1)) 
    
    • Englisch-locale Benutzer verwenden , statt ; als Listentrenn
  • wählen Zellen und anwenden Data Validation> Zulassen: List, Quelle: =validation

Wenn Sie eine Zelle in der zweiten Zeile auswählen und die Name Manager beobachten, werden Sie feststellen, dass die Formel relative Verweise auf die aktuelle Zeile verwendet.


Um Zellen mit dem Standardwert füllen Sie folgende Formel verwenden können (wie eine normale Formel in einer Zelle, es hat nichts mit dem Datenvalidierungsfunktion zu tun, was auch immer):

=INDEX(validation, 1) 

und wenn Sie tatsächlich einen Wert aus der Dropdown-Liste auswählen, wird die Formel durch den ausgewählten Wert überschrieben. Wenn Sie also das erste Element in Ihrer Liste ändern, ändert sich der Wert für explizit ausgewählte Zellen nicht.

+0

Vielen Dank dafür. Was ist, wenn Sie alle Dropdown-Listen auf Standardwerte setzen? Jeder Wert in der Spalte A sollte Werte aus der Spalte C annehmen. –

+0

das ist bereits in meiner Antwort beantwortet - haben Sie Probleme bei der Implementierung der vorgeschlagenen Lösung? – Aprillion

+0

Es funktioniert, wenn Sie die Validierung als '= Validierung' einrichten. Was ist der Grund für die Verwendung von '= INDEX (Validierung, 1)'? –

Verwandte Themen