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

Forumthread: Daten aus anderer Arbeitsmappe auslesen und import

Daten aus anderer Arbeitsmappe auslesen und import
Sonja
Hallo liebes Forum-Team und Forum-Leser/Schreiber!
Ich bin in Diplomarbeits-Endphase und habe (leider!) kaum mehr Zeit, lange im I-net und in Foren herumzusurfen (was ich- glaubt mir- sicher tun müsste da meine vba-Kenntnisse eher zum Heulen sind), deshalb die verzweifelte direkte Anfrage!!!!!!
Ausgangssituation:
In einem Tabellenblatt wird aufgrund Auswahl verschiedener Drop-Downmenus eine Art Buchstaben-Zahlen-Kürzel in einer Zelle generiert. (Bsp. l1a3d2p2c2: Buchstaben fix und an fixer Stelle, Zahlen variieren).
Dieses Kürzel kann sich in 5 vorhandenen verschiedenen anderen externen Tabellenblättern mit definierten Namen und anderem Laufwerk wiederfinden. (Namen: "Matrix_Design1", "Matrix_Design2", usw... bis "Matrix_Design5")
Aufgrund der Zahl (1 bis 5), die bei dem "d" im Kürzel rechts steht kann ich das externe Tabellenblatt, in dem ich nachsehen muss, spezifizieren: Bsp: Kürzel "l1a3d2p2c2" findet sich in Tabelle "Matrix_Design2", wegen dem 2er neben dem "d")
Ich brauche nun ein Makro das folgendes kann:
- (Ausgehend von meinem Tabellenblatt in dem ich arbeite): Start durch Button
- Öffnen des "richtigen" Tabellenblattes, aufgrund der Zahl neben dem "d" (es sind in den "Matrix-Tabellenblättern" jeweils Spalten bis DC einschliesslich und Zeilen bis 169 belegt, also würde es Zeit sparen, sofort das richtige zu durchsuchen)
- Finden der Zelle, in dem das Kürzel enthalten ist
- 1:1 Übernahme der Daten (Zahlen und Buchstaben) der Spalte der Zielzelle und der Spalte vor der Zielzelle, beginnend in der nächsten Zeile der Zelle bis zur nächsten leeren Zeile.
(Bsp: Kürzel steht in Zelle B2, alle Zellen von A1-G25 sind gefüllt. Es soll also der Bereich von A3-B25 kopiert werden)
- Einblenden eines ausgeblendeten Tabellenblattes (in der Mappe, von der aus ich starte) und Einfügen der Daten des kopierten Bereiches, ausgehend von Zelle A2 (erste Zeile soll Überschriftszeile werden).
- Schliessen des durchsuchten externen Tabellenblattes
Das ist "kurz gesagt" mein Problem und meine Frage in die digitale Runde!
Ich würde mich sehr freuen, wenn dies jemand bewerkstelligen kann und mir damit eine Risen Hilfe ist!!!!!
Wie gesagt, ich bin normalerweise ein Mensch, der sich selbst auf den Hosenboden sitzt, aber diese Sache ist nur eine Kleinigkeit daneben, die ich noch brauche...
Deshalb: Vielen vielen Dank im Voraus, wenn es konstruktive Hilfe gibt, bzw. einen Hinweis auf einen Forumseintrag oder Link, in dem ich nachschauen kann!
Schöne Grüsse,
Sonja
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
da kommt mal wieder ...
08.09.2009 22:06:05
Uduuh
... der größte Bhf der Welt
Grand Central Station
Gruß aus’m Pott
Udo

AW: Rückfragen 1 +2 + 3
08.09.2009 23:15:59
Gerd
Hallo Sonja!
l1a3d2p2c2
Steht die gesuchte Ziffer immer an 6. Stelle der Zeichenfolge?
Verwechselst Du bei "Matrix_Design?" Tabellenblatt-Name u. Dateiname ?
bzw. wie heißen die 5 Dateien u. das maßgebliche Tabellenblatt darin?
Sind diese Dateien alle im selben Ordner?
Gruß Gerd
Anzeige
AW: Rückfragen 1 +2 + 3
09.09.2009 11:20:50
Sonja
Hallo Gerd!
Zu Deinen Fragen:
Die Ziffer wird wahrscheinlich immer an 6. Stelle stehen, ja. Ich denke, ich werds so einrichten.
Sicherer ist es aber, denke ich, wenn das Makro die Zahl neben dem "d" hernimmt, egal, wo sie steht.
Du hast recht: habe den Tabellenblatt Namen mit dem Dateinamen verwechselt. Tabellenblätter in den Dateien sind nicht benannt. Ich werde sie so benennen:
Datei "Matrix_Design_1" mit Tabellenblatt "design1"
Datei "Matrix_Design_2" mit Tabellenblatt "design2"
Datei "Matrix_Design_3" mit Tabellenblatt "design3"
Datei "Matrix_Design_4" mit Tabellenblatt "design4"
Datei "Matrix_Design_5" mit Tabellenblatt "design5"
Die "Matrix_De....."- Dateien werden alle im selben Ordner stehen. Name noch unbekannt.
Ob das File, von dem aus das Makro gestartet wird, auch in dem Ordner liegt, oder eine Ebene höher oder in einem anderen Laufwerk zu finden sein wird, weiss ich leider noch nicht.
Ich hoffe, ich konnte die Fragen klären!
Schöne Grüsse,
Sonja
Anzeige
AW: da kommt mal wieder ...
08.09.2009 23:29:53
Mustafa
Hallo Udo (Uduuh),
nachdem ich den Text mittlerweile 3 (oder warens 4, 5 mal, ich hab ja die Zeit dafür) mal durchgelesen hab, glaub ich verstanden zu haben was Sonja braucht.
Da sie scheinbar wenig Zeit hat klink ich mich als "Diplomat" mal mit rein.
Aaaalso :
1. Suche die Zahl rechts von dem Buchstaben d (im Beispiel die 2)
2. Suche bzw öffne die Mappe Matrix_Design2
3. Finde den String aus der öffnenden Mappe (im Beispiel l1a3d2p2c2) im Beispiel gefunden in B2
4. Kopiere den Bereich in Abhängigkeit der gefundenen Zelle. also Von A3 bis B letzter Eintrag in Spalte
5. Blende Tabellenblatt X (keine Ahnung welches) ein und füge Daten ab Zelle A2 ein
6. Schliesse Matrix_Design2
Hoffe ich hab den Text richtig verstanden und interpretiert und die Grand Central Station etwas übersichtlicher gemacht ;-)
Würde gern selber ein Projekt basteln, aber meine VBA Kenntnisse sind nicht ausreichend dafür.
Werde den Thread weiterverfolgen um auch in diesem Gebiet noch was dazuzulernen.
Gruß aus der Domstadt Köln.
Anzeige
Ja, Mustafa, ich denke du hast das wohl richtig...
09.09.2009 01:05:59
Luc:-?
...so erklärt wie ich das nach 1.Lesen verstanden zu haben glaube... ;-)
Aber trotz langen Textes, hat Sonja, wie du ja auch festgestellt hast, Lücken gelassen. Also wirst du wohl noch etwas mit dem Lernprozess warten müssen... ;-)
Übrigens interessiert mich das Thema allerhöchstens wg der Codierungsidee; sonst wäre es ja ein eher triviales Suchen-Kopieren-Speichern-Problem, für das es im Archiv genügend Bspp gibt...
Ohne "Übersetzungslisten" für den Code wird's wohl nicht gehen!
Gruß Luc :-?
Anzeige
AW: da kommt mal wieder ...
09.09.2009 11:24:02
Sonja
Hallo Mustafa!
Kompliment, Du hast es in kurzen Worten genau erfasst!
Grüsse!
AW: da kommt mal wieder ...
09.09.2009 18:45:54
fcs
Hallo Sonja und andere Interessierte,
Studensponsoring die 2. (nach Yves)
Hier mein Lösungsvorschlag. Datei funktioniert natürlich nur, wenn die Quelldateien Matrix_Design1 bis 5 existieren.
https://www.herber.de/bbs/user/64304.xls
Gruß
Franz
Sub DatenSuchen()
'Sucht in den Matrix_Design-Dateien nach einem Suchbegriff und
'kopiert Daten in das Zielblatt
Dim Suchbegriff As String
Dim wbAktiv As Workbook, wksAktiv As Worksheet
Dim wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet, strWb As String, strWks As String
Dim ZelleGefunden As Range, Bereichdaten As Range
Dim varVerzeichnisQuelle
Dim ZelleSuchbegriff As Range
On Error GoTo Fehler
Set wbAktiv = ActiveWorkbook
Set wksAktiv = ActiveSheet
'Tabelle in die die Daten kopiert werden sollen
Set wksZiel = wbAktiv.Worksheets("ZielTabName")
Set ZelleSuchbegriff = Selection ' oder auch feste Zelladresse:  wksAktiv.Range("C8")
Suchbegriff = ZelleSuchbegriff.Value
'Quell-Dateinamen und Blattnamen ermitteln
If InStr(1, Suchbegriff, "d") > 0 Then
strWb = "Matrix_Design" & Mid(Suchbegriff, InStr(1, Suchbegriff, "d") + 1, 1)
strWks = "design" & Mid(Suchbegriff, InStr(1, Suchbegriff, "d") + 1, 1)
Else
MsgBox "Buchstabe ""d"" nicht im Suchbegriff """ & Suchbegriff & """ enthalten."
GoTo Ende
End If
'Verzeichnis mit den 5 Quelldateien wählen - als festen Wert vorgeben
'varVerzeichnisQuelle = "C:\Lokale daten\Test"
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Title = "Bitte Ordner mit den 5 Datendateien wählen und OK"
If .Show  False Then
varVerzeichnisQuelle = .SelectedItems(1)
Else
GoTo Ende
End If
End With
Application.ScreenUpdating = False
'Prüfen, ob Datei im gewählten verzeichnis
With Application
strWb = Dir(varVerzeichnisQuelle & .PathSeparator & strWb & ".xl*")
If strWb  "" Then
'Quelldatei öffnen
Set wbQuelle = .Workbooks.Open(Filename:=varVerzeichnisQuelle _
& .PathSeparator & strWb, ReadOnly:=True)
'Quelltabellenblatt setzen
Set wksQuelle = wbQuelle.Worksheets(strWks)
Else
MsgBox "Quelldatei """ & strWb & ".xl*"" im Verzeichnis """ & _
varVerzeichnisQuelle & """ nicht gefunden!"
GoTo Ende
End If
End With
'Suchbegriff suchen
Set ZelleGefunden = wksQuelle.Cells.Find(What:=Suchbegriff, LookIn:=xlValues, _
lookat:=xlWhole)
If ZelleGefunden Is Nothing Then
MsgBox "Suchbegriff""" & Suchbegriff & """ in Datei """ & _
wbQuelle.Name & """, Blatt """ & wksQuelle.Name & """ nicht gefunden!"
GoTo Ende
Else
With wksQuelle
'Von Fundstelle Bereich 1 Spalte nach links, 1 Zeile nach unten bis _
zur nächsten Leerzeile unterhalb der Fundstelle merken
Set Bereichdaten = .Range(ZelleGefunden.Offset(1, -1), ZelleGefunden.End(xlDown))
End With
'gefundene Daten in die Zieltabelle kopieren.
With wksZiel
.Visible = xlSheetVisible 'Zieltabelle einblenden
'Altdaten im Blatt löschen
.Range(.Cells(2, 1), .Cells(2, 2).End(xlDown)).ClearContents
'Daten Kopieren
Bereichdaten.Copy Destination:=.Cells(2, 1)
End With
'Quelle wieder schliessen
wbQuelle.Close savechanges:=False
Set wbQuelle = Nothing
End If
Ende:
Fehler:
Application.ScreenUpdating = True
With Err
If .Number  0 Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End If
End With
'Objektvariablen zurücksetzen
Set wbAktiv = Nothing: Set wksAktiv = Nothing
If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
Set wbQuelle = Nothing
Set wksZiel = Nothing
Set wbQuelle = Nothing: Set wksQuelle = Nothing
Set ZelleGefunden = Nothing: Set Bereichdaten = Nothing
End Sub

Anzeige
AW: da kommt mal wieder ...
10.09.2009 00:44:22
sonja
Hallo Franz!
Erst mal ein ganz herzliches Dankeschön, dass Du Dir (und auch andere Antwortende) die Mühe gemacht hast/haben!
Ich werde das testen und dann Bescheid geben!
Schönen Abend noch!
Sonja
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus einer anderen Arbeitsmappe auslesen und importieren


Schritt-für-Schritt-Anleitung

Um Daten aus einer anderen Arbeitsmappe in Excel auszulesen und zu importieren, kannst du folgendes VBA-Makro verwenden. Stelle sicher, dass du Excel 2016 oder eine neuere Version nutzt:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Sub DatenSuchen()
    Dim Suchbegriff As String
    Dim wbAktiv As Workbook, wksAktiv As Worksheet
    Dim wksZiel As Worksheet
    Dim wbQuelle As Workbook, wksQuelle As Worksheet, strWb As String, strWks As String
    Dim ZelleGefunden As Range, Bereichdaten As Range
    Dim varVerzeichnisQuelle
    Dim ZelleSuchbegriff As Range
    On Error GoTo Fehler
    Set wbAktiv = ActiveWorkbook
    Set wksAktiv = ActiveSheet
    Set wksZiel = wbAktiv.Worksheets("ZielTabName")
    Set ZelleSuchbegriff = Selection
    Suchbegriff = ZelleSuchbegriff.Value

    ' Ermitteln des Dateinamens und des Tabellenblatts
    If InStr(1, Suchbegriff, "d") > 0 Then
        strWb = "Matrix_Design" & Mid(Suchbegriff, InStr(1, Suchbegriff, "d") + 1, 1)
        strWks = "design" & Mid(Suchbegriff, InStr(1, Suchbegriff, "d") + 1, 1)
    Else
        MsgBox "Buchstabe ""d"" nicht im Suchbegriff """ & Suchbegriff & """ enthalten."
        GoTo Ende
    End If

    ' Wählen des Ordners mit den Quelldateien
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Title = "Bitte Ordner mit den 5 Datendateien wählen und OK"
        If .Show = False Then
            GoTo Ende
        End If
        varVerzeichnisQuelle = .SelectedItems(1)
    End With

    Application.ScreenUpdating = False
    ' Prüfen, ob die Datei im gewählten Verzeichnis existiert
    With Application
        strWb = Dir(varVerzeichnisQuelle & .PathSeparator & strWb & ".xl*")
        If strWb <> "" Then
            Set wbQuelle = .Workbooks.Open(Filename:=varVerzeichnisQuelle & .PathSeparator & strWb, ReadOnly:=True)
            Set wksQuelle = wbQuelle.Worksheets(strWks)
        Else
            MsgBox "Quelldatei """ & strWb & ".xl*"" im Verzeichnis """ & varVerzeichnisQuelle & """ nicht gefunden!"
            GoTo Ende
        End If
    End With

    ' Suchbegriff suchen
    Set ZelleGefunden = wksQuelle.Cells.Find(What:=Suchbegriff, LookIn:=xlValues, lookat:=xlWhole)
    If ZelleGefunden Is Nothing Then
        MsgBox "Suchbegriff """ & Suchbegriff & """ in Datei """ & wbQuelle.Name & """, Blatt """ & wksQuelle.Name & """ nicht gefunden!"
        GoTo Ende
    Else
        With wksQuelle
            Set Bereichdaten = .Range(ZelleGefunden.Offset(1, -1), ZelleGefunden.End(xlDown))
        End With

        With wksZiel
            .Visible = xlSheetVisible
            .Range(.Cells(2, 1), .Cells(2, 2).End(xlDown)).ClearContents
            Bereichdaten.Copy Destination:=.Cells(2, 1)
        End With

        wbQuelle.Close savechanges:=False
    End If
Ende:
Fehler:
    Application.ScreenUpdating = True
    With Err
        If .Number <> 0 Then
            MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        End If
    End With
    Set wbAktiv = Nothing: Set wksAktiv = Nothing
    If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
    Set wbQuelle = Nothing
    Set wksZiel = Nothing
    Set wksQuelle = Nothing
    Set ZelleGefunden = Nothing: Set Bereichdaten = Nothing
End Sub
  1. Anpassung der Zielblatt- und Ordnernamen: Stelle sicher, dass das Zielblatt in deiner Arbeitsmappe den Namen "ZielTabName" hat und passe den Pfad für die Quelldateien an.

Häufige Fehler und Lösungen

  1. Fehlende Dateien: Wenn das Makro meldet, dass die Quelldatei nicht gefunden wurde, überprüfe, ob die Dateien "Matrix_Design1" bis "Matrix_Design5" im gewählten Ordner vorhanden sind.

  2. Buchstabe "d" fehlt: Achte darauf, dass der Suchbegriff den Buchstaben "d" enthält, da das Makro sonst nicht funktioniert.

  3. Zielblatt nicht sichtbar: Wenn das Zielblatt nicht sichtbar ist, stelle sicher, dass es im Makro als sichtbar eingestellt ist.


Alternative Methoden

Neben der VBA-Methode kannst du auch die SVERWEIS-Funktion in Excel verwenden, um Daten aus einer anderen Tabelle zu suchen und zu importieren. Diese Methode ist einfacher, erfordert jedoch, dass die Quelldaten in der gleichen Arbeitsmappe vorhanden sind.


Praktische Beispiele

Angenommen, du hast das Kürzel "l1a3d2p2c2" in deinem Arbeitsblatt. Wenn das Kürzel sich im Blatt "design2" befindet und die gesuchte Zahl "2" ist, wird das Makro automatisch die Daten aus dem entsprechenden Bereich zwischen A3 und der letzten gefüllten Zelle in Spalte B kopieren.


Tipps für Profis

  • Fehlerbehandlung: Füge zusätzliche Fehlerbehandlungsroutinen in dein Makro ein, um unerwartete Probleme besser zu diagnostizieren.
  • Modularität: Teile dein Makro in kleinere, wiederverwendbare Funktionen auf, um den Code lesbarer und wartungsfreundlicher zu gestalten.
  • Dokumentation: Kommentiere deinen Code deutlich, um die Verständlichkeit zu erhöhen, besonders wenn andere Benutzer deinen Code verwenden.

FAQ: Häufige Fragen

1. Frage
Kann ich das Makro auch für andere Dateiformate verwenden?
Ja, das Makro kann angepasst werden, um auch mit anderen Formaten wie CSV zu arbeiten, solange die grundlegende Struktur beibehalten wird.

2. Frage
Was passiert, wenn ich die Datei schließe, während das Makro läuft?
Das Makro wird anhalten und eine Fehlermeldung anzeigen. Es ist wichtig, die Datei nicht zu schließen, bis der Vorgang abgeschlossen ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige