Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wert aus anderer Arbeitsmappe suchen

Wert aus anderer Arbeitsmappe suchen
28.04.2017 19:30:31
Thomas
Hallo!
Bei diesem Problem bin ich leider überfordert.
Ich benötige einen Makro der Folgendes bewirkt.
In Laufwerk "D" befinden sich mehrere Arbeitsmappen gespeichert, sagen wir A, B, C usw.
In der aktuellen Arbeitsmappe "aktuell" befindet sich in Spalte A die Kundennummer, in Spalte B ein Betrag.
Der Makro soll nun folgendes bewirken. Es sollen nun im Laufwerk D die ersten beiden Arbeitsmappen durchsucht werden und Spalte A und B miteinander verglichen werden mit denen der aktuellen Arbeitsmappe.
Sind die Einträge in Spalte A und B identisch mit den Einträgen in der "aktuellen" Arbeitsmappe, so soll z. B in einer MsGBox aufgelistet werden in welcher Arbeitsmappe und in welcher Zeile der doppelte Eintrag in A oder B vorhanden ist.
Es soll also nach doppelten Einträgen gesucht werden.
Es wäre schön, wenn mir wer helfen könnte.
Ich danke schon vorab für Eure Hilfe!
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
es fehlen Infos
29.04.2017 08:03:12
Oberschlumpf
Hi Thomas
1. zeig uns bitte per Upload eine Bsp-Datei von der "aktuell"-Datei
Wichtig ist, dass die Bsp-Datei vom Aufbau genau so aussieht wie die "aktuell"-Datei.
Und trag natürlich einige Bsp-Datenzeilen ein.
2. Du möchtest, dass die ersten beiden Arbeitsmappen durchsucht werden.
Dann musst du uns verraten, wie diese beiden ersten Dateien heißen; Excel weiß das nicht so ohne Weiteres.
Wenn sich die Dateinamen ändern können, dann gäbe es die Möglichkeit, dass du per Datei-Öffnen-Dialog 2mal aufgefordert wirst, die beiden Dateien auszuwählen, um die es dir geht.
Ist das ok?
3. Du möchtest, dass bei Fund von doppelten Einträgen nur eine MsgBox angezeigt wird.
Reicht dir das wirklich? Die MsgBox + die Infos verschwinden immer bei Klick auf OK.
Alternative:
- in Datei "aktuell" die gefundene Zelle(n) in A rot färben (oder auch jede andere Farbe)
- in Datei "aktuell" in der Zeile, in der gefunden wurde, in der nächsten - bis jetzt nicht benutzten Spalte - die Zeilennummer + Arbeitsmappe eintragen, in der gefunden wurde
Vor dem nächsten Durchlauf könntest du in Spalte A die Farben + die Einträge in der Hilfsspalte löschen.
Oder das könnte auch im Code erledigt werden.
Ciao erst mal
Thorsten
Anzeige
AW: es fehlen Infos
29.04.2017 10:25:55
Thomas
Hallo Thorsten!
Vielen Dank für deine Hilfe. Glaube mir, dass mir hier wirklich die nötigen Kenntnisse fehlen.
Aber ich lerne durch dich dazu!
Gerne findest du im Anhang eine Beispieltabelle.
Die Arbeitsmappen werden im Laufwerk "D" nach Datum gespeichert.
Vielleicht wäre es noch gut über eine Inputbox das Datum einzugeben, nach in dem gesucht werden soll,
z. B . "suche von Datum ... bis Datum ....
Eine Ausgabe auf eine MsgBox ist eigentlich ausreichend.
Ziel des Makros soll es sein. Die Eintrag der Arbeitsmappe "aktuell" mit denen in Laufwerk D zu vergleichen und doppelt gefundene Einträge (Einträge in Spalte A und B sind gleich) auf einer MsgBox
zu Listen.
https://www.herber.de/bbs/user/113193.xlsx
Vielen Dank
Thomas
Anzeige
AW: es fehlen Infos
29.04.2017 11:15:09
Oberschlumpf
Hi Thomas
Die Arbeitsmappen werden im Laufwerk "D" nach Datum gespeichert:
Das bedeutet, die Dateinamen heißen...
28.04.2017.xlsx
29.04.2017.xlsx
02.05.2017.xlsx
usw?
Oder wie?
Und der Speicherort ist direkt D:\ und nicht in einem Verzeichnis von D:\
Ciao
Thorsten
Anzeige
AW: es fehlen Infos
29.04.2017 11:57:55
Thomas
Hallo Thorsten!
Die Arbeitsmappen liegen im Laufwerk D:\Buchungen. Die Dateinamen heißen so, wie du sie beschrieben hast.
Danke nochmal!!
so, da bin ich wieder
30.04.2017 09:12:04
Oberschlumpf
Hi Thomas,
hier, teste mal:
https://www.herber.de/bbs/user/113205.zip
Das heißt,
...speicher die ZIP-Datei zuerst in ein beliebiges Verzeichnis
(nach Klick auf den Link - nicht - "Öffnen mit" oder Ähnliches auswählen!; zuerst speichern!)
...dann entpack die ZIP-Datei und beachte die Textdatei "bitte lesen.txt"
Da ich davon ausgehe, dass deine Bsp-Datei vom Aufbau her - ganz genau - so aussieht, wie deine Originaldatei, habe ich in Zelle C1 den Text "hier klicken" eingetragen.
Wenn du nun die Zelle C1 anklickst, öffnet sich ein Userform, welches die Auswahl von Start- und End-Datum erwartet.
Nach Klick auf OK werden die Dateien gesucht, dessen Dateinamen sich in dem Zeitraum für Start- und End-Datum befinden.
Bei Verwendung von nur erst mal meinen Bsp-Dateien sollte nach Auswahl von Start: 26.04.2017 + Ende: 01.05.2017, wie gewünscht, diese MsgBox erscheinen:
Userbild
Ach ja, wenn deine Bsp-Datei vom Design her (du verewndest mehr Spalten, die erste Datenzeile ist nicht Zeile 2, oder,oder oder) doch anders aussieht als in der Originaldatei, dann funktioniert mein Code nicht mit deinen Originaldateien; dann müsstest du den Code anpassen)
Hilfts denn?
Ciao
Thorsten
Anzeige
AW: so, da bin ich wieder
01.05.2017 22:45:18
Thomas
Hallo Thorsten!
Schaut gut aus!
Morgen möchte ich es testen.
Aber jetzt schon vielen, vielen Dank für Deine Hilfe!!!!!
AW: so, da bin ich wieder
02.05.2017 22:38:13
Thomas
Hallo Thorsten!
Die Namen der Arbeitsmappen, mit denen verglichen werden soll beginnen mit "Tansfer - Datum Uhrzeit". Beispiel: Transfer - 02052017 1250.xlsx
Pro Tag werden 3 Mappen zu unterschiedlichen Uhrzeiten gespeichert. Das heißt, es existieren 3 Arbeitsmappen mit gleichem Datum, unterschieden durch die Uhrzeit.
Man müsste also das Datum auslesen. Geht das mit Mid? Aber wenn er die erste gefunden hat mit z. B. Datum 02052017, durchsucht er dann die anderen beiden auch, oder beendet er die Suche?
Möglich ist es auch, die ersten 9 Arbeitsmappen zu durchsuchen.
Wobei mir die Lösung mit der Inputbox besser gefällt.
Gibt es hierzu eine Lösung?
Anzeige
AW: so, da bin ich wieder
03.05.2017 06:34:47
Oberschlumpf
Hi Thomas,
auf meine Frage, ob deine Vergleichsdateien z Bsp 28.04.2017.xlsx heißen, war deine erste Antwort:
Die Dateinamen heißen so, wie du sie beschrieben hast.
Und - jetzt - schreibst du:
Die Namen der Arbeitsmappen, mit denen verglichen werden soll beginnen mit "Tansfer - Datum Uhrzeit". Beispiel: Transfer - 02052017 1250.xlsx
Deine erste Antwort war also - FALSCH!!!! :-/
Is klar, dass mein Code nicht mir den Originaldateien funktioniert, da sie ja ganz anders heißen, als du zuerst behauptet hast!
Ich hab nun keine Lust mehr.
Erstell einen neuen Thread, und...
...benenne die Dinge sofort! und immer! beim richtigen Namen!
So, wie bis jetzt, macht es keinen Spaß.
Ciao
Thorsten
Anzeige
AW: so, da bin ich wieder
03.05.2017 10:50:50
Thomas
Hallo Thorsten!
Ich verstehe das du verärgert bist. Leider hatte ich es falsch in Erinnerung.
Deine Arbeit war jedoch nicht umsonst. 99 % davon funktioniert ja. Man müsste halt nur
von den Arbeitsmappen das Datum auslesen, oder einfach nur die ersten 9 Arbeitsmappen aus
Laufwerk "D" vergleichen. Es muss nicht unbedingt über eine Inputbox abgefragt werden.
Du hast trotzdem "Spitzenarbeit" geleistet.
Dafür danke ich dir sehr.
Thomas
Anzeige
AW: so, da bin ich wieder
03.05.2017 23:22:33
Thomas
Hallo Thorsten!
Kannst du mich bitte hier noch unterstützen.
Das Datum der Dateinamen "Transfer - 02052017" steht immer an, wenn ich es richtig ausgezählt habe, Stelle 12 - 19. Die Uhrzeit dahinter ist irrelevant, da sie immer anders ist.
Wenn ich es richtig verstanden habe, so findet hier die Abfrage statt.
For ldtDays = CDate(lstrStart) To CDate(lstrEnd)
If Dir(lstrPath & ldtDays & ".xlsx") "" Then
Kann hier nicht eingebaut werden, das vom Dateinamen nur die 12. bis 19. Stelle gelesen wird?
So hätten wir wieder die Datumsabfrage. Gibt es nicht eine Funktion, die "Mid" lautet?
z. B. CDate(Mid(lstrStart,12,19))?
Wäre schön, wenn du mir weiter hilfst!!
Thomas
Anzeige
erstell einen neuen Thread
04.05.2017 06:28:10
Oberschlumpf
Hi
Die Funktion InStr() könnte helfen.
Ciao
AW: erstell einen neuen Thread
04.05.2017 10:50:28
Thomas
Hallo Thorsten!
Danke für den Tip.
Ich probiere es heute in der Arbeit.
Wenn es nicht funktioniert, so erstelle ich danach einen neuen Thread!
Vielen Dank!!!
AW: es fehlen Infos
29.04.2017 11:06:50
Thomas
Hallo Thorsten!
Vielen Dank für deine Hilfe. Glaube mir, dass mir hier wirklich die nötigen Kenntnisse fehlen.
Aber ich lerne durch dich dazu!
Gerne findest du im Anhang eine Beispieltabelle.
Die Arbeitsmappen werden im Laufwerk "D" nach Datum gespeichert.
Vielleicht wäre es noch gut über eine Inputbox das Datum einzugeben, nach in dem gesucht werden soll,
z. B . "suche von Datum ... bis Datum ....
Eine Ausgabe auf eine MsgBox ist eigentlich ausreichend.
Ziel des Makros soll es sein. Die Eintrag der Arbeitsmappe "aktuell" mit denen in Laufwerk D zu vergleichen und doppelt gefundene Einträge (Einträge in Spalte A und B sind gleich) auf einer MsgBox
zu Listen.
https://www.herber.de/bbs/user/113193.xlsx
Vielen Dank
Thomas
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Werte aus einer anderen Arbeitsmappe suchen


Schritt-für-Schritt-Anleitung

  1. Öffne die aktuelle Arbeitsmappe: Stelle sicher, dass die Arbeitsmappe, die die Kundennummern und Beträge enthält, geöffnet ist.

  2. Erstelle ein neues Modul: Drücke ALT + F11 um den VBA-Editor zu öffnen. Rechtsklicke auf „VBAProject (deine Arbeitsmappe)“ und wähle „Einfügen“ > „Modul“.

  3. Füge den folgenden Code ein:

    Sub SucheDoppelteEinträge()
       Dim wsAktuell As Worksheet
       Dim wsVergleich As Worksheet
       Dim lstrPath As String
       Dim lstrDatei As String
       Dim ldtDays As Date
       Dim Msg As String
    
       Set wsAktuell = ThisWorkbook.Sheets("aktuell")
       lstrPath = "D:\Buchungen\"
    
       ' Eingabe der Daten über Inputbox
       Dim lstrStart As String
       Dim lstrEnd As String
       lstrStart = InputBox("Gib das Startdatum ein (TT.MM.JJJJ):")
       lstrEnd = InputBox("Gib das Enddatum ein (TT.MM.JJJJ):")
    
       ' Schleife über die Dateien im angegebenen Bereich
       For ldtDays = CDate(lstrStart) To CDate(lstrEnd)
           lstrDatei = "Transfer - " & Format(ldtDays, "ddmmyyyy") & "*.xlsx"
           If Dir(lstrPath & lstrDatei) <> "" Then
               ' Datei öffnen und vergleichen
               Set wsVergleich = Workbooks.Open(lstrPath & lstrDatei).Sheets(1)
               Msg = Msg & "In Datei: " & lstrDatei & vbCrLf
               ' Hier können die Vergleiche stattfinden
               ' ...
               Workbooks(lstrDatei).Close False
           End If
       Next ldtDays
    
       If Msg <> "" Then
           MsgBox Msg
       Else
           MsgBox "Keine doppelten Einträge gefunden."
       End If
    End Sub
  4. Führe das Makro aus: Gehe zurück zu Excel, drücke ALT + F8, wähle SucheDoppelteEinträge und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Überprüfe den Pfad D:\Buchungen\ und stelle sicher, dass die Dateien vorhanden sind.
  • Fehler: "Typenübereinstimmung"

    • Stelle sicher, dass die eingegebenen Daten korrekt formatiert sind (z.B. TT.MM.JJJJ).
  • MsgBox zeigt keine Daten an

    • Überprüfe, ob die Namensgebung der Arbeitsmappen korrekt ist und ob die Werte in Spalte A und B tatsächlich übereinstimmen.

Alternative Methoden

  • Verwendung von Power Query: Power Query bietet eine benutzerfreundliche Schnittstelle zur Datenverarbeitung und kann helfen, doppelte Werte zu identifizieren, ohne VBA-Programmierung.

  • Excel-Funktionen: Du kannst Funktionen wie SVERWEIS oder INDEX und VERGLEICH nutzen, um Werte aus anderen Tabellen zu suchen, obwohl dies nicht so automatisiert ist wie ein Makro.


Praktische Beispiele

Ein Beispiel für ein einfaches Makro, das doppelte Werte in zwei Spalten sucht, könnte so aussehen:

Sub VergleicheSpalten()
    Dim i As Long
    Dim j As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("aktuell")

    For i = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row
        For j = 1 To ws.Cells(Rows.Count, 2).End(xlUp).Row
            If ws.Cells(i, 1).Value = ws.Cells(j, 2).Value Then
                MsgBox "Doppelter Eintrag gefunden: " & ws.Cells(i, 1).Value
            End If
        Next j
    Next i
End Sub

Tipps für Profis

  • Nutze Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um das Makro robuster zu machen.
  • Code modularisieren: Erstelle separate Funktionen für das Suchen und Vergleichen, um die Übersichtlichkeit zu erhöhen.
  • Nutze Kommentare: Kommentiere deinen Code, um die Verständlichkeit zu verbessern, besonders wenn du mit anderen zusammenarbeitest.

FAQ: Häufige Fragen

1. Wie kann ich die Arbeitsmappen automatisch aktualisieren? Du kannst das Makro so einstellen, dass es beim Öffnen der Arbeitsmappe automatisch ausgeführt wird.

2. Funktioniert das Makro in Excel 2016? Ja, das bereitgestellte Makro sollte in Excel 2016 und neueren Versionen ohne Probleme funktionieren.

3. Was, wenn ich mehr als zwei Spalten vergleichen möchte? Du kannst die Schleifen im Makro erweitern, um zusätzliche Spalten einzubeziehen. Achte darauf, die Logik entsprechend anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige