Frage von DJBaem, 146

Excel VBA durch loop wert suchen, finden und einfügen?

Hallo Community,

ich benötige diesmal folgenden VBA Code:

Der Code soll in Tabelle 1 bei der Zelle C21 den Wert nehmen und mit diesem Wert dann in Tabelle 2, Spalte A nach dem selben Wert suchen. Hat das Makro nun den Wert in der Spalte A der Tabelle 2 gefunden, dann soll das Makro den wert aus der Zelle rechts daneben nehmen und diesen Wert in Tabelle 3 auf Zelle A1 einfügen.

Hoffe ich hab das jetzt verständlich formuliert. :D

Hat hier jemand eventuell Ahnung, wie das genau funktionieren kann?

Ich danke schonmal im Voraus für alle Antworten. :)

LG Benny

Expertenantwort
von schmiddi1967, Community-Experte für Excel, 54

Muss das jetzt unbedingt per Makro sein?

Falls nicht würde schon folgende Formel in Tabelle 3 in A1 reichen:

=WENN(ISTNV(SVERWEIS(Tabelle1!C21;Tabelle2!A:B;2;0));"";SVERWEIS(Tabelle1!C21;Tabelle2!A:B;2;0))

Falls unbedingt als Makro musst du nochmal Bescheid sagen.

Kommentar von DJBaem ,

Glaube schon, dass es ein Makro sein muss.
Es geht nämlich darum:
In Zelle A1 (Tabelle3) muss eine E-Mailadresse eingefügt werden.

Wenn in Zelle C1 der Name "Max Mustermann" steht, dann muss er in Tabelle 2, Spalte A nach Max Mustermann gesucht werden. Wurde Max Mustermann gefunden, dann steht rechts daneben die E-Mailadresse von Max Mustermann. Da ich ein Makro habe, welches automatisch eine Mail raus schickt, muss vorher das Makro laufen, welches auch die richtige E-Mailadresse einfügt. :/

Kommentar von DJBaem ,

Wobei... Das könnte funktionieren, ich teste es gleich einmal :) Danke :)

Kommentar von DJBaem ,

Ne, so funktioniert es leider nicht ganz :/
Gibt es diese Variante auch so, dass bei Tabelle 1 der erste angezeigte Wert genommen wird, der unter der Zelle C20 angezeigt wird?

Kommentar von DJBaem ,

Oder gibt es eine Formel welche auslesen kann, nach welchem Name ich in Tabelle 1 Zelle C20 gefiltert habe?

Kommentar von schmiddi1967 ,

Also welche Zelle ist nun was??

Erst schreibst du Zelle C21, dann in einer Antwort C1 und jetzt willst du einen gefilterten Wert aus C20.

Das es nicht so einfach geht liegt natürlich daran das du dann ja keine richtig Email Adresse da drin hast, dass musst du doch gleich erwähnen :))

Sobald ich weiß welche Zelle dann nun den Namen erhält schaue ich mal was ich für dich tun kann.

Kommentar von DJBaem ,

Problem ist folgendes:
Ich habe in der Zeile 20 eine "Auswertung" mit Filtern.
Filtere ich jetzt in Zelle C20 nach einem Name, der Name aber erst in Zeile 50 auftaucht, dann ist beim Filtern nicht direkt C21 der Wert sondern in dem Fall in der Zelle C50.

Also am einfachsten ist es glaub ich, wenn die Formel oder das Makro herausfinden kann, welcher Name in Zelle C20 gefiltert wurde und nach diesem Name dann in Tabelle 2 Spalte A sucht.

Wenn das aber nicht geht, dann müsste es irgendwie machbar gemacht werden, dass er beim filtern einfach die erste angezeigte Zelle unter C20 nimmt.

Hoffe ich hab das jetzt ordentlich formuliert. *gg*

Kommentar von schmiddi1967 ,

Das bedeutet also das man schon nach dem gefilterten Namen aus Zelle C20 in Tabelle 2 suchen könnte (wenn ich das jetzt richtig verstanden habe)

Dann könntest du in Tabelle 3 in A1 mit folgender Formel zum Erfolg kommen (hier habe ich jetzt das mailto als Hyperlink mit drin), damit sollte auch dein Makro klar kommen:

=HYPERLINK("mailto:"&WENN(ISTNV(SVERWEIS(Tabelle1!C20;Tabelle2!A:B;2;0));"";SVERWEIS(Tabelle1!C20;Tabelle2!A:B;2;0)))


Kommentar von DJBaem ,

Den Hyperlink brauch ich in der Formel nicht, da ja noch andere Mailadressen dazu kommen über das Makro...

Also müsste ich wohl nur folgendes nehmen, oder?

=WENN(ISTNV(SVERWEIS(Tabelle1!C20;Tabelle2!A:B;2;0));"";SVERWEIS(Tabelle1!C20;Tabelle2!A:B;2;0)))
Kommentar von schmiddi1967 ,

Sorry aber jetzt verstehe ich gar nichts mehr!

Erst gebe ich dir die Formel für Zelle C21 weil du C21 haben wolltest, dann schreibst du nur "Geht nicht" anstatt das näher zu beschreiben. Dann redest du von Email absenden (Emailadresse), wo ich dann den Hyperlink per mailto mit einbaue und jetzt fragst du mich ob die Formel ohne Hyperlink nicht reicht ?????

Wenn es dir jetzt nur um die Zelle C20 geht dann diese:

=WENN(ISTNV(SVERWEIS(Tabelle1!C21;Tabelle2!A:B;2;0));"";SVERWEIS(Tabelle1!C21;Tabelle2!A:B;2;0))
Kommentar von DJBaem ,

Naja ich habe ein Makro, welches durch den Klick auf einen Button in Outlook eine neue Nachricht erstellt, mit einem bestimmten Inhalt.
Als Empfänger nimmt das Makro automatisch den Wert aus Tabelle 3 (Zelle A1 und B1).

Da Tabelle 3 Zelle A1 aber immer der Empfänger sein soll, welcher in Tabelle 1 beim Filter aus C20 sein soll, brauch ich hier nur eine Formel oder Makro, welche dies eben macht. Sorry das ich so kompliziert denke und es von mir gebe *gg*

Kommentar von schmiddi1967 ,

Ja genau das macht ja jetzt meine Formel für Tabelle 3 A1

Kommentar von DJBaem ,

Ne, dass funktioniert irgendwie nicht. :(

Kommentar von schmiddi1967 ,

OK, dann gehen wir mal auf Fehlersuche ;))

Ich gehe mal von Folgendem aus:

Du hast 3 Tabellenblätter (Tabelle1, Tabelle2 und Tabelle3), in Tabelle1 filterst du in Zelle C20 die Namen (die wo ich immer noch nicht weiß in welchem Bereich sie stehen), in Tabelle 2 (Tabellenblatt 2 ) stehen im Bereich Spalte A die Namen und in Spalte B die Emailadressen.

In Tabellenblatt 3 (Tabelle3) möchtest du jetzt in Zelle A1 die Emailadresse haben welche in Tabellenblatt 2 (Tabelle2) im Bereich Spalte B in abhängikkeit vom gesuchten Namen aus Tabelle 1 C20 in Tabelle 2 Spalte A gefunden wird. RICHTIG?

Genau das macht meine Formel, wenn das jetzt nicht klappt kann es nur daran liegen das die Bereiche nicht stimmen oder du nicht 3 Tabellenblätter hast.

Dann musst du mir bitte genau mit Spalten Zeilen und Tabellenblätter sagen was wo steht.

Kommentar von DJBaem ,

Das was du sagst stimmt genau. Aber ich habe 4 Tabellen.
Tabelle 1, Tabelle 3 und Tabelle 4 sind die, die hier als Tabelle 1, 2 und 3 bezeichnet sind. In Tabelle 2 ist nichts wichtiges drinnen, dort sind nur Erklärungen eingetragen.

Wenn es für die Formel relevant ist, wie viele Tabellenblätter es sind, dann sorry dass ich nicht erwähnte, dass es mehr sind :)

Habe deinen Code aber immer umgeschrieben auf die jeweilige Tabellennummer :)

Kommentar von DJBaem ,

Und ja, in Tabelle 1 klicke ich in der Zelle C20 auf den Pfeil um nur alle Daten von einem Name anzeigen zu lassen.
Diese Namen stehen dann ab C20 abwärts in jeweils der Zeile, in der dieser Name vorkommt.

Kann also gut sein, dass der Name Max Mustermann dann in Zelle C30, C31, C36, C50, und sonst noch in vielen anderen Zellen der C-Spalte steht.

Kommentar von schmiddi1967 ,

Kannst du mir mal bitte Bilder deiner Aufmachung zukommen lassen, so wird das glaube ich nichts. Du kannst mir diese ja mal an die Emailadresse in meinem Profil senden, denn irgendwas stimmt hier nicht.

Ich bin mir mit deinem Filtern nicht so ganz sicher. Kann es sein Das du Dropdown meinst.

Kommentar von DJBaem ,

Beim oben genannen Link siehst du das Bild.
Ab C21 fangen die Namen an, hier wurde aber nach Max Mustermann gefiltert und der steht erst ab Zelle C50 in der Liste, daher sollte entweder der gefilterte Name genommen werden oder eben der Name, der unter C20 angezeigt wird, wobei ausgeblendete Zellen nicht miteinbezogen werden sollen

Kommentar von schmiddi1967 ,

Na dat kann ja nichts werden, ich dachte das du nach Zelle C20 filterst und nicht das deine Tabelle bei C20 begint. Da kannst du 1000 Formeln nehmen, das wird auch nichts mit Makros.

Nach deinem von Hand gesetzten Filter kann man nicht suchen.

Kommentar von DJBaem ,

Achsoooo. :/ Ok, dann muss ich mir eine neue Methode überlegen *gg*

Kommentar von schmiddi1967 ,

Ist es dir möglich irgendwo ein Dropdownmenü für Spate C anzulegen? Wenn ja könnte man den Filter und die Auswahl für die Suche über ein Makro ermitteln lassen, aber ohne Suchfeld geht es wie gesagt auch nicht mir einem Makro.

Kommentar von Ninombre ,

Ein Ansatz wäre auf die Sichtbarkeit der Zeile abzufragen. Macht nur Sinn wenn der Treffer eindeutig ist. 

Ich habe kein Excel auf dem tablet. 

For i=21 to 100

If rows(i).hidden=false then

Tabelle3. Range("a1"). Value=worksheetfunction.vlookup(range("c"&i).value,tabelle2.range("a1:b100"),2,false)

Exit for

Next

Muss ich mir morgen aber noch mal anschauen. 

Kommentar von schmiddi1967 ,

Das ist gut DH! Ninombre

Klappt 1A, ich habe jetzt einfach das so als Makro umgestellt das zu deinen Tabellen passt:

Sub Suchen()
For i = 21 To 100

If Rows(i).Hidden = False Then

Tabelle4.Range("a1").Value = WorksheetFunction.VLookup(Range("c" & i).Value, Tabelle3.Range("a1:b100"), 2, False)

Exit For
End If
Next
End Sub

und dann eine Schaltfläche für das Makro oder eben per ALT+F8 aufrufen.

Ich gehe auch mal davon aus das alle Namen die gefiltert sind auch in Tabelle2 (Tabelle3 jetzt) mit Emailadresse stehen.

Da wäre eine eigene Antwort wohl hilfreicher als meine :((

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten