Kopieren aus anderer Tabelle


josef24

Erfahrenes Mitglied
#1
Guten Tag. Ich versuche aus der Tabelle PLZ die Plz aus Spalte "A" in die Tabelle "ArbDat" Spalte "G" einfügen zu lassen, wenn der jeweilige Ort in PLZ Spalte "C" mit dem Ort in Tabelle ArbDat Spalte "H" identisch ist. Meine bisherige Formel lautet:

Code:
=WENN(H2<>"";INDEX(PLZ!$A:$A;VERGLEICH(H2;PLZ!$C:$C;0));"")
. Da mir der Code aber öfters durch andere beschädigt/ gelöscht in Unkenntnis wird, hätte ich das gerne mit einem VBA Code erledigt. (Das findet nicht jeder).

Nun mein Versuch, wofür ich mal Unterstützung bräuchte (Anhang). Er löscht mir lediglich die Spalte "G", fügt aber nichts Neues ein. (Modul3)

Code:
Option Explicit
Sub PLZ()
Dim g As Long  ' wozu brauchst du die Variable h?
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("ArbTab")
With wks.Cells(2, 7).Resize(wks.Cells(Rows.Count, 8).End(xlUp).Row - 1)
.FormulaR1C1 = "=iferror(vlookup(rc[3],PLZ!r1c1:r8c2,2,0),"""")"
.Value = .Value
End With
End Sub
Danke und Gruß Josef
 

Anhänge

Zvoni

Erfahrenes Mitglied
#2
Errrrrr... wieso aktivierst du nicht einfach einen Blatt-Schutz für die genannte Spalte?
Du kannst in einem Blatt bestimmte Zellen schützen, der Rest bleibt aber offen
 

josef24

Erfahrenes Mitglied
#3
Danke, an die Möglichkeit hatte ich auch gedacht. Weis aber nicht, ob ich Probleme bekomme, wenn ich z. B. Tabelleninhalte kopieren oder aktualisieren muss. Wird dann nicht nach dem entsprechenden Passwort gefragt, was dann wiederum kontraproduktiv wäre. Die Anwendung der Codes in VBA ist meinen Kollegen nicht bekannt, daher auch kein Risiko.
 

Zvoni

Erfahrenes Mitglied
#4
Mal von dem her abgesehen, dass du den VBA-Code per Passwort unabhängig von der Arbeitsmappe schützen kannst.
Muss ich mir mal ansehen. hab momentan aber kaum Zeit

EDIT: Wobei das Passwort eines Mappen-, Blatt- oder VBA-Schutzes auch nicht mehr als 2 Minuten dauert, bis es draussen ist......
 

josef24

Erfahrenes Mitglied
#7
Vielen Dank für deine Bemühungen, wenn du mich mit dem Anpassen noch unterstützen könntest, wäre ich dir sehr dankbar. Bin hier absoluter Laie und hoffe hier auf Unterstützung. Danke und Gruß, Josef
 

Zvoni

Erfahrenes Mitglied
#8
Anbei.
Ist zumindest was ich dir auf die schnelle bieten kann.
Anstatt das Monster an Formel oben aus dem ersten Post gibst du einfach nur ein

=PLZ(ZEILE()) in die Zelle ein
Wichtig: Die leere Klammer nach "ZEILE".
Also
"Ist Gleich"
"PLZ"
"Klammer auf"
"ZEILE"
"Klammer auf"
"Klammer zu"
"Klammer zu"

EDIT: In TEST NEU Zvoni 2 habe ich die Formel jetzt auch um die Spalte erweitert.
In der ersten Version versagt die Formel, sofern jemand links von der PLZ-Spalte eine Spalte hinzufügt oder löscht.
Der Aufruf in der zweiten Version ist jetzt
"=PLZ(ZEILE();SPALTE())"
(Wieder auf die leeren Klammern achten)
 

Anhänge

Zuletzt bearbeitet:

josef24

Erfahrenes Mitglied
#9
Danke, wenn ich das jetzt richtig verstehe brauche ich den VBA Code und den Code in der entsprechenden Zeile/Spalte? Sorry, darin sehe ich jetzt nicht wirklich eine Verbesserung. Es sei mir gestattet nochmal meine Frage zu stellen: Geht es nicht ausschließlich mit einem VB Code zu generieren? Ich bitte dies ausdrücklich nicht falsch zu verstehen. Danke und Gruß Josef
 

Zvoni

Erfahrenes Mitglied
#10
Das geht schon, nur brauchst du dann dennoch einen externen "Schalter", der den Code dann auch tatsächlich anstösst, Beispiel eine Schaltfläche.
Den Code alleine vom Worksheet_Change/Selection_Change-Ereignis(e) abhängig zu machen, halte ich nicht wirklich für eine gute Idee. Da braucht dann irgendjemand nur die Spalten umzusortieren, eine zu löschen/hinzuzufügen, und schon zerlegts das ganze
 

josef24

Erfahrenes Mitglied
#11
Danke, deine Überlegung ist sicherlich richtig. Aber genau dieses wollte ich durch einen VB Code ausschließen.
Es sollte "nur" die PLZ, mit dem entsprechenden Ort verglichen, reinkopiert werden. Gruß Josef
 

Zvoni

Erfahrenes Mitglied
#12
Mit oder ohne "externen" Schalter (Schaltfläche)?
Weil "ohne" bleibt eigentlich fast nur das Change-Ereignis übrig (egal jetzt ob Selection_Changed oder ein anderes), wobei du dann natürlich festlegen musst, wann bei "Change" er den Code ausführen soll?
Wenn egal in welcher Zelle was geändert wird? Nur in einer bestimmten Spalte? Und das Problem mit der Spalten-Verschiebung (PLZ steht in "G", jemand löscht was vorne dran, PLZ wird zu "D") könnte man dadurch lösen, dass der Code zuerst durch die Spalten-Überschriften läuft und dort nach dem Begriff "PLZ" sucht, um die Ziel-Spalte zu finden, aber du erkennst sicher, dass das dann wieder kaputt ist, sobald jemand die Spalten-Überschrift ändert.

Lange Rede, gar kein Sinn: Sag mir wo du was brauchst, und auf was es wann reagieren soll?
Dass der Code dann Einträge ignoriert, wofür bereits eine PLZ existiert, kann ich dir einbauen, wird aber dann nicht mehr geprüft, falls ein User, eine PLZ manuell ändert.
 

josef24

Erfahrenes Mitglied
#13
Das ganze soll als Change-Ereignis funktionieren (Bei Eingabe des Ortes in der ArbTab-Tabelle, dabei Übernahme der PLZ Spalte "A" aus der PLZ-Tabelle in Spalte "G" der ArbTab-Tabelle, und PLZ Spalte "B" in der Spalte "R" der ArbTab-Tabelle). Quelle hierfür ist bei beiden Werten die PLZ-Tabelle. Es wird immer die nächstmögliche freie Zeile sein. Um relative Sicherheit zu haben, wäre ein Orientieren an der Spalten-Überschrift wohl die sicherste Methode. Ignorieren bzw. überschreiben von bereits vorhandener PLZ wäre von Vorteil. Ich denke damit eine relative Sicherheit in die Tabelle zu transportieren. Danke und Gruß Josef