Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
496to500
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
496to500
496to500
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Code für dynam. Suche+Drop Down

VBA Code für dynam. Suche+Drop Down
07.10.2004 09:24:53
Caspar
Hallo liebe Excel Freunde und Gemeinde
Habe bereits gestern dazu einen Thread gemacht, da ich gehofft hatte, dass es eine Lösung ohne VBA gibt.... aber dem scheint nicht so zu sein, deswegen an die VBA Profis, ob Sie mir weiterhelfen können wie man das machen könnte?!
*************************************************
Man soll in der Zelle (Bspw. B2) einen Text eingeben können (relativ beliebig) und je nach Eingabe in dieser Zelle eine konkrete Auswahlliste in der nächsten Zelle (resultierend auf der Eingabe in B2) bekommen!!!!
Klar?
Vielleicht hilft ein Besiepiel?
Ich gebe in B2 den Text „Bett“ ein und will nun dass er mir in Zelle B3 ein Auswahlfeld erstellt, wo alle Daten angezeigt werden (dynamisch?!) die mit „Bett“ anfangen oder das Wort „bett“ enthalten.....(diese DB liegt in Mappe 2...)
Also eine Auswahlliste mit Krankenbett, Schlafbett, Bettgestell....usw.
Habt ihr eine Idee?
So ne Auswahlliste kann man ja mit Tricks über Gültigkeit /Liste machen....
z.B:
=BEREICH.VERSCHIEBEN(alles_4Kz;1;VERGLEICH(F23;ueberschrift_4Kz;0)-1;ANZAHL2(INDEX(alles_4Kz;;VERGLEICH(F23;ueberschrift_4Kz;0)))-1;1)
Aber das geht nur wenn man ganze Wörter hat als Eingabe/Auswahl und man einen Bereich bennennt!

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code für dynam. Suche+Drop Down
Boris
Hi Caspar,
Aber das geht nur wenn man ganze Wörter hat als Eingabe/Auswahl und man einen Bereich bennennt!
Das geht auch mit Teilwörtern.
Beispiel:
In Tabelle2 , A1:A100 stehen Deine Daten. In B2 der Tabelle1 gibst du deinen Suchbegriff ein.
Jetzt brauchst du eine Hilfsspalte - im Beispiel Spalte D in Tabelle1.
Dort schreibst du in D1 folgende Arrayformel und kopierst sie so weit runter, wie maximal Treffer vorkommen können (stör Dich nicht an #ZAHL!):
{=INDEX(Tabelle2!A:A;KKLEINSTE(WENN(ISTZAHL(SUCHEN(B$2;Tabelle2!A$1:A$100));ZEILE($1:$100));ZEILE(A1)))}
Dann:
Einfügen-Name-Definieren, Name: Liste
Bezieht sich auf:
=INDIREKT("Tabelle1!D1:D"&ANZAHL2(Tabelle1!$D:$D)-ZÄHLENWENN(Tabelle1!$D:$D;#ZAHL!))
In B3 soll die Auswahlliste zur Verfügung stehen.
Dann für B3 unter Daten-Gültigkeit-Liste:
=Liste
Die Hilfsspalte (hier: D) kannst du ausblenden.
Und fertig.
Grüße Boris
http://www.excelformeln.de
Anzeige
Nachtrag w/Array-Formel:
Boris
die {geschweiften Klammern} außenrum nicht mit eingeben, sondern die Formeleingabe mit Strg-Shift-Enter abschließen. Das erzeugt sie.
AW: Nachtrag w/Array-Formel:
07.10.2004 10:29:30
Caspar
Vielen vielen Dank Boris, es klingt "complicated", aber ich werde es mal versuchen und Dir bescheid geben!!!
Vielen Dank auf jeden Fall schon/nochmal
Caspar
AW: Nachtrag w/Array-Formel:
07.10.2004 11:32:56
Caspar
Hallo Boris
ich habe leider den Fehler noch nicht gefunden, irgendwie spuckt der immer nur der4n Wert aus A1^aus....?!
Lade das Ding mal hoch, dann kannst ja mal schauen was falsch ist?!
https://www.herber.de/bbs/user/11780.xls
DANKE im Voraus!!!!!!
Anzeige
AW: Nachtrag w/Array-Formel:
Caspar
https://www.herber.de/bbs/user/11782.xls
So hast du dir das gedacht oder?
Wahnsinn super, wie kommt auf sowas, der Hammer :)
Sorry, hab die "{}" vergessen, geht jetzt!!!!
Danke nochmal!
Besser mit VBA (weil performanter)
Boris
Hi Caspar,
ich hab noch ne VBA-Variante im Angebot. Die ist wesentlich perfomanter als die Formellösung.
Mit Blick auf deine vorhandene Tabelle mach folgendes:
Formeln in Spalte D komplett löschen.
Rechtsklick auf den Tabellenreiter "Tabelle1" - Code anzeigen auswählen.
Das rechte weisse Fenster komplett leeren (falls es nicht eh schon leer ist) und dort diesen Code komplett reinkopieren:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address(0, 0) <> "B1" Then Exit Sub
Dim Suchbereich As Range, Suchbegriff As Variant
Dim C As Range, fAddr As String, lRow As Long
Set Suchbereich = Worksheets("Tabelle2").[a:a]
Suchbegriff = Me.[b1]
lRow = 1
Me.[d:d].Clear
With Suchbereich
Set C = .Find(Suchbegriff, lookat:=xlPart, MatchCase:=False)
If Not C Is Nothing Then
fAddr = C.Address
Do
Me.Range("D" & lRow) = C
lRow = lRow + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> fAddr
End If
End With
End Sub

VBA-Editor wieder schließen.
Und dann gib in B1 mal nen Suchbegriff ein.
Grüße Boris
Anzeige
? Zusatz VBA
Caspar
Jetzt muss ich doch nochmal nerven...
Wie kann man den VBA Code umschreiben, dass diese tolle Suche nicht nur für den Eingabebereich "B1" gilt, sondern für alle Zeilen in Spalte "B" bzw. B1 bis B5000!?!!
Nochmals: Es ist eine ARRAY-Formel
Boris
Hi Caspar,
diese Formeln werden nicht mit Enter allein, sondern mit gleichzeitig Strg-Shift-Enter eingegeben. Dann erscheinen außenrum automatisch die {geschweiften Klammern}.
Zudem musst du in deiner Beispieldatei auch Bezug auf B1 (und nicht B2) nehmen, da dort der Suchbegriff eingetragen wird - und die Liste geht nicht bis Zeile 2000, sondern 2164:
Also in D1:
{=INDEX(Tabelle2!A:A;KKLEINSTE(WENN(ISTZAHL(SUCHEN(B$1;Tabelle2!A$1:A$2164));ZEILE($1:$2164));ZEILE(A1)))}
und runterkopieren.
ABER:
Da deine Liste eben ziemlich lang ist (Zeile 2164) und du diese Formel dann auch dementsprechend oft runterkopieren musst (z.B. Suchbegriff "Meß" ergibt schon 122 Treffer), geht das sehr zu Lasten der Performance!!!
Aber probier´s selbst mal aus.
Grüße Boris
Anzeige
AW: Nochmals: Es ist eine ARRAY-Formel
Caspar
Danke Boris, der Fehler mit B1 habe ich bereits bemerkt und ging dann auch gut!
Du hast aber Recht bei sovielen Vergleichen macht es vielleicht wirklich mehr Sinn mit VBA?! Werde das gleich mal testen und hoffe ich bekomme das hin da ich VBA Mega Anfänger Bin!!! Aber Dir herzlichen Dank einmal mehr für den tollen Support!
Beste Grüße
Caspar
AW: Nochmals: Es ist eine ARRAY-Formel
Caspar
Jetzt muss ich doch nochmal nerven...
Wie kann man den VBA Code umschreiben, dass diese tolle Suche nicht nur für den Eingabebereich "B1" gilt, sondern für alle Zeilen in Spalte "B" bzw. B1 bis B5000!?!!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige