Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
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

VBA - Tabellenvergleich

VBA - Tabellenvergleich
09.05.2018 17:33:25
cami
Hallo zusammen,
ich kämpfe momentan mit mit einer VBA-Funktion, welche ich gerne erstellen würde.
Ich habe in einer Arbeitsmappe mehrere Arbeitsblätter (Tabellen).
Die VBA-Funktion soll alle gefüllten Zellen der Spalte A aus Tabelle 1 durchgehen und schauen, ob der Zellwert in Spalte D der Tabelle 2 vorhanden ist.
Wenn der Wert vorhanden ist, soll aus der jeweiligen Zeile der Tabelle1 der Zellwert aus Spalte D in die Zeile der Tabelle 2 in Spalte E geschrieben werden.
Wenn der Zellwert in Tabelle2 nicht vorhanden ist, soll nichts passieren.
Ich hoffe ich habe mein Problem einigermaßen gut beschrieben und mir kann geholfen werden.
Vielen Dank!
cami

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Tabellenvergleich
09.05.2018 17:44:44
Werner
Hallo Cami,
hört sich für mich wie ein ganz normaler S-Verweis an.
Gruß Werner
AW: VBA - Tabellenvergleich
09.05.2018 17:52:18
cami
Hallo Werner,
danke für die fixe Antwort!
Damit habe ich es auch versucht, allerdings scheitere ich an:
1. den SVerweis in eine for each-Schleife zu setzen
2. ich weiß zwar, wie ich der normale SVerweis funktioniert -- sprich ich kann mir den Wert, den ich gerne mit dem Wert der Spalte D aus Tabelle1 überschreiben wollen würde ausgeben lassen. Ich weiß aber nicht wie man diesen Wert aus Tabelle2 dann mit dem Wert der Spalte D aus Tabelle1 tätsächlich überschreibt
Verstehst du/ihr mein Problem?
Viele Grüße
cami
Anzeige
Ehrlich gesagt nein...
09.05.2018 20:28:01
Werner
Hallo Cami,
...las doch mal deine Mappe hoch in der du dein Problem aufzeigst.
Gruß Werner
AW: Ehrlich gesagt nein...
09.05.2018 20:45:16
cami
Hallo Werner,
anbei die Mappe.
Ich habe eine Beispieldatei erstellt, da ich die echt Mappe nicht hochladen möchte.
Zusammengefasst:
Die aktuellen Stände der Objekte stehen in Tabelle2.
Ich möchte, dass in Tabelle1 alle Stände für die Einträge in Tabelle 2 sind, überschrieben werden.
Die restlichen sollen unberührt belassen werden.
Habe meine Datei unter folgendem Link hochgeladen:
https://www.herber.de/bbs/user/121523.xlsx
Dankeschön
cami
Anzeige
AW: Ehrlich gesagt nein...
09.05.2018 21:25:25
Werner
Hallo Cami,
teste mal:
Public Sub Aktualisieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 4).End(xlUp).Row
.Range(.Cells(2, 6), .Cells(loLetzte, 6)).FormulaLocal = _
"=WENNFEHLER(SVERWEIS(D2;Tabelle2!A:B;2;FALSCH);E2)"
.Range(.Cells(2, 6), .Cells(loLetzte, 6)).Value = _
.Range(.Cells(2, 6), .Cells(loLetzte, 6)).Value
.Range(.Cells(2, 6), .Cells(loLetzte, 6)).Copy .Cells(2, 4)
.Columns(6).ClearContents
End With
Application.ScreenUpdating = True
Das Makro ermittelt im Blatt 1 Spalte D die letzte belegte Zeile, scheint dann die S-Verweis Formel in Spalte F ersetzt dann in Spalte F die Formel durch den jeweiligen Wert, kopiert dann Spalte F auf Spalte D und leert dann Spalte F.
Konnte nicht testen und kann auch nicht dafür garantieren, dass keine Schreibfehler im Code sind. Hab im Moment nur ein Tablet zur Verfügung und da ist nix mit Makros.
Gruß Werner
Anzeige
AW: Ehrlich gesagt nein...
09.05.2018 21:49:07
cami
Hi Werner,
das hat super geklappt! Vielen herzlichen Dank schon mal!
2 Sachen noch:
- Wie definiere ich, dass nicht alle Zeilen durchmacht werden, sondern nur bis 6ten Zeile von oben (Also von Ende, so wie in deiner Methode, bis 6.te Zeile von oben? So wird nämlich meine Kopfzeile zerschossen
- Die Felder, für die in Tabelle 2 nichts gefunden wird, waren vorher leer - jetzt sind sie mit einer 0 belegt.
Kann man den Code so abändern, dass diese Felder weiterhin leer bleiben (und ihre Formatierung nicht ändern - sind Zwischenüberschriften)?
Vielen Dank
cami
AW: Ehrlich gesagt nein...
09.05.2018 21:54:10
cami
Hallo Werner,
ein kurzer Zusatz: Ich habe eben erst gesehen, dass in deiner Methode der WennFehler eigentlich dann E2 ausgeben soll, sprich die Zelle soll so bleiben, wie sie ist, das funktioniert leider nicht, deshalb meine Frage oben mit den 0en!
Eine Kleinigkeit noch:
Wenn die Tabelle2 keinen festen Namen hat, aber immer an letzter Stelle steht, kann ich dann in der SVERWEIS-Methode Sheets.Count verwenden? bzw. wie ist da genau der richtige Syntax?
Sorry für die ganzen Fragen
Cami
Anzeige
AW: Ehrlich gesagt nein...
10.05.2018 10:16:28
Werner
Hallo Cami,
hier jetzt noch mti der Änderung bzgl. des Quellblattes.
Public Sub Aktualisieren()
Dim loLetzte As Long, wsQuelle As String
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 4).End(xlUp).Row
wsQuelle = ThisWorkbook.Worksheets(Sheets.Count).Name
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).FormulaLocal = _
"=WENNFEHLER(SVERWEIS(D6;" & wsQuelle & "!A:B;2;FALSCH);"""")"
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Value = _
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Value
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Copy
.Cells(6, 4).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Columns(6).ClearContents
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: Ehrlich gesagt nein...
09.05.2018 22:01:13
Werner
Hallo Cami,
Public Sub Aktualisieren()
Dim loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 4).End(xlUp).Row
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).FormulaLocal = _
"=WENNFEHLER(SVERWEIS(D6;Tabelle2!A:B;2;FALSCH);"""")"
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Value = _
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Value
.Range(.Cells(6, 6), .Cells(loLetzte, 6)).Copy
.Cells(6, 4).PasteSpecial Paste:=xlPasteValues
Applikation.CutCopyMode = False
.Columns(6).ClearContents
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige