Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Daten aus Tabelle auslesen und in Tab. schreiben

Daten aus Tabelle auslesen und in Tab. schreiben
25.06.2019 18:51:56
reiner
Hallo Excel-Forum,
ich möchte in mehreren Tabellenblättern Berechnungen durchführen, für die die Input-Parameter aus einem "Datenspeicher" stammen. Auch die Ergebnisse sollen in den Datenspeicher geschrieben werden, um für weitere Berechnungen zur Verfügung zu stehen. Der Datenspeicher ist eine Tabelle: die Zeilen heißen Parameter, die Spalten Datensätze. Jeder Parameter und jeder Datensatz ist einmalig.
Innerhalb des Datenspeichers sollen keine Berechnungen stattfinden.
Den Import meiner Parameter in die Berechnungstabellenblätter realisiere ich mit INDEX + VERGLEICH.
Um Ergebnisse in den Datenspeicher zurück schreiben zu können, suche ich quasi die inverse Version von INDEX + VERGLEICH.
Die Aufgabe ist sinngemäß: Schreibe die Parameter a, q und x an die entsprechenden Stellen in Datensatz X, Y und Z im Tabellenblatt "Datenspeicher".
Ich habe ein Beispiel gebaut und hoffe es ist aussagekräftig: https://www.herber.de/bbs/user/130577.xlsx
Mir ist klar, dass mir das keiner fertigstellt. Ich brauche jemand, der/die mich in die richtige Richtung schickt.
Ich glaube man muss folgende Dinge tun:
1. Ein Array anlegen, das die IDs aller Zieldatensätze enthält, aber leere Spalten ignoriert
2. eine Matrix anlegen, die in der erstan Spalte die Parameternamen und in jeder weiteren Spalte die Zahlenwerte enthält
3. im Array jede ID durchgehen und die Zahlenwerte aus der Matrix an die zugehörige Stelle im Datenspeicher schreiben.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Tabelle auslesen und in Tab. schreiben
26.06.2019 12:55:46
reiner
OK, ich glaube das wird so nichts.
Ich habe das ganze mal ein wenig verändert und hoffe weiter auf Unterstützung. Ich habe nämlich leider zu wenig Ahnung von VBA und die Aufzeichnung bringt mich nirgendwo hin.
Es ist sicher cleverer die Datensätze in den Datenspeicher zu importieren.
Die Struktur der Tabellenblätter "Berechnung X" habe ich so geändert, dass die vollständigen Parameterlisten aller zu übertragenden Datensätze ab Zeile 33 aufgeführt sind.
Ich habe mir das so gedacht:
1. in Tabellenblatt Datenspeicher werden alle zu importierenden Datensatz-IDs händisch angelegt
2. Das Makro geht jede Zelle in Zeile 7 durch und sucht den Inhalt jeder Zelle in allen Tabellenblättern der Datei ab Zeile 33.
3. wird eine Datensatz-ID gefunden, werden alle 16 folgende Zellen kopiert und die Werte in die entsprechenden 16 Zellen in Tabllenblatt Datensätze geschrieben.
4. wird ein Inhalt nicht gefunden, springt das Makro in die nächste Zelle in Zeile 7.
neue Datei hier: https://www.herber.de/bbs/user/130595.xlsx
Bitte um Hilfe, ich habe keine Ahnung wie ich da rangehen soll. Ich würde es ja ohne Makros lösen, aber da mehrere Berechnungen in dieselben Zellen schreiben müssen, geht das nur so.
hoffnungsvolle Grüße
Anzeige
AW: Daten aus Tabelle auslesen und in Tab. schreiben
26.06.2019 21:29:34
Matthias
Moin!
ICh würde an deiner Stelle alles im VBA berechnen lassen. Wenn du aber bei deinem Aufbau bleiben willst, dann probiere es mal mit dem Code hier:
Option Explicit
Sub eintragen()
Dim blatt
Dim datensatz
Dim zeilen As Long, zeile As Long, spalten As Long, spalte As Long
Dim suchergeb
Dim datenlange As Long
Dim erster
datenlange = 16
zeilen = Worksheets("Datenspeicher").Cells(Rows.Count, 2).End(xlUp).Row
spalten = Worksheets("Datenspeicher").Cells(7, Columns.Count).End(xlToLeft).Column
For spalte = 2 To spalten
datensatz = Worksheets("Datenspeicher").Cells(7, spalte)
For Each blatt In Worksheets
'nur Blätter mit Berechnung im Namen
If InStr(1, blatt.Name, "Berechnung", vbTextCompare) > 0 Then
Set suchergeb = blatt.Cells.Find(datensatz, , , xlWhole)
If Not suchergeb Is Nothing Then
erster = suchergeb.Address
Do
If suchergeb.Row > 33 Then
suchergeb.Resize(datenlange, 1).Copy
Worksheets("Datenspeicher").Cells(7, spalte).Resize(datenlange, 1). _
PasteSpecial xlPasteValues
End If
Set suchergeb = blatt.Cells.FindNext(suchergeb)
Loop While suchergeb.Address  erster
End If
End If
Next
Next
Worksheets("Datenspeicher").Cells(7, 1).Select
MsgBox "Fertig"
End Sub

VG
Anzeige
AW: Daten aus Tabelle auslesen und in Tab. schreiben
27.06.2019 00:18:47
reiner
Matthias! Danke!
Es funktioniert auch in der eigentlichen Datei. Großartig!
Du hast mich neugierig gemacht mit dem "alles im VBA berechnen lassen". Ich erhoffe mir eine Transparenz der Berechnungen durch das wegschreiben der Zweischenergebnisse. Meinst du das ist Quatsch?
Worauf ich gern verzichten würde ist das Zwischenspeichern der Ergebnisse am Ende der Tabelle. Aber irgendwas ist ja immer.
In Dankbarkeit - gute Nacht...
Anzeige
AW: Daten aus Tabelle auslesen und in Tab. schreiben
27.06.2019 12:26:51
Matthias
Moin!
Ob irgendwas Quatsch ist, kann ich nicht einschätzen. Es kommt ja immer drauf an, was man braucht. Evtl. sind manche Berechnungen umständlich. ICh weiß jetzt aber auch nicht, wie deine Daten aufeinander aufbauen. Im Blatt 2 waren ja glaube ich Daten, die im Blatt 1 berechnet wurden. Wenn sich dass dann so forsetzt, wird es evtl. schwierig. Ansonsten würde ich meist vorschlagen, die Daten einzulesen, im Code zu verarbeiten / berechnen und dann zurück zu schreiben. Dadurch würdest du dir das aufschreiben der einzelnen Berechnungen in den Blätter sparen. Und wenn man das fortlaufend berechnet, hat man die Daten von deinem Blatt1 zuerst und kann dann für die BErechnung aus Blatt 2 darauf zurcükgreifen. Nachteil ist allerdings, dass man dann nichts mehr sieht - außer das Endergebnis.
VG
Anzeige
AW: Daten aus Tabelle auslesen und in Tab. schreiben
28.06.2019 15:23:04
reiner
Alles klar. Die Berchnungen in den Tabellenblättern greifen teils auf Ergebnisse anderer Berechnungen zurück und beinhlten Faktoren, die in Bereichen frei gewählt werden müssen, es wäre sicher schwierig soeine Optimierung in ein Makro zu packen.
Danke nochmals für deine Unterstützung. Allein mit Tutorials wäre ich da nicht hingekommen.
Fall möglich: Kannst du mit erklären was hier passiert?
Set suchergeb = blatt.Cells.Find(datensatz, , , xlWhole)
Wenn nicht auch nicht schlimm.
Beste Grüße!
Anzeige
;

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 Excel-Tabelle auslesen und in eine neue Zelle schreiben


Schritt-für-Schritt-Anleitung

Um Werte aus einer Excel-Tabelle auszulesen und in eine neue Zelle zu schreiben, kannst Du die folgenden Schritte befolgen:

  1. Datenstruktur vorbereiten: Stelle sicher, dass Deine "Datenspeicher"-Tabelle gut strukturiert ist. Die Zeilen sollten Parameter und die Spalten Datensätze enthalten.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Sub eintragen()
        Dim blatt
        Dim datensatz
        Dim zeilen As Long, zeile As Long, spalten As Long, spalte As Long
        Dim suchergeb
        Dim datenlange As Long
        Dim erster
        datenlange = 16
        zeilen = Worksheets("Datenspeicher").Cells(Rows.Count, 2).End(xlUp).Row
        spalten = Worksheets("Datenspeicher").Cells(7, Columns.Count).End(xlToLeft).Column
    
        For spalte = 2 To spalten
            datensatz = Worksheets("Datenspeicher").Cells(7, spalte)
            For Each blatt In Worksheets
                If InStr(1, blatt.Name, "Berechnung", vbTextCompare) > 0 Then
                    Set suchergeb = blatt.Cells.Find(datensatz, , , xlWhole)
                    If Not suchergeb Is Nothing Then
                        erster = suchergeb.Address
                        Do
                            If suchergeb.Row > 33 Then
                                suchergeb.Resize(datenlange, 1).Copy
                                Worksheets("Datenspeicher").Cells(7, spalte).Resize(datenlange, 1). _
                                PasteSpecial xlPasteValues
                            End If
                            Set suchergeb = blatt.Cells.FindNext(suchergeb)
                        Loop While suchergeb.Address <> erster
                    End If
                End If
            Next
        Next
        Worksheets("Datenspeicher").Cells(7, 1).Select
        MsgBox "Fertig"
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt."

    • Lösung: Überprüfe, dass der Name des Arbeitsblatts korrekt geschrieben ist und dass es existiert.
  • Fehler: "Find-Methode konnte nicht gefunden werden."

    • Lösung: Stelle sicher, dass die Werte, nach denen Du suchst, tatsächlich in der Tabelle vorhanden sind.
  • Fehler: "Falscher Zellbereich"

    • Lösung: Kontrolliere, ob die Zeilen- und Spaltenangaben im Code an Deine Tabelle angepasst sind.

Alternative Methoden

Eine andere Möglichkeit, Werte aus einer Excel-Tabelle auszulesen, ist die Verwendung von Formeln wie INDEX und VERGLEICH. Diese Formeln können genutzt werden, um bestimmte Daten aus Excel-Tabellen auszulesen, ohne auf VBA zurückzugreifen.

  1. INDEX und VERGLEICH: Nutze =INDEX(A1:C10, VERGLEICH("Suchbegriff", A1:A10, 0), 2) um einen bestimmten Wert auszulesen.

  2. SVERWEIS: Diese Formel kann verwendet werden, um Werte aus einer bestimmten Tabelle auszulesen: =SVERWEIS("Suchbegriff", A1:C10, 2, FALSCH).


Praktische Beispiele

  1. Einzelne Werte aus einer Tabelle auslesen: Angenommen, Du möchtest den Wert in der Zelle B2 aus der Tabelle "Datenspeicher" in eine neue Zelle kopieren. Du könntest den VBA-Code wie folgt anpassen:

    Worksheets("Zielblatt").Cells(1, 1).Value = Worksheets("Datenspeicher").Cells(2, 2).Value
  2. Daten aus mehreren Tabellenblättern auslesen: Du kannst eine Schleife erstellen, um Werte aus mehreren Blättern auszulesen und in einer neuen Zelle zu speichern.


Tipps für Profis

  • Verwende Fehlerbehandlung: Füge On Error Resume Next in Deinen Code ein, um Fehler abzufangen und das Makro weiterlaufen zu lassen.

  • Nutze Arrays: Speichere Daten in Arrays, um die Performance zu verbessern, insbesondere wenn Du mehrere Werte aus einer Tabelle auslesen möchtest.

  • Dokumentiere Deinen Code: Füge Kommentare hinzu, um den Code für Dich und andere verständlicher zu machen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Werte aus einer Tabelle auslesen? Du kannst eine Schleife verwenden, um durch die Zellen zu iterieren und jeden Wert einzeln auszulesen.

2. Ist es besser, VBA oder Formeln zu verwenden? Das hängt von Deinem Anwendungsfall ab. Wenn Du viele Berechnungen durchführen möchtest, ist VBA oft effizienter, während Formeln einfacher zu implementieren sind.

3. Wie kann ich Daten aus einer anderen Tabelle auslesen? Du kannst den Namen der anderen Tabelle im VBA-Code anpassen oder die entsprechenden Formeln verwenden, um auf die Daten zuzugreifen.

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