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

Excel-Bericht aus Daten erstellen

Forumthread: Excel-Bericht aus Daten erstellen

Excel-Bericht aus Daten erstellen
Martin
Hallo liebe Spezis,
in der hochgeladenen Datei
https://www.herber.de/bbs/user/68908.zip
habe ich in der Tabelle 1 ein Formular, welches so bzw. so ähnlich aussehen soll und in Tabelle 2 die Daten, die in den Bericht je Mitarbeiter eingetragen werden sollen, d.h. es soll nach der Eingabe eines Zeitraums für jeden Mitarbeiter ein solcher Bericht entstehen (Beispiel: vom 01.03.2010 bis 15.03.2010 alle Daten je Mitarbeiter auf jeweils ein Berichtsblatt)
In der Tabelle 1 habe ich auch eingetragen, in welchen Spalten die Daten stehen sollen.
Es wäre prima, wenn mir jemand bei dem Vorhaben helfen könnte.
Vielen Dank!
Gruß
MARTIN
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Excel-Bericht aus Daten erstellen
13.04.2010 15:26:12
fcs
Hallo Martin,
das sprengt fast ein wenig den Rahmen für Hilfe via Forum.
Folgende Empfehlungen:
1. Vereinfache dein Formular in soweit, dass du das feste Wochentagsschema 5 mal Mo bis Sa wegläßt und die Reisen "einfach" untereinander auflistest.
2. Nimm die eindeutige Personalnummer mit ins Formular auf. Diese ist dann auch die Referenz für die Übernahme der Informationen vom Blatt Daten ins Formular.
Nachfolgend ein Makro, dass die relevanten Daten erst in eine daten-Array einliest und anschliessend je PersonalNr ins Formular überträgt und druckt (im Moment) nur die Seitenvorschau (Papier sparen). Die Formatierungen im Formular muss du z.T. noch anpassen, Die Ergebnissummenformeln ergänzen.
Gruß
Franz
Option Explicit
Private wksData As Worksheet, wksForm As Worksheet
Private arrData()
Sub Formular()
Set wksData = Worksheets("Daten")
Set wksForm = Worksheets("Formular")
If DatenEinlesen > 0 Then
Call Daten_ins_Formular
MsgBox "Ffertig!"
Else
MsgBox "Keine Daten für den Zeitraum gefunden"
End If
End Sub
Private Function DatenEinlesen() As Long
Dim lZeile As Long, iArr As Long, dDatumVon As Date, dDatumBis As Date
'Datensätze einlesen, die innerhalb des Datumbereichs liegen
dDatumVon = wksForm.Range("G1")
dDatumBis = wksForm.Range("H1")
iArr = 0
With wksData
For lZeile = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
If .Cells(lZeile, 2) >= dDatumVon And .Cells(lZeile, 2) 

Anzeige
AW: Excel-Bericht aus Daten erstellen
14.04.2010 13:56:38
Martin
Hallo Franz,
vielen, vielen Dank für dieses Makro, ich fange gleich an zu "basteln" und melde mich sobald alles funktioniert.
Vielen dank nochmal!
Gruß
MARTIN
AW: Excel-Bericht aus Daten erstellen
19.04.2010 12:11:30
Martin
Hallo Franz,
das ist ja klasse, was Du da gezaubert hast. Meine Hochachtung!
Man lernt eben immer ein Stückchen mehr dazu. Es scheint auch zu funktionieren und ich habe einige Anpassungen vorgenommen. Nun habe ich noch ein paar Fragen:
Durch Anpassungen müssten die Daten aus anderen Spalten bzw. in andere Spalten eingefügt werden, in Deinem Makro finde ich jedoch nicht die herkömmlichen Bezugsadressen der Spalten, wie gehe ich hier vor?
Die Summe der Daten aus Spalte "X" müsste ich im Formular unter H41 eintragen, da es keine Spalte hierfür gibt, würde ich einfach eine weitere Spalte im Formular anhängen und ausblenden (müsste diese Spalte dann auch als Löschbereich definieren). Wäre diese Vorgehensweise Deiner Meinung nach korrekt?
Kann ich das Formular auch als separate Datei führen, so dass ich "nur" das Formular öffnen muss und die Daten-Datei nicht aktiv geöffnet werden muss?
Was bewirkt Dein Befehl "Next arrData(13, iArr2) = True 'Datensatz als gedruckt gekennzeichnen"? Ich konnte keine Kennzeichnung finden.
Vielen lieben Dank für Deine tolle Unterstützung!
Gruß
MARTIN
https://www.herber.de/bbs/user/69148.zip
Anzeige
AW: Excel-Bericht aus Daten erstellen
19.04.2010 16:06:15
fcs
Hallo Martin,
Durch Anpassungen müssten die Daten aus anderen Spalten bzw. in andere Spalten eingefügt werden, in Deinem Makro finde ich jedoch nicht die herkömmlichen Bezugsadressen der Spalten, wie gehe ich hier vor?
Da wesentlich einfacher zu programmieren, verwende ich unter VBA fast immer Cells(Zeile, Spalte) für das Lesen und Schreiben von Daten aus/in Tabellen. Zeile entspricht dabei der Nummer wie sie links in Excel angezeigt wird, Spalte der fortlaufende Nummer der Spalte, wobei A=1, B=2 .. Z=26, AA=27 usw.
Man kann in Excel auch die Darstellung in die Z1S1-Schreibweise umschalten unter Extras-Optionen-Allgemein. Das ist dann hilfreich, wenn man unter VBA die Spaltennummern benötigt und nicht das Alphabet durchzählen möchte
Die Summe der Daten aus Spalte "X" müsste ich im Formular unter H41 eintragen, da es keine Spalte hierfür gibt, würde ich einfach eine weitere Spalte im Formular anhängen und ausblenden (müsste diese Spalte dann auch als Löschbereich definieren). Wäre diese Vorgehensweise Deiner Meinung nach korrekt? Ausblenden ist nicht nötig, wenn du im Blatt Formular einen Druckbereich festlegst. Das Array zum Einlesen muss dann um eine Spalte erweitert werden.
Alternativ könnte man diese Summe auch vom Makro berechnen und eintragen lassen. (ist in der Datei ausser dem Eintragen schon so drin.)
Kann ich das Formular auch als separate Datei führen, so dass ich "nur" das Formular öffnen muss und die Daten-Datei nicht aktiv geöffnet werden muss?
Die Trennung von Daten-Datei und Formular-Datei ist möglich. Die Daten-Datei muss aber zum Einlesen der Daten kurzzeitig geöffnet werden. Ist in der Datei schon umgesetzt. Das Makro fragt nach dem Start nach dem Dateinamen, wenn die Datendatei immer die gleiche ist, dann kannst du den Namen auch fest im Makro verankern. Nach dem Einlesen der Daten wird die DatenDatei sofort wieder geschlossen, bevor der Ausdruck der Daten beginnt.
Was bewirkt Dein Befehl "Next arrData(13, iArr2) = True 'Datensatz als gedruckt gekennzeichnen"? Ich konnte keine Kennzeichnung finden.
arrData(13, iArr2) = True
arrData ist ein Daten-Array, das nur während der Makroausführung im Arbeitsspeicher von Excel existiert. Es werden keine Daten in Tabellen geschrieben. Das Array wird beim Einlesen angelegt und mit Daten gefüllt. Beim Drucken werden diese Daten ausgewertet (Nach PersNr) und ins Formular geschrieben.
Wird eine Datenspalte des Arrays ins Formular geschrieben, dann wird in Zeile 13 des Arrays als Merker der Wert False mit True überschrieben. In der äußeren For-Next-Schleife wird für jede Zeile immer erst geprüft, ob die Spalte schon in einem der vorherigen Formulare ausgedruckt wurde, bevor die Daten für die nächste PersNr. zusammengestellt werden.
Gruß
Franz
Hier die aktualisierte Formulardatei ohne Blatt Daten
https://www.herber.de/bbs/user/69156.xls
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Excel-Bericht aus Daten erstellen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Stelle sicher, dass die Daten in einer Tabelle (z. B. "Daten") strukturiert sind. Die erste Zeile sollte die Überschriften enthalten.

  2. Formular erstellen: Erstelle ein Formular (z. B. auf einem Blatt "Formular"), das als Vorlage für den Excel-Bericht dient. Achte darauf, dass die relevantesten Felder, wie Personalnummer und Zeitraum, enthalten sind.

  3. VBA-Makro hinzufügen: Öffne den VBA-Editor (Alt + F11) und füge das folgende Makro hinzu:

    Option Explicit
    Private wksData As Worksheet, wksForm As Worksheet
    Private arrData()
    
    Sub Formular()
       Set wksData = Worksheets("Daten")
       Set wksForm = Worksheets("Formular")
       If DatenEinlesen > 0 Then
           Call Daten_ins_Formular
           MsgBox "Fertig!"
       Else
           MsgBox "Keine Daten für den Zeitraum gefunden"
       End If
    End Sub
    
    Private Function DatenEinlesen() As Long
       ' Hier wird der Code zum Einlesen der Daten implementiert
    End Function
  4. Daten einlesen: Implementiere die Logik in der Funktion DatenEinlesen, um die Daten für den angegebenen Zeitraum zu filtern und in ein Array zu laden.

  5. Daten ins Formular übertragen: Schreibe die gesammelten Daten aus dem Array in die entsprechenden Zellen des Formulars und berechne eventuell erforderliche Summen.

  6. Druckvorschau: Füge eine Funktion hinzu, um eine Druckvorschau des Berichts anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: Keine Daten gefunden: Überprüfe, ob der eingegebene Zeitraum korrekt ist und ob die Daten im richtigen Format vorliegen.

  • Fehler: VBA-Code läuft nicht: Stelle sicher, dass du den Code in das richtige Modul eingefügt hast und dass keine Syntaxfehler vorliegen.

  • Fehler: Formular wird nicht aktualisiert: Vergewissere dich, dass die Referenzen auf die Zellen im Formular korrekt sind und dass das Makro die Daten tatsächlich ins Formular überträgt.


Alternative Methoden

Falls du keinen VBA-Code verwenden möchtest, kannst du auch die folgenden Methoden in Betracht ziehen:

  • Pivot-Tabellen: Nutze Pivot-Tabellen, um die Daten nach bestimmten Kriterien zu filtern und Berichte zu erstellen. Diese Methode ist ideal, wenn du dynamische Berichte benötigst.

  • Excel-Formeln: Verwende Formeln wie SUMMEWENN oder SVERWEIS, um gezielte Berechnungen ohne VBA durchzuführen.


Praktische Beispiele

  • Bericht für einen Mitarbeiter: Angenommen, du möchtest einen Bericht für einen bestimmten Mitarbeiter erstellen. Du kannst das Makro so anpassen, dass es die Personalnummer als Parameter verwendet und nur die relevanten Daten in das Formular überträgt.

  • Monatsbericht: Wenn du einen monatlichen Bericht erstellen möchtest, erweitere die Eingabeparameter für das Datum und filtere die Daten entsprechend.


Tipps für Profis

  • Array-Handling: Verwende Arrays für eine schnellere Verarbeitung von Daten. Sie sind effizienter als das direkte Arbeiten mit Zellbereichen.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme während der Ausführung abzufangen.

  • Makros optimieren: Halte deinen VBA-Code modular, indem du Funktionen für wiederkehrende Aufgaben erstellst. So bleibt der Code übersichtlich und wartbar.


FAQ: Häufige Fragen

1. Wie kann ich die Spalten in meinem Bericht anpassen?
Du kannst die Bezugsadressen in deinem VBA-Code ändern, indem du die Cells(Zeile, Spalte)-Syntax verwendest. So kannst du flexibel auf unterschiedliche Spalten zugreifen.

2. Ist es möglich, das Formular als separate Datei zu führen?
Ja, du kannst das Formular als separate Datei speichern. Stelle sicher, dass das Makro die Daten-Datei öffnet, Daten einliest und anschließend wieder schließt.

3. Was bewirkt der Befehl "arrData(13, iArr2) = True"?
Dieser Befehl kennzeichnet in einem temporären Datenarray, dass ein Datensatz bereits verarbeitet wurde, um doppelte Einträge zu vermeiden.

4. Wie kann ich einen Excel-Bericht automatisieren?
Du kannst das Makro so planen, dass es automatisch zu festgelegten Zeiten ausgeführt wird. Nutze dazu die Windows-Aufgabenplanung, um das Excel-Dokument zu bestimmten Zeiten zu öffnen und das Makro auszuführen.

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