Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus...

Diskutiere und helfe bei Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus... im Bereich Microsoft Office im Windows Info bei einer Lösung; Guten Abend, ich habe ein Problem, bei dem ich Euch um Mithilfe zur Lösung bitte. In einer Datei befinden sich drei Tabellen mit Daten (Dat1, Dat2... Dieses Thema im Forum "Microsoft Office" wurde erstellt von Volker Hormuth, 20. Dezember 2016.

  1. Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus...


    Guten Abend,

    ich habe ein Problem, bei dem ich Euch um Mithilfe zur Lösung bitte.

    In einer Datei befinden sich drei Tabellen mit Daten (Dat1, Dat2 und Dat3), außerdem eine Tabelle Vorlage. Aus dieser Vorlagentabelle werden neue Tabellen generiert und benannt aus Spalte A der Dat1 Tabelle. Mein Problem besteht jetzt darin, diese neu angelegten Tabellen jeweils aus den Inhalten der drei Datentabellen zu befüllen. Als verbindendes Element dient die IDNr. Diese ist in jeder Datentabelle vorhanden und neu generierten Tabellen wurden nach der IDNr benannt.

    Für die eine erste Tabelle ist mir dieser Datentransfer nur durch Hardcodierung gelungen. Mein Ziel ist jedoch, diese Hardcodierung durch eine Variable zu ersetzen, die alle möglichen neu generierten Tabellen durchläuft und die jeweils zugehörigen Daten übernimmt. Trotz vieler Versuche gelingt mir dies nicht.

    Die Beispieldatei ist vereinfacht, das Original ähnelt im Weitesten einer Serienbrieferstellung.


    In Dropbox habe ich die Datei eingestellt.


    Für Eure Hilfestellung vielen Dank!!

    Volker


    https://www.dropbox.com/s/sw89phbiz13vp7r/Muster-Bef%C3%BCllenNeuAngelegterTabellenAusVorlage.xlsm?dl=0
     
  2. Andreas Killer Win User

    Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus Vorlage)

    Insoweit sind m.E. die Voraussetzungen für einen weiteren Entwicklungsschritt gegeben.
    Okay, geht los.

    Mach mal eine Kopie der Mappe1.xlsx und benenne Sie Mappe2.xlsx für den Test.

    Wir verschieben die Konfigurationsvariablen (denen wir in der Sub fixe Werte zugewiesen haben) in den Kopf der Sub und können diese so von außen vorgeben.

    Dabei ist zu beachten das man diese mit ByRef oder ByVal vorgeben kann, bei ByRef ändert sich die von außen übergebene Variable, bei ByVal nicht.

    Sub DatenImportieren(ByRef Dest As Range, ByVal SourceNames As String, ByVal FName As String)

    Dim Wb As Workbook

    Dim Source As Range



    'Datei liegt im gleichen Verzeichnis wie unsere

    FName = ThisWorkbook.Path & Application.PathSeparator & FName

    'Schreibgeschützt öffnen

    Set Wb = Workbooks.Open(FName, False, True)

    'Quelle referenzieren und jede Zelle einzeln abarbeiten

    For Each Source In Wb.ActiveSheet.Range(SourceNames)

    'Mal anzeigen wo die ist

    Debug.Print Source.Address(0, 0)

    'Wert in unsere Datei schreiben

    Dest.Value = Source.Value

    'Ziel eins weiter nach rechts

    Set Dest = Dest.Offset(, 1)

    Next

    'Datei zu, nicht speichern

    Wb.Close False

    End Sub

    Sub Main()

    Dim Ziel As Range



    'Das Ziel der Daten ist diese Zelle und...

    Set Ziel = Range("A2")

    '...importiere aus dieser Datei und...

    DatenImportieren Ziel, "B3,A1:A4,F2,D7:J7", "Mappe1.xlsx"

    '... aus dieser Datei

    DatenImportieren Ziel, "D4:H12", "Mappe2.xlsx"

    End Sub

    Das ist schon alles, das reicht für den Hausgebrauch völlig. So wird aus verschiedenen Dateien ein Datensatz.

    Will man mehrere Datensätze aus mehreren Dateien einlesen, dann muss man irgendwann dann einfach mal die Zielzelle eins runter und wieder nach links setzen um wieder bei Spalte A zu beginnen.

    Set Ziel = Ziel.Offset(1, 1 - Ziel.Column)

    Sind es ganz viele Dateien, dann kann man diese z.B. mit DIR suchen, schau dafür in die Hilfe, da ist ein Beispiel drin.

    Natürlich gibt es da dann ein kleines Problem, die Dateien müssen ja in der richtigen Reihenfolge abgearbeitet werden, werden aber meistens nicht so auf dem Datenträger erscheinen.

    Dann kann man diese in eine Matrix (Tabelle) einlesen und sortiert diese passend. Der Rest ist dann wieder FOR EACH... und wie das im Detail geht liegt im Sinne des Erfinders... Dir. .-)

    Andreas.
  3. Andreas Killer Win User

    Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus Vorlage)

    Nun, dann wäre ich für den nächsten Schritt bereit, falls Dich nicht bereits die Motivation zu helfen verlassen hat!?
    Was denn für ein nächster Schritt? Ist doch fertig so...

    Andreas.
  4. Andreas Killer Win User

    Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus Vorlage)

    Verbindung mit den Stammdaten sollen nun mittels der Vorlage in individuellen Tabellen dokumentiert werden. Ändert sich z.B. in der Kostenstruktur etwas, so ändern sich
    alle Schreiben
    Ich leg noch mal einen nach:

    Wenn sich die Daten in der Form und Anzahl nicht ändern und die Vorlage sich auch nicht ändert, dann bedeutet das ja das
    nur der Wert in irgendeinem der erzeugten Blätter sich ändert.

    In dem Fall kann man es auch einfacher haben wenn man statt des Wertes eine Formel in die Vorlage schreibt.

    Ersetze

    Dest.Value = Item.Value

    durch

    Dest.Formula = "=" & Item.Address(External:= True)

    Andreas.
  5. Volker Hormuth Win User

    Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus Vorlage)

    Hallo Liebe Community,

    in Ergänzung meiner Anfrage den bisherigen Code, der sich auch auf der Beispieldatei in Dropbox befindet.

    Vielleicht hilft dies bei der Lösung des Problems.

    Nochmals Vielen Dank!

    Volker

    Option Explicit
    Sub VorhandeneSchreibenBefüllen()



    'Bei der Datenübernahme aus den Datentabellen Dat1, Dat2 und Dat3 sollen die

    'unten hart codierten Dateinamen durch eine Variable ersetzt werden,

    'die jeweils den Wert von mycell annimmt

    '"Meier-A" soll also jeweils durch diese Variable ersetzt werden, s.u.,

    'die den ListRng durchläuft





    Option Explicit
    Sub VorhandeneSchreibenBefüllen()



    'Bei der Datenübernahme aus den Datendateien Dat1, Dat2 und Dat3 sollen die

    'unten hart codierten Dateinamen durch eine Variable ersetzt werden,

    'die jeweils den Wert von mycell annimmt

    '"Meier-A" soll also jeweils durch diese Variable ersetzt werden, s.u.,

    'die den ListRng durchläuft





    Dim ListWks As Worksheet

    Dim ListRng As Range

    Dim mycell As Range
    Dim c As Range 'c ist der gesuchte Begriff in Find



    Set ListWks = Worksheets("Dat1")
    With ListWks

    Set ListRng = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp))

    End With
    For Each mycell In ListRng.Cells
    'Datenübernahme aus Dat1

    Worksheets("Dat1").Activate

    Set c = Columns("A:A").Find(What:=mycell, LookIn:=xlValues, LookAt:=xlWhole)



    If Not c Is Nothing Then



    Worksheets("Meier-A").Range("A2").Value = c.Offset(0, 3).Value

    Worksheets("Meier-A").Range("A3") = c.Offset(0, 4).Value

    Worksheets("Meier-A").Range("A4") = c.Offset(0, 5).Value



    End If

    Set c = Nothing
    'Datenübernahme aus Dat2

    Worksheets("Dat2").Activate

    Set c = Columns("A:A").Find(What:=mycell, LookIn:=xlValues, LookAt:=xlWhole)

    If Not c Is Nothing Then

    Worksheets("Meier-A").Range("A6") = c.Offset(0, 1).Value

    Worksheets("Meier-A").Range("A7") = c.Offset(0, 2).Value

    Worksheets("Meier-A").Range("A8") = c.Offset(0, 3).Value

    Worksheets("Meier-A").Range("A9") = c.Offset(0, 4).Value

    End If

    Set c = Nothing
    'Datenübernahme aus Dat3

    Worksheets("Dat3").Activate

    Set c = Columns("A:A").Find(What:=mycell, LookIn:=xlValues, LookAt:=xlWhole)

    If Not c Is Nothing Then

    Worksheets("Meier-A").Range("A11") = c.Offset(0, 1).Value

    Worksheets("Meier-A").Range("A12") = c.Offset(0, 2).Value

    Worksheets("Meier-A").Range("A13") = c.Offset(0, 3).Value

    End If

    Set c = Nothing



    'Nächste befüllen bis Liste abgearbeitet ist

    Next mycell
    End Sub
  6. Andreas Killer Win User

    Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus Vorlage)

    Wie referenziere ich in diesem Code eine bestimmte Tabelle innerhalb der Quelldateien (Mappe1 oder Mappe2)?

    In Verbindung mit dem ersten Code zum Befüllen der Vorlage mittels benannten Zellen habe ich eine sehr gute Lösung meines Problems von Dir erhalten. Deine Ausführungen und die jeweils aufeinander aufbauenden Codebeispiele waren leicht für mich nachvollziehbar
    und verständlich. Der Lerneffekt entsprechend groß. Ich denke, ich kann dieses neue Wissen auch auf andere Problemstellungen übertragen und damit zukünftig eigenständig lösen.
    Das freut mit zu hören. :)

    Zu der Frage: Ich hol mal ein bisschen aus, für den Lerneffekt. .-)

    Innerhalb jeder Office-Anwendung gibt es überall eine Eltern-/Kind-Beziehung in den Objekten. Zu den Kindern kommt man (fast immer) über eine Collection (eine Auflistung) und zu den Eltern (fast immer) über die Parent-Eigenschaft. Fangen wir mal bei den
    Eltern an:

    Excel ist das Application-Objekt, davon gibt es nur eines.

    Das Application-Objekt hat u.a. die Workbooks-Collection enthält alle Workbook-Objekte, sprich alle geöffneten Dateien innerhalb der Anwendung.

    Ein Workbook-Objekt hat u.a. die Worksheets-Collection enthält alle Worksheet-Objekte, sprich alle Tabellenblätter die es innerhalb einer Datei gibt. (Innerhalb eine Datei kann es z.B. auch Diagramme geben die als eigenständiges Blatt dargestellt werden
    können, diese sind (zusammen mit den Worksheet-Objekten) in der Sheets-Collection enthalten. Da sich Sheets einfacher als Worksheets schreibt sind viele Programmierer faul und benutzen diese.)

    Ein WorkSheet-Object hat u.a. Cells-Collection enthält alle Range-Objekte, sprich alle Zellen innerhalb eines Tabellenblattes. (Eigentlich müsste die ja Ranges heißen, das ist aber historisch bedingt.)

    Diese Art Struktur geht noch tiefer (Zellen können z.B. eine Datengültigkeit (Validation-Objekt) oder Rahmen (Border-Objekt) haben), bzw. enthalten die Objekte andere Collections die andere Objekte beinhalten. Usw. usw. alles was Du auf Deinem Bildschirm
    siehst ist ein Objekt, nicht nur innerhalb von Excel, unsere gesamte PC-Struktur basiert darauf.

    Daraus ergibt sich eine Art Baum, das Application-Object-Model.

    Wie hangelt man sich nun da durch? Recht einfach, da alle diese Dinger Collections sind kann man sie auch nach dem gleichen Schema ansprechen:

    Eine Collection erwartet als Argument, eine Zahl oder einen String als Argument:

    Dim Ws As Worksheet

    Set Ws = Worksheets(1)

    Set Ws = Worksheets("Tabelle1")

    und liefert dann entweder das Nte Elemente in der Auflistung oder jedes dessen Name mit dem Argument übereinstimmt zurück.

    Der Witz dabei ist das sich die Collections ohne explizite Angabe eines übergeordneten Objektes immer auf das aktuelle Objekt beziehen, im Falle von Worksheets wäre das ActiveWorkbook. Wäre das nicht so dann müsste man immer diesen Wust schreiben:

    Dim R As Range

    Set R = Application.ActiveWorkbook.ActiveSheet.Range("A1")

    statt

    Dim R As Range

    Set R = Range("A1")

    um einfach nur auf die Zelle A1 zu referenzieren. Anders herum kann man so auf jedes beliebige Element innerhalb des Objekt-Baumes zugreifen, man muss nur richtig referenzieren, z.B.

    Dim R As Range

    Set R = Workbooks("PERSONAL.XLSB").Worksheets("Tabelle1").Range("A1")

    Im Code oben ist die Stelle schnell gefunden:

    For Each Source In Wb.ActiveSheet.Range(SourceNames)

    ersetze ActiveSheet einfach durch z.B. Worksheets("Whatever"), den String kannst Du natürlich auch in den Kopf verschieben.

    Machen wir zum Schluss noch kurz den Umkehrschluss, habe ich irgendwo mal eine Zelle (ein Range-Objekt) referenziert und brauche den Zugriff auf das Tabellenblatt (Worksheets-Objekt), dann bekommt man das mit der Parent-Eigenschaft (der Parent-Property):

    Dim R As Range

    Dim Ws As Worksheet

    Set R = Range("A1")

    Set Ws = R.Parent

    Debug.Print Ws.Name

    Das kannst Du mal so ausprobieren. Wenn Du das Application-Object-Model sehen willst, dann drück im VBA-Editor mal F2. Such mal z.B. nach Worksheet, dann siehst Du auf einen Blick es wo überall drin steckt.

    Andreas.
  7. User Advert


    Hi,

    willkommen im Windows Forum!
Thema:

Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus... - Microsoft Office

Die Seite wird geladen...

Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus... - Similar Threads - Übernahme Daten mehreren

Forum Datum

Daten nicht mehr vorhanden

Daten nicht mehr vorhanden: Hallo,ich habe heute das neueste Update von Windows 11 heruntergeladen und installiert. Dabei habe ich versehentlich vergessen, zwei Vorgänge zu beenden und habe die Frage, ob der Neustart...
Microsoft Office 24. April 2024

Keine Daten mehr vorhanden.

Keine Daten mehr vorhanden.: Guten Tag,Wir haben einen Folder geteilt mit einem anderen User, danach haben wir von diesem geteilten Ordner einen KopieJob in Onedrive gestartet in die eigenen Daten dieses anderen Users.Nun...
Microsoft Office 12. Januar 2024

Daten aus mehreren Tabellen in einer PivotTable zusammenführen

Daten aus mehreren Tabellen in einer PivotTable zusammenführen: Hi : Ich habe eine Auswertung mit Excel zu machen und ein kleines Problem.Ich habe Umfragen an mehrern Schulen durchgeführt und eine Freitextaufgabe u.A. gestellt. In der Auswertung habe ich aus...
Microsoft Office 28. Oktober 2022

Übernahme von Eingegebenen Daten in Excel

Übernahme von Eingegebenen Daten in Excel: Hallo Gemeinde, Im Unternehmen werden Mitarbeiter grundsätzlich mit Befristung eingestellt. Die Befristung kann in einem Zeitraum von 2 Jahren bis zu 4x vereinbart werden. 1. Frage: Mit...
Microsoft Office 30. Juli 2020

Übernahme einer Excel-Tabelle nach Word

Übernahme einer Excel-Tabelle nach Word: Hallo und guten Tag für ein Druckwerk muss ich eine Excel-Tabelle wegen ihres Formats um 90° nach links gedreht in ein Word-Dokument einbauen. Wie kann ich das am unkompliziertesten machen. Ich...
Microsoft Office 31. Oktober 2019

Es ist bereits eine Datei ... vorhanden.

Es ist bereits eine Datei ... vorhanden.: Hallo zusammen, ich habe den Inhalt meines OneDrive-Ordners auf eine externe Festplatte kopiert und anschließend diesen Pfad als neuen zu synchronisierenden Ordner für die...
OneDrive 16. September 2017

Vorschaubilder werden nicht mehr generiert

Vorschaubilder werden nicht mehr generiert: Guten Tag, seit einigen Tagen werden weder in der App noch in der mobilen Version von OneDrive meine Vorschaubilder generiert. Ursprünglich dachte ich es wäre lediglich ein Problem der App, aber...
OneDrive 4. September 2017
Übernahme von Daten aus mehreren Datendateien in bereits vorhandene Tabellen (generiert aus... solved
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.