Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
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

Makro Auswertung

Makro Auswertung
Jason
Hi
kann mir vielleicht einer Helfen und mir ein Makro schreiben? Kenne mich mit VBA so gut wie garnicht aus. Kenne zwar die groben Strukturen aber selber den Lösungsweg zu finden, schaffe ich bei meinem Problem nicht. Veilleicht ist es auch überhaupt nicht realisierbar mit VBA.
Zum Problem: Die Excel Datei besitzt eine Tabelle die zur Auswertung dienen soll. Weitere fünf Tabellenblätter werden Daten eingetragen. Diese Tabellen besitzen Mitarbeiternamen, deren Arbeitszeiten mit Datum. Nun hätte ich gerne wenn ich den Auswerten Button betätige das ich die Angaben angezeigt bekomme von dem jeweiligen Mitarbeiter den ich in den Suchkriterien eingetragen habe. (inkl. Zeitraum Beschränkung). Denke das ist schon relativ komplex. Es ist mir auch bewusst das das ganz besser mit einer Datenbank realisiert werden sollte, jedoch habe ich davon überhaupt keine Ahnung.
Vielleicht kann mir ja jemand helfen.
Datei:
https://www.herber.de/bbs/user/76555.xls
Mfg Jason

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro Auswertung
11.09.2011 02:12:58
fcs
Hallo Jason,
mit dem folgenden Makro erzielst du die gewünschte Auswertung.
Ich würde die Daten in den Wochenblätter für eine Auswertung in eine Listenform überführen, die mit einem Pivot-Tabellenbericht ausgewertet werden kann.
siehe Beispiel-Datei:
https://www.herber.de/bbs/user/76557.xls
Gruß
Franz

Private Sub Auswerten_Click()
Dim wksStat As Worksheet, wksStd As Worksheet
Dim dDatum1 As Date, dDatum2 As Date
Dim sName As String
Dim ZeiStat As Long, ZeiStd As Long, SpStd As Long
Dim SumStd As Double
Const ZeileStat1 = 25 '1. Zeile in die Stunden im Blatt Statistik eingetragen werden
Const SpName = 2 'Spalte mit Name in Stundenkalk-Blättern
Const SpGesamt = 4 'Spalte Gesamtstunden am Montag in Stundenkalk-Blättern
Const ZeiDatum = 12 'Zeile mit Datum in Stundenkalk-Blättern
Const ZeiName1 = 14 '1. Zeile mit Mitarbeitername in Stundenkalk-Blättern
Set wksStat = Worksheets("Statistik")
With wksStat
'Suchwerte einlesen
sName = .Cells(6, 3).Value 'gesuchter Name - C6
dDatum1 = .Cells(9, 3).Value 'Startdatum - C9
dDatum1 = .Cells(9, 5).Value 'Endedatum - E9
'Alteinträge löschen
ZeiStat = .Cells(.Rows.Count, 2).End(xlUp).Row
ZeiStat = Application.WorksheetFunction.Max(ZeiStat, .Cells(.Rows.Count, 3).End(xlUp).Row)
If ZeiStat >= ZeileStat1 Then
.Range(.Cells(ZeileStat1, 2), .Cells(ZeiStat, 3)).ClearContents
End If
ZeiStat = ZeileStat1 - 1
End With
SumStd = 0
For Each wksStd In ActiveWorkbook.Worksheets
Select Case wksStd.Name
Case "Statistik", "TabelleABC" 'hier ggf. weitere Blattnamen listen
'do nothing - diese Tabellenblätter nicht auswerten
Case Else
With wksStd
For ZeiStd = ZeiName1 To .Cells(.Rows.Count, SpName).End(xlUp).Row Step 2
'Zeile mit dem Namen suchen
If .Cells(ZeiStd, SpName).Value = sName Then
'Datumswerte mit Suchdatumsbereich vergleichen
For SpStd = SpGesamt To SpGesamt + 12 Step 2
If .Cells(ZeiDatum, SpStd - 1).Value = dDatum2 Then
ZeiStat = ZeiStat + 1
'Datum und Gesamtstunden in Statistik eintragen
wksStat.Cells(ZeiStat, 2) = .Cells(ZeiDatum, SpStd - 1).Value
wksStat.Cells(ZeiStat, 3) = .Cells(ZeiStd, SpStd).Value
SumStd = SumStd + .Cells(ZeiStd, SpStd).Value
End If
Next SpStd
End If
Next ZeiStd
End With
End Select
Next wksStd
wksStat.Cells(18, 4) = SumStd 'Gesamtstunden eintragen - D18
End Sub

Anzeige
AW: Makro Auswertung
11.09.2011 12:00:05
Jason
Hallo Franz,
vielen Dank für deine Hilfe.
Deine Lösung mit dem Pivot-Tabellenbericht ist um einiges komfortabler. Wäre es auch möglich die Tabelle Statistik und Daten in eine seperate Excelmappe auszulagern? Die Tabelle Daten müsste ihre Werte dann aus Test.xls (1_Stundenkalk, 2_Stundenkalk,...) , Test1.xls (1_Stundenkalk, 2_Stundenkalk,...) usw. einlesen.
Mfg Jason
AW: Makro Auswertung
11.09.2011 13:34:06
fcs
Hallo Jason,
die Statistik in einer separaten Datei unterzubringen ist kein großes Problem.
Den Dateinamen mit den Stundenblättern kannst du im Blatt Statistik in Zelle E1 eingeben.
https://www.herber.de/bbs/user/76560.xls
Die unter DieseArbeitsmappe vorhandene Funktion, die Daten im Blatt "Daten" vor dem Schliessen der Datei zu löschen und beim Öffnen automatisch die Daten zu aktualisieren hab ich abgeschaltet.
Wenn die Funktion bleiben soll, dann die beiden Exit Sub Zeilen löschen.
Die Datei mit den Stundenblättern sollte vor dem Aktualisieren nicht geöffnet sein.
Gruß
Franz
Anzeige
AW: Makro Auswertung
11.09.2011 14:06:12
Jason
Hi
also das mit der seperaten Arbeitsmappe funktioniert wunderbar. Kannst du mir vielleicht noch einrichten das ich mehrere Datei-Pfade angeben kann. Mein Problem was ich noch habe ist folgendes. Von der Arbeitsmappe Test mit den einzelnen Stundekalk Blättern sollte es nach meiner Vorstellung noch mehrere geben, die genau den gleichen Aufbau wie Test.xls haben. Das kann zur folge haben das ein Mitarbeiter einmal in Test.xls auftaucht und desweiteren z.b. in Test2.xls.
Das Makro Data_fuellen() müsste somit zunächst die Daten aus Test.xls einlesen und danach aus Test1.xls usw. Hoffe du kannst nachvollziehen was ich meine.
Danke schonmal im Vorraus.
mfg Jason
Anzeige
AW: Makro Auswertung
11.09.2011 21:47:01
fcs
Hallo Jason,
willst du in deiner Statistik-Datei eine Liste aller Dateien mit Stundenblättern anlegen (auf einem zusätzlichen Blatt) oder ist dir ein Dateiauswahldialog ggf. mit Mehrfachauswahl lieber?
Gruß
Franz
AW: Makro Auswertung
11.09.2011 22:18:41
Jason
Hi
weiß nicht genau wie du das meinst. Kannst du mir das vielleicht genauer erklären?
Hauptsache ist das die Daten von Test.xls, Test1.xls usw eingelesen werden sollen und diese dann ausgewertet mit der Pivot-Tabelle.
Gruß
Jason
AW: Makro Auswertung
12.09.2011 09:26:27
fcs
Hallo Jason,
ich wollte wissen, ob du die auszuwertenden Dateien mit Stundendaten als Liste in einem Tabellenblatt vorgeben willst, oder ob du in einem Dateiauswahldialog diese Dateien jedes Mal auswählen willst.
Ich hab jetzt die Variante mit der Liste in einem Tabellenblatt umgesetzt. Diese Liste kann per Doppelklick in Zellen in Spalte A und Dateiauswahldialog ergänzt werden.
https://www.herber.de/bbs/user/76564.xls
Gruß
Franz
Anzeige
AW: Makro Auswertung
12.09.2011 13:17:14
Jason
Hallo Franz,
Super genauso habe ich mir das vorgestellt. Vielen Dank.
Hätte noch eine kleine Bitte und zwar ist es vielleicht noch möglich das ich in den einzelnen Dateien (Test.xls, Test1.xls usw.) Ausnahmen hinzufügen kann die nicht in die Tabelle unter Daten ausfgenommen werden sollen.
In der alten Version von dir war hier das vorhanden, da konnte man schön die Tabellen eintragen die nicht durchsucht werden sollten. Wie gesagt alle Test.xls 's haben immer den selben Aufbau.
Sub Data_fuellen():
Case "Statistik", "Daten" 'hier ggf. weitere Blattnamen listen
'do nothing - diese Tabellenblätter nicht auswerten
Falls nicht ist es auch nicht so tragisch. Vielen Dank nochmal für deine Arbeit!
Gruß Jason
Anzeige
AW: Makro Auswertung
12.09.2011 13:56:50
fcs
Hallo Jason,
das hättest du dann ggf. aus den früheren Beispielen auch wieder einbauen können.
Gruß
Franz
passe den folgenden Abschnitt des Makros "Data_fuellen" an:

        For Each wksStd In wbStd.Worksheets
With wksStd
Select Case .Name
Case "Statistik", "TabelleABC"
'diese Blätter nicht auswerten
Case Else
vKW = .Cells(5, 3).Value 'Kalenderwoche - C5
For ZeiStd = ZeiName1 To .Cells(.Rows.Count, SpName).End(xlUp).Row Step 2
'Name einlesen
sName = .Cells(ZeiStd, SpName).Value
If .Cells(ZeiStd, SpName).Value  "" Then
'Datumswerte mit Suchdatumsbereich vergleichen
For SpStd = SpGesamt To SpGesamt + 12 Step 2
ZeiData = ZeiData + 1
'Name,Datum und Gesamtstunden in Daten eintragen
wksData.Cells(ZeiData, 1) = sName
wksData.Cells(ZeiData, 2) = .Cells(ZeiDatum, SpStd - 1).Value
wksData.Cells(ZeiData, 3) = .Cells(ZeiStd, SpStd - 1).Value
wksData.Cells(ZeiData, 4) = .Cells(ZeiStd + 1, SpStd - 1).Value
wksData.Cells(ZeiData, 5) = .Cells(ZeiStd, SpStd).Value
wksData.Cells(ZeiData, 6) = vKW
wksData.Cells(ZeiData, 7) = Format(.Cells(ZeiDatum, SpStd - 1).Value, " _
MMM")
wksData.Cells(ZeiData, 8) = Year(.Cells(ZeiDatum, SpStd - 1).Value)
Next SpStd
End If
Next ZeiStd
End Select
End With
Next wksStd

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige