Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten aus anderer Datei
13.03.2017 13:17:29
Annika

Hallo Profis!
ich habe folgende Problemstellung:
Ich habe zwei Dateien. Datei A ist meine Quelldatei, Datei B die Zieldatei.
A hat mehrere Tabellenblätter, die inhaltlich alle gleich aufgebaut sind.
In B möchte ich nun alle Daten der relevanten Spalten abbbilden.
Und zwar sollen jeweils alle Daten aus allen Tabellen aus Spalte B untereinander sein, also aus Spalte B und so weiter.
Das Problem ist außerdem, dass sich die Datenreihen aus Datei A stetig erweitern.
In der Beispielexcel ist es verständlicher zu entnehmen:
https://www.herber.de/bbs/user/112147.xlsx
In Datei B möchte ich dann alle Werte über Pivot auswerten. Aber genau dafür benötige ich ein Makro/ eine Anweisung zum Daten holen.
Nach Ewigkeiten im WWW komme ich nicht mehr weiter...
Ich hoffe, ihr schon!
Danke!
Grüße,
Annika

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus anderer Datei
13.03.2017 13:39:47
Max2
Hallo,
anbei deine Mappe mit Knopf auf dem Blatt "neueDatei".
Einfach den Knopf drücken und gucken was ob es so passt.
Den Code steht in "Modul1", einfach Alt-F11 drücken.
Hier Mappe: https://www.herber.de/bbs/user/112148.xlsm
AW: Daten aus anderer Datei
13.03.2017 14:07:52
Annika
Hallo Max2,
danke, für die schnelle Antwort!
das sieht schon echt super aus, wow!
was kann ich aber machen, um die Daten in der neuen Datei zu aktualiseren? Im Prinzip müsste ja alles gelöscht und wieder eingefügt warden oder?
Und kann man das in deinem Makro gleich für die Kriterien 2, 5 und 12 gleichzeitig machen?
Grüße,
Annika
Anzeige
Hier die Datei
13.03.2017 14:51:13
Max2
Hallo,
hier die angepasste Datei: https://www.herber.de/bbs/user/112150.xlsm
Es werden jetzt die Daten aus K2, K5, K12 genommen und vorher wird der
alte Bereich auf "neueDatei" gelöscht.
AW: Hier die Datei
13.03.2017 15:24:26
Annika
Hallo Max2,
klasse, jetzt ist es schon fast perfekt, danke!
Díe Tabelle "NeueDatei" soll nun bei mir tatsächlich eine eigenständige Excel-Datei sein.
Sie heißt "Datenauswertung" und direkt in die erste Tabelle "Daten" soll das Makro diese Daten ablegen.
Das Makro muss ich ja in die Datei "Datenauswertung" legen. Doch wie genau heißt nun innerhalb des Makros der Verweis zu der Quelldatei "Bestellliste"?
und noch eine Frage: du hast dem Button das Makro Daten in Blatt zugewiesen. Das ist as Makro Daten eintragen oder?
Danke!
Grüße,
Annika
Anzeige
Warum trennen
13.03.2017 15:31:50
Max2
Wozu die Auswertung und die Quelldateien trennen?
Wenn diese wirklich getrennt werden sollen, dann brauchen die Quelldateien feste
Speicherorte ansonsten geht es nicht... also es geht schon aber dann müsste man die Dateien
per Dialog auswählen und der Code müsste nochmal geändert werden.
Ich würde da eher noch ein kleines Makro reinschreiben was mir die Datenauswertung
als eine .xls Datei auf den Desktop auswirft oder sonst wohin.
Dadurch hast du nur die Relevanten Daten als Datei ohne Programmierung und kannst diese an beliebig viele Leute ohne Probleme weitergeben.
Ja richtig, ich habe die Module umbenannt damit man gleich weiß welches Makro wo drinnen ist.
Der Sub im Modul Daten_entfernen wird am Anfang des Subs Daten_in_Blatt aufgerufen.
Anzeige
AW: Warum trennen
13.03.2017 15:59:16
Annika
Hallo Max2,
das ist eine gute Idee!
Die Datenauswertung bleibt in der Quelldatei-Excel und das explizite Blatt wird nochmal als .xls ausgeworfen. Jetzt stellt sich mir nur noch die Frage, wie ich das Blatt auswerfe. Gibt es eine elegantere Lösung als Rechtsklick-Verschieben/Kopieren---?
Danke!
Grüße,
Annika
Hier nochmal Datei
13.03.2017 16:13:01
Max2
Klar gibt es die ;)
Anbei wieder die Datei, jetzt mit Button "speichern".
Habe die Buttons einfach Quick And Dirty in die Datei eingefügt.
Da musst du dir nochmal Gedanken machen wo die hinsollen oder ob da Überhaupt welche seien sollen.
Hier Datei: https://www.herber.de/bbs/user/112152.xlsm
Der Code befindet sich im Modul "Blatt_Exportieren" im Sub "blatt_auf_desktop".
Er kopiert einfach das angegebene Blatt und alle Zellen (also deren Inhalte u. Formate).
Am Schluss speichert das Makro einfach die Datei mit dem Namen "Datenauswertung + Datum" auf
dem Desktop des Users
Anzeige
AW: Hier nochmal Datei
13.03.2017 16:28:19
Annika
Hallo Max2,
mega gut!!!
Das einzige, das nicht klappt, ist das Speichern. Wenn ich die Datei unter dem Pfad R:\xxx\aaa\Datenauswertung abspeichern möchte, sagt Excel: Das Makro 'Mappe3!blatt_auf_desktop' kann nicht ausgeführt werden.
So habe ich den Code geändert:
ActiveWorkbook.SaveAs Filename:= _
"\R:\xxx\aaa\Datenauswertung_" & vDate & ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
weißt du, wo der Fehler liegt?
danke!
Grüße,
Annika
Backslash
13.03.2017 16:50:09
Max2
"\R:\xxx\aaa\Datenauswertung_" & vDate & ".xls"
Der erste Backslash müsste Zuviel sein.
Es müsste mit: "R:\xxx\aaa\Datenauswertung_" & vDate & ".xls" funktionieren
Anzeige
AW: Backslash
13.03.2017 17:09:00
Annika
Hallo Max2,
vielen Dank, dass du dir heute so viel Zeit genommen hast!
Es funktioniert jetzt.
Vielen Dank!
Schönen Abend Dir!
Grüße,
Annika
Geschlossen
13.03.2017 17:20:04
Max2
Kein Problem und Danke für deine Rückmeldung!
AW: Doch noch ein Problem
14.03.2017 09:50:14
Annika
Hallo Max2,
ich habe gerade nochmal den Code angepasst (da ich noch ein paar mehr Spalten brauchte) und nun ist mir noch was aufgefallen. In meiner Quelldatei gibt es die Tabellen Inhaltsverzeichnis, Fragen, Beispiel, etc. aus diesen sollen und können natürlich nicht die Daten gezogen werden. was kann ich noch in das Makro schreiben, dass diese Tabellen übergangen werden?
Vielen Dank!
Grüße,
Annika
Anzeige
Hier die Lösung dafür
14.03.2017 10:22:41
Max2
Hallo,
ersetzte einfach den vorhandenen Sub "Daten_in_Blatt" durch diesen:
Option Explicit
Sub daten_in_Blatt()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim lzeile As Long
Dim lzeile2 As Long
Dim rng As Range
Dim rng2 As Range
Dim wsAnzahl As Integer
Dim i, j
Dim x
Dim tabuTabellen '//Neu!
Dim y
Dim bool As Boolean
Dim count As Integer
'//Alte Daten entfernen
Call daten_loeschen
'//Anzahl der vorhandenen Sheets
wsAnzahl = ThisWorkbook.Sheets.count
i = 1: j = 0
x = Array(2, 5, 12)
tabuTabellen = Array("neueDatei", "Inhaltsverzeichnis", "Fragen", _
"Beispiel", "etc.") '//Neu!
Application.ScreenUpdating = False
Do
Set ws = ThisWorkbook.Sheets("neueDatei")
'//Neu!
bool = False
For y = 0 To UBound(tabuTabellen)
If ThisWorkbook.Sheets(i).Name = tabuTabellen(y) Then
count = count + 1
If count > 0 Then
bool = True
count = 0
End If
End If
Next y
If bool = True Then GoTo nextBlatt
Set ws2 = ThisWorkbook.Sheets(i)
'//Setzen des zu kopierenden Bereichs
'//anschließend Bereich kopieren
With ws2
lzeile2 = .Cells(.Rows.count, x(j)).End(xlUp).Row
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))
lzeile2 = lzeile2 - 9
rng2.Copy
'//Setzten des Bereichs in dem anderer Bereich eingefügt wird
'//und einfügen der Daten in Bereich
With ws
lzeile = .Cells(.Rows.count, x(j)).End(xlUp).Row
Set rng = .Range(.Cells(lzeile + 1, x(j)), _
.Cells((lzeile + lzeile2), x(j)))
rng.PasteSpecial Paste:=xlPasteAll, _
Operation:=xlPasteSpecialOperationNone
Application.CutCopyMode = False
.Range("A2").Select
End With
End With
nextBlatt:
i = i + 1
If i > (wsAnzahl) Then
j = j + 1
i = 1
End If
Loop Until j > 2
Application.ScreenUpdating = True
End Sub
Alles was ich hinzugefügt habe, habe ich mit dem Kommentar '//Neu "markiert"
Ist wirklich keine schöne Lösung aber sie funktioniert
Anzeige
AW: Hier die Lösung dafür
14.03.2017 10:36:38
Annika
Hallo Max2,
danke vielmals!
ein kleines Problem ist noch:
ich habe viele Spalten aus denen ich die Daten holen möchte.
ich habe sie unter :
wsAnzahl = ThisWorkbook.Sheets.count
i = 1: j = 0
x = Array(3, 11, 12, 13, 14, 24, 26, 27, 33, 37, 38, 43, 44, 45, 46)
reingeschrieben. Doch leider werden nur die Daten für die Spalten 3, 11 und 12 rausgeholt. muss ich das anders eingeben?
Danke!
Grüße,
Annika
Das geht ganz schnell!
14.03.2017 10:53:20
Max2
Hallo,
das liegt am Fettmarkierten im Code:
nextBlatt:
i = i + 1
If i > (wsAnzahl) Then
j = j + 1
i = 1
End If
Loop Until j > 2
Application.ScreenUpdating = True
End Sub
Dies ist das Abbruchkriterium!
Ändere dieses einfach in: "Loop Until j > UBound(x)"
UBound(x) bedeutet: Upper Bound als größter/höchster Index des Arrays.
x ist dein Array mit den Spalten die du haben willst, j ist der Index,
bzw. der Zähler der, falls i größer als die Anzahl der vorhandenen Blätter ist,
sich um eines erhöht und somit das ganze erneut ausgeführt wird mit
der nächsten Spalte die im Array eingetragen wurde.
Anzeige
AW: Das geht ganz schnell!
14.03.2017 11:10:30
Annika
Hallo Max2,
das klappt gut!
Merkwürdigerweise wird in einer Spalte die Kriteriumsüberschrift eine Zeile weiter oben ausgegeben, also statt dass alles ab Zeile 2 startet steht in Zeile 1 Kriterium 37 und in Kriterium 44, 45 werden pro kopiertem Blatt die Kriteriumsüberschriften angegeben. überall anders klappt es richtig...
weißt du woran das liegt?
und ich hätte gedacht, dass wenn ich möchte, dass alles in der dritten Zeile ausgegeben wird, ich statt .Range("A2").Select
.Range("A3").Select
schreibe, das klappt leider nicht :/
Grüße,
Annika
Anzeige
Probleme über Probleme
14.03.2017 11:40:55
Max2
Durch Range.Select gelangt man später lediglich zu eben dieser Zelle.
Das ist nur da damit man nach Abschluss des Makros nicht irgendwo in der Pampa landet.
Das kopieren der Werte findet hier statt:
            With ws2
lzeile2 = .Cells(.Rows.count, x(j)).End(xlUp).Row
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))
lzeile2 = lzeile2 - 9
rng2.Copy
In der Beispiel Mappe die du mir gesendet hast, begannen die zu kopierenden Werte ab der Zeile 10!
Möchtest du also den zu kopierenden Bereich ändern musst du folgenden Wert, hier Fett markiert, abändern:
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))

Um das Problem richtig nachvollziehen zu können wäre die aktuelle Datei von dir sehr
hilfreich.
Bitte denke aber daran, immer alle Sensiblen Daten zu entfernen bzw. zu ersetzten!
AW: Das geht ganz schnell!
14.03.2017 11:42:18
Annika
Hallo Max2,
eine Frage hat sich mir neben den gerade gestellten noch aufgetan:
können nur die Werte und nicht die dahinterliegenden Formeln rauskopiert werden?
Jetzt fehlt nämlich bei manchen Daten der Bezug :/
DANKE!
Grüße,
Annika
AW: Das geht ganz schnell!
14.03.2017 12:21:50
Max2
Durch Paste:=xlPasteAll wird alles kopiert, auch die Formeln.
Ändert man Paste:=xlPasteAll in Paste:=xlPasteValues, dann werden nur noch die Zellinhalte
kopiert und sonst nichts!
Im Fettmarkierten Teil geht es um den kursiven Teil.
Dieser ist bei dir noch xlPasteAll, ändere xlPasteAll einfach in xlPasteValues ab!
            '//Setzten des Bereichs in dem anderer Bereich eingefügt wird
'//und einfügen der Daten in Bereich
With ws
lzeile = .Cells(.Rows.count, x(j)).End(xlUp).Row
Set rng = .Range(.Cells(lzeile + 1, x(j)), _
.Cells((lzeile + lzeile2), x(j)))
rng.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationNone

AW: Das geht ganz schnell!
14.03.2017 12:55:00
Annika
Hallo Max2,
dass die Daten in der Quelldatei erst ab Zeile 10 starten ist richtig.
Ich würde es schön finden, wenn die Datenauswertung in der Zieltabelle ab der Zeile 3 beginnt, nicht wie jetzt Zeile 2. das bekomme ich irgendiwe nicht hin.
Hier ist die Datei, wie es aktuell nach der Datenauswertung aussieht:
https://www.herber.de/bbs/user/112171.xlsx
komisch ist, dass manchmal die Kriterien mit reinkopiert werden, obwohl sie vor Zeile 10 kommen.
Danke für deine Mühe!
Grüße,
Annika
AW: Das geht ganz schnell!
14.03.2017 13:31:38
Max2
Hallo,
habe dir das ganze jetzt so angepasst, dass die Daten ab Zeile3 eingefügt werden,
außerdem sollten jetzt die Kriterien nicht mehr übernommen werden.
Hier meine Datei: https://www.herber.de/bbs/user/112176.xlsm
AW: Das geht ganz schnell!
14.03.2017 14:55:24
Annika
Hallo Max2,
klasse, vielen vielen Dank!
Grüße,
Annika
AW: Das geht ganz schnell!
14.03.2017 16:42:17
Annika
Hallo Max2,
es werden immernoch drei Kriterien angezeigt, aber die lösche ich einfach manuell raus.
eine allerletzte Frage habe ich noch:
was bedeutet dieser Code?
If lzeile2 <= 0 Then
lzeile2 = 0
ElseIf lzeile2 = 10 Then
lzeile2 = 1
Else
lzeile2 = lzeile2
End If
rng2.Copy
Danke!
Grüße,
Annika
AW: Das geht ganz schnell!
14.03.2017 16:56:11
Max2
Wenn letzte Zeile im Worksheet kleiner gleich 0 ist dann
ist lzeile2 gleich 0
Wenn letzte Zeile Im Worksheet gleich 10 ist dann
ist lzeile2 gleich 1
Sonst
ist lzeile2 gleich lzeile2
*Wenn
Range kopieren
Genau das habe ich eingebaut um das ungewollte kopieren der Kriterien zu vermeiden...
so ein Mist...
Vielleicht fällt mir ja noch ein wie man das ganze zu 100% ausschließen kann.
Denn das ist eigentlich alles andere als schwer....
AW: Das geht ganz schnell!
14.03.2017 17:02:01
Annika
Hallo Max2,
klasse danke!
jetzt verstehe ich langsam den Code :)
Komischerweise kommt es nur zwei mal vor, dass die Kriterien mit drin stehen, obwohl die ja in Zeile 9 stehen und wir erst ab Zeile 10 abfragen.
Danke!
Grüße,
Annika
Hoffentlich Lösung
14.03.2017 22:11:07
Max2
Hallo,
ich habe mir das ganze nochmal angeschaut.
Probier es mal damit:
        '//Setzen des zu kopierenden Bereichs
'//anschließend Bereich kopieren
With ws2
lzeile2 = .Cells(.Rows.count, x(j)).End(xlUp).Row
If lzeile2 = 9 Then lzeile2 = lzeile2 + 1
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))
If lzeile2 
Mit dem Fett markierten sollte jetzt verhindert werden dass das Kriterium
mit übernommen wird...
AW: Hoffentlich Lösung
20.03.2017 10:25:27
Annika
Hallo Max2,
danke, jetzt funktioniert alles einwandfrei!
Vielen Dank!!!
Schöne Woche Dir! :)

328 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige