Excel VBA in anderer Excel-Datei suchen und in der aktuellen überschreiben

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Um in den beiden Arbeitsmappen (in der Frage mit Excel-Dateien bezeichnet) vergleichen zu können, schlage ich vor, die Blanks/Leerzeichen zu eleminieren.

Ein entsprechendes Makro füge ich als Bildschirmkopie bei.

Bereinigt wird der Zellinhalt der jeweils aktiven Zelle und das Ergebnis in der rechts daneben liegenden Zelle ausgegeben (...Column + 1).
Der bereinigte Zellinhalt befindet sich der Variablen "suchergebnis" und kann für den Vergleich benutzt werden.

Natürlich ist das nur der Anfang des Vorhabens, aber damit bist Du schon mal auf dem Weg.

Gruß aus Berlin

Blanks löschen - (Computer, programmieren, Excel)

cool,das hilft mir weiter. aber kann man diesen teil mit dem (column + 1) auch so schreiben,dass er es in der ganzen mappe macht? weil ich hab in der mappe etwa 400 zeilen mit aufträgen und dann 400 mal zeile runter gehen und die "anwendung" starten kostet auch noch viel zeit. ich soll es ja so einrichten,dass man möglichst nur eins der beiden oder auch beide mappen öffnet, alt+f11 drückt,das makro aus einer textdatei holt und einfügt und dann auf f5 gehtnd dann die hauptarbeit getan ist.

wie gesagt,ich hab das erst einmal gemnacht und das vor 3 jahren mit nem winzigen befehl...stehe also inzwischen wieder kurz vor 0 :D

0

Leerzeichen eliminieren kann man auch mit dem eingebauten Suchen/ersetzen-Dialog: Spalte markieren, dann

Strg+f (f für finden), Blatt "ersetzen", Was?:Leerzeichen;wodurch?:nichts eingeben, Option alle ersetzen.
Oder gleich Strg+h (k.A., wofür h steht) =>Ersetzen-Dialog.

0

ich würde das ganz ohne Makro machen: in Deiner Kollegen(Ko)-Datei seien die irregulär geschriebenen PjNrn in Spalte A (ALLE ALS LABELS, nicht gemischt!!). Ebenso in Deiner Datei, aber ohne Leerzeichen. Nun kannst Du die Wildcard-Funktion in Vergleich nutzen: der * steht für ALLES und auch für NICHTS:
Zerlege Deine Nummer in (hier 5) Einzelziffern mit jeweils einem * davor, dazwischen und danach mit folgender (Teil-)Formel in K2 bzw L2:

=VERGLEICH("*"&TEIL(A2;1;1)&"*"&TEIL(A2;2;1)&"*"&TEIL(A2;3;1)&"*"&TEIL(A2;4;1)&"*"&TEIL(A2;5;1)&"*";Ko!A:A;0)

Egal, was nun vor, nach oder zwischen den Ziffern steht (ausser anderen Ziffern), die Ziffernfolge wird erkannt! Die Syntax für die Ko-Datei musst Du anpassen, klick einfach anstatt es einzutragen nach dem Semicolon auf den SpaltenkopfA der vorher geöffneten Ko-Datei, dann müsste es stimmen).

um diese Formel herum baust Du die index-Funktion:

=index(Ko!K:K;Vergleich(...);1) bzw =index(Ko!L:L;Vergleich(...);1)

und ziehst das die 400 Zeilen runter.
Nun müssten die Ko!-Einträge in den Spalten K:L in Deine Datdei übernommen worden sein.
Sichere eine Formel woanders, klick auf K:L (ganze Spalten am Kopf markieren), kopieren, inhalte-einfügen:WERTE.
Fertig ist das Update.
Mach das aber in einer Blattkopie, denn die alten Werte sind verloren. Es sei denn, Du bist sicher, dass Du sie nicht mehr brauchst.
Wenn Du Dein Altblatt und Dein NeuBlatt vergleichst (in einem neuen Blatt oder in einer anderen Spalte, kannst Du auch Darstellen, wo sich nichts verändert hat: Wenn(Neublatt!K2=Altblatt!K2;"keine Änd.";"+")
Viel Erfolg!

Noch einfacher wäre es gewesen, mit Strg+h = suchen nach Leerzeichen und ersetzen durch nichts(Dialogzeile einfach leer lassen) alle ersetzen die Ko!-Nummern zu bereinigen, ggf nicht speichern nach update. Aber ich bin davon ausgegangen, dass dir das zu riskant ist (wenn doch mal gespeichert würde)?

Erst einmal die Erweiterung auf beliebig viele Zeilen (max 420, ist aber änderbar, stoppt bei Leerzeile).

Sub ff()
For j = 2 To 420 'Start und Endezeile
suchergebnis = ""
such = Cells(j, 3) 'holt sich den Eintrag aus Zeile j (C2, C3 ..)
If such = "" Then Exit Sub 'Abbruch, wenn leere Zelle
For i = 1 To Len(such) 'Schleife über Anzahl Zeichen
    Zeichen = Mid(such, i, 1) 'betrachtet jedes einzelne Zeichen
        If Zeichen <> " " Then ' prüft, ob Blank
            suchergebnis = suchergebnis & Zeichen ' setzt wieder zusammen
        End If
Next i
' und Ausgabe des von Blanks befreiten Wertes eine Spalte rechts
' in der entsprechenden Zeile
Cells(j, 4) = suchergebnis
Next j
End Sub

Für weitergehende Hilfe reicht meine Zeit im Moment nicht.
Bin für den Rest des Monats nicht mehr online.
Frag im Sept nochmal nach, wenn das hier nicht reicht.

Gruß aus Berlin

Blanks löschen 2 - (Computer, programmieren, Excel)

Was möchtest Du wissen?