Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1580to1584
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

Daten aus anderer Excel-Datei importieren

Daten aus anderer Excel-Datei importieren
01.10.2017 01:24:55
Tobi
Hallo zusammen!
Im Zuge meiner Masterarbeit habe ich 75 Excel-Arbeitsmappen mit Daten aus Laborversuchen generiert. Um diese auswerten zu können habe ich eine Vorlage erstellt. In dieser Vorlage sollen die generierten Daten in den Zellen D6:AN2500 im Worksheet 'Daten' eingefügt werden. Nun ist es recht mühselig alle 75 Listen aufzurufen und alles von Hand zu kopieren und zu speichern.
Gibt es eine Makro-Lösung um diese Arbeitsmappen nacheinander anzusprechen und daraus die Zellen A2:AK2500 in die vorhin erwähnte Arbeitsmappe zu kopieren und bestenfalls noch abzuspeichern? Das Worksheet der Quelle heißt immer 'sheet1'.
Dabei würde ich gerne eine Schaltfläche in der Arbeitsmappe 'Vorlage' anlegen, die dieses Makro dann ausführt.
Ich bin für jede Hilfe dankbar die mir kostbare Zeit erspart!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus anderer Excel-Datei importieren
01.10.2017 14:00:56
Peter(silie)
Hallo,
erstmal die Frage: Sollen die Daten aus allen 75 in eine oder sollen 75 neue Dateien enstehen...
Solltest du 75 neue Dateien erstellen wollen, sehe ich keinen Sinn in der ganzen Sache.
Wenn du eine Master Datei hast, wo die Daten hintereinander rein kopiert werden sollen, macht es wieder Sinn.
Wenn du nur die Daten von A:AK nach D:AN verschieben willst, ist das auch wieder was ganz anderes.
Hier mal ein Code, der sich alle xls und xlsx Dateien aus einem angegebenen Ordner holt und die daten aus A:AK nach D:AN kopiert, in das Workbook wo das Makro steht.
Option Explicit
Private MasterSheet As Worksheet
Public Sub ImportNewData()
Dim FileArray, varItem As Variant
Dim range_, tmpRange As Range
Dim Path_ As String
Dim ws As Worksheet
Dim wb As Workbook
Path_ = "Dein Ordnerpfad mit Dateien"
FileArray = FilesOfFolder(Path_)
Set MasterSheet = ThisWorkbook.Sheets(1)
Set range_ = MasterSheet.Range("D6:AN2500")
For Each varItem In FileArray
Set wb = Workbooks.Open(varItem)
Set ws = wb.Sheets(1)
Set tmpRange = ws.Range("A2:AK2500")
tmpRange.Copy range_
Application.CutCopyMode = False
Next varItem
End Sub
Private Function FilesOfFolder(ByVal Path_ As String) As Variant
Dim folder_, file_, fso As Object
Dim array_() As Variant
Dim Type_ As String
Dim counter As Long
If Dir(Path_, vbDirectory) = vbNullString Then Exit Function
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder_ = fso.GetFolder(Path_)
For Each file_ In folder_.Files
Type_ = GetFileType(file_.Name)
If FileIsValid(Type_) Then
ReDim Preserve array_(counter)
array_(counter) = file_.Path
counter = counter + 1
End If
Next file_
FilesOfFolder = array_
Set fso = Nothing
Set file_ = Nothing
Set folder_ = Nothing
End Function
Private Function GetFileType(ByVal FilePath As String)
GetFileType = Right(FilePath, Len(FilePath) - InStrRev(FilePath, "."))
End Function
Private Function FileIsValid(ByVal Type_ As String) As Boolean
Select Case Type_
Case "xlsx", "xls": FileIsValid = True
Case Else: FileIsValid = False
End Select
End Function

Anzeige
AW: Daten aus anderer Excel-Datei importieren
01.10.2017 14:51:29
Tobi
Hallo,
erst einmal vielen Dank für die Hilfe. Vorgesehen war eigentlich 75 neue Dateien zu erstellen, wieso macht dies für Sie keinen Sinn? Wie würde denn eine Lösung mit einer Masterdatei aussehen? Sind dann 75 Arbeitsblätter in dieser Masterdatei?
Das Problem ist, dass ich in der Vorlage nur 2 Arbeitsblätter mit den Namen 'Daten' und 'Auswertung' habe. Bei dem Reiter 'Auswertung' sind Diagramme, die auf die Zahlen im Arbeitsblatt 'Daten' zugreifen. Deshalb kann ich mir gerade keine Lösung mit einer kompletten Datei vorstellen.
Den Code werde ich trotzdem gleich ausprobieren, vielen Dank!
Grüße
Tobi
Anzeige
AW: Daten aus anderer Excel-Datei importieren
01.10.2017 22:27:42
Peter(silie)
Hallo,
in Foren kannst du das siezen seien lassen :)
Ok, also wenn du sagst, du brauchst unbedingt 75 eigenständige Dateien deren Inhalte man nicht in einer zusammenfügen/fassen kann, dann folgender Vorschlag:
Du brauchst:
- Makro Datei
- Deine Vorlagen Datei wo Daten importiert werden sollen
- 75 Dateien mit Daten
Ich schreibe dir den obigen Code so um, dass du nur noch folgendes machen musst:
- Ordner Pfad angeben wo die 75 Dateien liegen
- Pfad zur Vorlagen Datei
- Pfad wo die neu erstellen Dateien gespeichert werden sollen
Sollte etwas schief gehen, gibst du mir bescheid.
Anzeige
AW: Daten aus anderer Excel-Datei importieren
02.10.2017 00:09:39
Tobi
Das wär das Non-plus Ultra!
Dein Code von heute Mittag hat übrigens sehr gut funktioniert! Habe es geschafft ihn noch ein wenig zu ergänzen. Jetzt habe ich eine Vorlagendatei in der ich mit Schaltflächen die Daten einfügen und danach auch mit einer bestimmten Namenskonvention speichern kann. Nachteil dabei ist, dass in dem Pfad nur die Vorlage und eine Datei mit Daten liegen darf, sonst werden die Zellen einfach überschrieben.
Bin sehr gespannt auf deine Lösung und bin jetzt schon sehr dankbar! Die jetzige Lösung erspart mir nämlich auch schon viel Zeit.
AW: Daten aus anderer Excel-Datei importieren
02.10.2017 11:53:54
Tobi
Ich habe es selber geschafft! Ich hätte nie gedacht, dass ich es schaffe, aber ich habe es.
In meiner Lösung werden jedoch alle Daten aus den Dateien im aktuellen Pfad in die Vorlage kopiert, mit dem Dateinamen der Daten und einer Endung abgespeichert, die Zellen D6:AN2500 geleert und dann wird die nächste Datei geöffnet usw. So kann ich einen Ordner mit den 75 Dateien machen und nur einmal die Vorlage reinkopieren und eine Schaltfläche drücken!
Danke für deine Mühe, wenn du meinen Code mal sehen willst sag Bescheid. Viele Grüße
Anzeige
Super, freut mich!
02.10.2017 16:31:46
Peter(silie)
Hallo,
finde es wirklich toll, dass jemand mal die Sache selbst in die Hand nimmt.
Wenn du dir fremden Code durchlesen kannst und in der Laage bist, diesen zu erweitern
bzw. auf dich anzupassen, solltest du unbedingt am Ball bleiben, vor allem bei VBA nein.
Hast du bereits Erfahrungen in anderen Sprachen gemacht?
Deinen Code schau ich mir natürlich gerne an und ich freue mich,
dass ich behilflich seien konnte :)
AW: Super, freut mich!
03.10.2017 12:40:20
Tobi
Ja etwas Erfahrung habe ich durch Informatik in der Schule früher (HTML & Python) und Ingenieurinformatik (Eclipse) im Bachelorstudium ;)
Mein Code wird wahrscheinlich programmiertechnisch nicht sehr schön sein, aber er funktioniert und das reicht mir ja erstmal.
Jetzt habe ich nur noch eine letzte Frage, die man allerdings nicht unbedingt mit VBA lösen muss. Ich habe ja 75 verschiedene Dateien mit verschiedenen Dateinamen. Jetzt möchte ich das in den Zellen D2:D4 aus dem Dateinamen etwas ausgelesen wird. Bei einer Zelle habe ich es mit der Formel RECHTS() hinbekommen. Hast du eine Idee wie ich Text der in der Mitte des Dateinamens auslesen kann, wenn sich die Länge des Dateinamens jedoch ändern kann? Ich geb mal 2 Beispiele an wie die Dateien heißen dann wird es vielleicht deutlicher.
B1 6% 0,25-0,5mm 0,6bar
WB90 10% 0,4-0,8mm 1,0bar
Jetzt möchte ich z.B. in Zelle D2 immer die ersten Buchstaben bis zum % Zeichen haben, d.h. das B1 6% oder WB90 10% und in Zelle D3 0,25-0,5mm oder 0,4-0,8mm. Ist schwierig weil sich die Länge ändert.
Hier dann nochmal wie versprochen mein Code :)
Option Explicit
Private MasterSheet As Worksheet
Public Sub ImportNewData()
Dim FileArray, varItem As Variant
Dim range_, tmpRange As Range
Dim Path_ As String
Dim ws As Worksheet
Dim wb As Workbook
Dim Zeile As Long
Dim x As Long
Dim Los As Long
Dim Name As String
Dim Dateiname As String, Pfad As String
Dim file_ As Object
Dim u As Long
Path_ = ThisWorkbook.Path
FileArray = FilesOfFolder(Path_)
Set MasterSheet = ThisWorkbook.Sheets(1)
Set range_ = MasterSheet.Range("D6:AN2499")
For Each varItem In FileArray
Set wb = Workbooks.Open(varItem)
Set ws = wb.Sheets(1)
x = 1
Zeile = 2
With ws
While ws.Cells(Zeile, 2) 

Anzeige
AW: Super, freut mich!
03.10.2017 12:51:17
Tobi
Sorry für so eine blöde Frage, bin wohl noch nicht ganz nüchtern vom Oktoberfest gestern :D
Geht ja durch
=LINKS(A1;SUCHEN("%";A1))
Viele Grüße
Kein Problem :) Frohes Ausnüchtern
03.10.2017 13:16:46
Peter(silie)

Kein Problem :) Frohes Ausnüchtern
03.10.2017 13:16:48
Peter(silie)

Kein Problem :) Frohes Ausnüchtern
03.10.2017 13:16:49
Peter(silie)

AW: Kein Problem :) Frohes Ausnüchtern
03.10.2017 15:36:36
Tobi
Okay ich habe doch noch eine Frage.
Kann man den Code so schreiben, dass bei der letzten Datei die geöffnet wird nicht die Zellen D6:D2500 geleert werden? Dies passiert zwar nach dem speichern erst und man könnte die Datei ja schließen und wieder öffnen, aber schön wäre es wenn das bei der letzten nicht passiert.
Mir schwebt da If oder While vor, weiß aber nicht man auswerfen kann wie viele Dateien in einem Verzeichnis sind. Also If Nummer der bearbeiteten Dateien kleiner als Dateien im Verzeichnis.
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige