Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
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
Inhaltsverzeichnis

Wert in Zelle per Makro, 2 Suchkriterien

Wert in Zelle per Makro, 2 Suchkriterien
24.08.2021 09:11:59
XF
Hallo liebes Forum,
ich möchte über ein Makro gerne eine bestimmte Zelle ansprechen und dort den Wert aus einer anderen Zelle eintragen lassen.
Option A: In Tabelle1 ist mein Suchkriterium A (A3) vorhanden und ein Wert dazu (C3). Nach diesem Suchkriterium soll das Makro in Tabelle2, Spalte A suchen und in der Zeile dann in Spalte D den Wert aus Tabelle 1 übertragen.
Das Ganze benötige ich auch mit zwei Suchkriterien, wie in Option B dargestellt. Also Suchkriterien B und C in Tabelle1, Suche nach diesen Kriterien in Tabelle2, Spalten B und C und Übertragung des Wertes dann in Spalte D.
Könntet ihr mir weiterhelfen, wie der entsprechende Code dazu aussehen würde?
Danke euch vielmals!!
https://www.herber.de/bbs/user/147769.xlsx

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert in Zelle per Makro, 2 Suchkriterien
24.08.2021 14:00:30
migre
Hallo!
In Deiner Bsp-Datei: https://www.herber.de/bbs/user/147774.xlsm
Code separat:

Sub VarianteA()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Tabelle1")
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Tabelle2")
Dim Such As Range: Set Such = WsQ.Range("A3")
Dim Wert As Range: Set Wert = WsQ.Range("C3")
Dim Liste As Range: Set Liste = WsZ.Range(WsZ.Cells(1, 1), WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp))
Dim Wo
Wo = Application.Match(Such, Liste, 0)
If Not IsError(Wo) Then
WsZ.Cells(Wo, 4) = Wert.Value
End If
Set Wb = Nothing: Set WsQ = Nothing: Set WsZ = Nothing
Set Such = Nothing: Set Wert = Nothing: Set Liste = Nothing
End Sub
Sub VarianteB()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Tabelle1")
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Tabelle2")
Dim SuchA As Range: Set SuchA = WsQ.Range("A7")
Dim SuchB As Range: Set SuchB = WsQ.Range("B7")
Dim Wert As Range: Set Wert = WsQ.Range("C7")
Dim Liste As Range, CheckKrit As Range, Wo
Application.ScreenUpdating = False
With WsZ
Set Liste = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(xlUp))
Set CheckKrit = Liste.Offset(, 4).Resize(Liste.Rows.Count, 1)
CheckKrit.FormulaR1C1 = "=RC[-3]&""-""&RC[-2]"
Wo = Application.Match(SuchA & "-" & SuchB, CheckKrit, 0)
If Not IsError(Wo) Then
.Cells(Wo + 1, 4) = Wert.Value
End If
CheckKrit.ClearContents
End With
Application.ScreenUpdating = True
Set Wb = Nothing: Set WsQ = Nothing: Set WsZ = Nothing
Set SuchA = Nothing: Set SuchB = Nothing: Set Wert = Nothing
Set List = Nothing: Set CheckKrit = Nothing
End Sub
LG Michael
Anzeige
AW: Wert in Zelle per Makro, 2 Suchkriterien
24.08.2021 17:13:47
Xenia
Hallo Michael,
vielen vielen Dank für den Code, genau so habe ich es mir vorgestellt!
Ich habe es gerade in meine Originaltabelle übertragen, wo das Suchkriterium jedoch in Zelle E14 steht und der Wert in N37 steht.
In der Zieltabelle ist das Suchkriterium dann wiederum in Spalte C und die Zielspalte ist AQ. Ich habe den Code daher wie folgt angepasst:
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Tabelle1")
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Tabelle2")
Dim Such As Range: Set Such = WsQ.Range("E14")
Dim Wert As Range: Set Wert = WsQ.Range("N37")
Dim Liste As Range: Set Liste = WsZ.Range(WsZ.Cells(3, 1), WsZ.Cells(WsZ.Rows.Count, 1).End(xlUp))
Dim Wo
Wo = Application.Match(Such, Liste, 0)
If Not IsError(Wo) Then
WsZ.Cells(Wo, 43) = Wert.Value
End If
Leider macht das Makro dann hier nichts - habe ich irgendwo einen Fehler drin und muss noch etwas anpassen?
Liebe Grüße
Xenia
Anzeige
AW: Wert in Zelle per Makro, 2 Suchkriterien
25.08.2021 11:08:06
migre
Hallo!
:-) - Deswegen IMMER Bsp-Dateien bereitstellen, die in der Struktur der produktiven Datei entsprechen, Xenia, dann erhältst Du gleich die Hilfe/den Code den Du brauchst, und musst nicht basteln bzw. der/die HelferIn doppelt arbeiten.
Hab jetzt nur schnell Deinen adaptierten Code überflogen, mE musst Du v.a. hier wie folgt anpassen:

Dim Liste As Range: Set Liste = WsZ.Range(WsZ.Cells(1, 3), WsZ.Cells(WsZ.Rows.Count, 3).End(xlUp))
Klappt?
LG Michael
AW: Wert in Zelle per Makro, 2 Suchkriterien
25.08.2021 14:00:57
Xenia
Du hast absolut Recht... das behalte ich mir für das nächste Mal im Hinterkopf!! :-)
Danke dir auf jeden Fall - es funktioniert nun bei einem Suchkriterium und ich probiere es gleich mit der Variante B aus.
LG
Xenia
Anzeige
AW: Wert in Zelle per Makro, 2 Suchkriterien
25.08.2021 14:38:14
Xenia
Hallo Michael,
doch mal die Bitte um Hilfe: Bei der Variante B mit zwei Suchkriterien stehen diese in Tabelle2 in den Spalten A und B. Der Wert soll wiederum in Spalte AQ eingetragen werden.
Könntest du mir nochmal einen Hinweis geben, wie das Makro entsprechend anzupassen ist?

Sub VarianteB()

Sub >
Danke dir vielmals!!

Eigentlich hab ich keine Lust mehr...
25.08.2021 14:57:27
migre
Xenia,
...denn auch hier ist es wieder so, dass Deine eigentlichen Anforderungen NICHT zur Problembeschreibung (Beispielmappe) passen - ich habe eigentlich keine Lust ein Problem 2x zu lösen!
Damit aber der 2. Code bei Dir läuft, mach bitte diesmal konkrete Angaben:
- In welchem Tabellenblatt, in welcher Zelle steht Suchkriterium 1
- In welchem Tabellenblatt, in welcher Zelle steht Suchkriterium 2
- In welchem Tabellenblatt, in welcher Zelle steht der zu übertragende Wert
- In welches Tabellenblatt soll der Wert eingetragen werden und in welchem Zellbereich sind dort die Einträge zu finden (C2:AQx?)
Danke und LG Michael
Anzeige
AW: Eigentlich hab ich keine Lust mehr...
25.08.2021 15:19:50
Xenia
Hallo Michael,
In welchem Tabellenblatt, in welcher Zelle steht Suchkriterium 1: Tabelle1, Zelle: E9
In welchem Tabellenblatt, in welcher Zelle steht Suchkriterium 2: Tabelle1, Zelle: E10
In welchem Tabellenblatt, in welcher Zelle steht der zu übertragende Wert: Tabelle1, Zelle: N37
In welches Tabellenblatt soll der Wert eingetragen werden und in welchem Zellbereich sind dort die Einträge zu finden (C2:AQx?):Tabelle2, die Suchkriterien stehen in den Spalten A (Suchkriterium 1) und B (Suchkriterium 2), der Wert muss eingetragen werden in Spalte AQ (also Zellbereich A2:AQ500).
Vielen Dank für deine Hilfe!!
Anzeige
OK, melde mich morgen, owT
25.08.2021 16:50:30
migre
So, VarianteB auf Deine Verhältnisse adaptiert...
26.08.2021 10:16:11
migre
Hallo,
...hier wie gewünscht, die VarianteB (mit 2 Suchkriterien) auf Basis Deiner Verhältnisse in der Produktivdatei: https://www.herber.de/bbs/user/147796.xlsm
So hätte zB auch Deine Bsp-Datei aussehen können ;-)
Code separat:

Sub VarianteNeuB()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Tabelle1")
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Tabelle2")
Dim SuchA As Range: Set SuchA = WsQ.Range("E9")
Dim SuchB As Range: Set SuchB = WsQ.Range("E10")
Dim Wert As Range: Set Wert = WsQ.Range("N37")
Dim Liste As Range, CheckKrit As Range, Wo
Application.ScreenUpdating = False
With WsZ
Set Liste = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 43)
Set CheckKrit = Liste.Offset(, 43).Resize(Liste.Rows.Count, 1)
CheckKrit.FormulaR1C1 = "=RC[-43]&""-""&RC[-42]"
Wo = Application.Match(SuchA.Value & "-" & SuchB.Value, CheckKrit, 0)
If Not IsError(Wo) Then
.Cells(Wo + 1, 43) = Wert.Value
End If
CheckKrit.ClearContents
End With
Application.ScreenUpdating = True
Set Wb = Nothing: Set WsQ = Nothing: Set WsZ = Nothing
Set SuchA = Nothing: Set SuchB = Nothing: Set Wert = Nothing
Set Liste = Nothing: Set CheckKrit = Nothing
End Sub
LG Michael
Anzeige
Kommt da auch Rückmeldung/Danke, oder wie?
27.08.2021 09:37:30
migre
AW: Kommt da auch Rückmeldung/Danke, oder wie?
27.08.2021 14:06:17
Xenia
Hallo Michael,
ich komme leider gerade erst dazu, wieder auf das Makro zu schauen.
Vielen herzlichen Dank für den Code!! :-) Die Beispieldatei sieht super aus. Ich komme leider erst am Wochenende dazu, das in meine Produktivdatei zu übertragen und auszuprobieren. Dann kommt nochmal eine Rückmeldung.
Schönes WE!
Na fein! Ja, gib Bescheid, schönes WE, lgm owT
27.08.2021 14:58:09
migre
AW: Na fein! Ja, gib Bescheid, schönes WE, lgm owT
29.08.2021 15:21:25
Xenia
Hallo Michael,
vielen Dank nochmal für den Code!!
Ich habe den Code jetzt auch in meiner Produktivdatei laufen lassen, eine Rückfrage habe ich noch:
Wenn der Code den Wert in die Spalte AQ in der Tabelle 2 schreibt, werden automatisch alle Einträge in der Spalte rechts daneben gelöscht (Spalte AR). Ich nehme an, dass liegt an dem clearcontext-Befehl. Kann man das irgendwie weglassen, also etwaige Werte in der Spalte AR stehen lassen?
Danke und viele Grüße!
Anzeige
Zu Deiner Rückfrage, mein letzter Beitrag!
30.08.2021 09:33:11
migre
Guten Morgen Xenia!
Und wieder der Plattenspieler: Ich kenne Deine Produktivdatei nicht, auch nicht schematisch im Sinne einer Beispielmappe. Dh im muss mich auf Deine Angaben verlassen, und wenn Deine Angaben die Verhältnisse in der Produktivdatei nicht exakt (!) wiederspiegeln, dann kommt es zu solchen "Fehlern".
Ich bin, aufgrund Deiner letzten Infos, von der Tatsache ausgegangen, dass Deine Daten im Bereich A2:AQx stehen, wobei x die letzte gefüllte Zelle in A:A wäre. Für die Suche mit 2 Kriterien setze ich hier auf einen Trick: Ich mache aus Deinen 2 Suchwerten im Grunde genommen einen, d.h. aus "45987" und "69898" wird für die Suche "45987-69898" (mit dem Bindestrich). Dieser Wert/Begriff ist natürlich in Deiner Ziel-Tabelle nirgends vorhanden, d.h. auch hier muss ich irgendwie die durchsuchten Werte in A:A und B:B irgendwo kombiniert auflisten, um nach dem (kombinierten) Suchwert zu suchen.
Aufgrund Deiner Bereichsangabe gehe ich also davon aus, dass die auf AQ folgende Spalte (=AR) leer ist; mein Code setzt dann kurzzeitig eine Zellformel in AR2:ARx, wobei x wieder der letzten gefüllten Zelle in A:A entspricht. Diese Formel macht nichts anderes, als die jeweiligen EInträge in A2:Bx zeilenweise zu kombinieren, nach obigem Muster, also bspw. (in meiner Bsp-Mappe) [A8] "42554" und [B8] "27487" wird in [AR8] zu diesem Formelergebnis "42554-27487".
Der Code durchsucht dann die Formelegebnisse in AR2:ARx und schreibt, wenn der Suchwert gefunden wird, in die entsprechende Zeile in AQ den Ziel-Wert. Danach wird die Formel in der Hilfsspalte AR gelöscht, dh der gesamte Bereich AR2:ARx, über das von dir angesprochene .ClearContents
Auf Deine Frage bezogen: Kann man das irgendwie weglassen, also etwaige Werte in der Spalte AR stehen lassen?
Ja, wenndie Hilfsformel anstelle AR in eine andere Spalte geschrieben wird. Dh soll AR beibehalten werden, aber die Hilfsformel kurz in AS2:ASx geschrieben werden (und danach dieser Bereich gelöscht werden), dann sind folgende Anpassungen erforderlich (fett):

Set CheckKrit = Liste.Offset(, 44).Resize(Liste.Rows.Count, 1)
CheckKrit.FormulaR1C1 = "=RC[-44]&""-""&RC[-43]"
Die konkreten Änderungen im Code in Deiner Produktivdatei überlasse ich nun Dir, mit der hier beschriebenen Logik solltest Du das hinbekommen. Dies ist mein letzter Beitrag in diesem Faden.
LG Michael
Anzeige
AW: Zu Deiner Rückfrage, mein letzter Beitrag!
30.08.2021 18:14:25
Xenia
Vielen Dank für deinen Hinweis zur erneuten Anpassung des Codes. Und entschuldige die Umstände!

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige