Excelsoftwareauswertung
Hallo zusammen,
ich habe folgendes Problem:
Wir bekommen in der Firma zum Testen für ca. 1 Jahr eine neue Software eingesetzt. Nun soll darüber eine Auswertung in einer ExcelTabelle erfolgen. Die Ausgangstabelle beinhaltet ca. 20000 Zeilen. Diese Zeilen sind in Spalten "Benutzer" "Fehlercode" "Anzahl" unterteilt.
Also z.B. "MüllerRaum1" "10" "5", "MeierRaum1" "0" "50", "SchmidtRaum3" "2" "1" usw. Diese Zeile wird jedesmal bei der Anmeldung erzeugt. Am Ende der Tabelle kommt außerdem eine ca. 10 Zeilen lange Legende. Dieses pro Tag.
Nun soll ich am nächsten Tag eine Auswertung in einer extra Tabelle machen, wo zum einen halt pro Benutzer der Fehler und die Anzahl jeweils als Gesamtsumme erscheint und der prozentuale Wert zur Anzahl der Gesamtanzahl aller Anmeldungen. Dabei gibt es noch das Problem, das es eine Benutzer "TestPC" gibt, der einen speziellen Fehlercode "33" produziert. Dieser Benutzer darf in der Einzelübersicht mit dem Fehlercode "33" nicht erscheinen. Außerdem sollen alle Anmeldungen mit dem Fehlercode "0" (fehlerfrei) von allen Benutzern in der Auswertung pro Benutzer nicht erscheinen. Die Anzahl von der Anmeldung von allen Benutzern(auch "TestPC") mit Fehlercode "0" muss aber mit in der Gesamtsumme aller Anmeldugen mitgezählt werden, der Fehlercode "33" vom Benutzer "TestPC" darf aber nicht mitgezählt werden.
Außerdem muss sich die Tabelle und die Formeln dynamisch der Ausgangstabelle anpassen können, weil es zum einen immer wieder weitere Benutzer geben wird und auch weitere Fehlercodes auftreten können.
Die Legende, die unten dran hängt, kann für die Auswertungstabelle wegfallen.
Also am Ende soll es ungefähr so aussehen:
Benutzer Code Anzahl Prozent
MüllerRaum1 10 30 2%
MeierRaum1 11 10 1%
Gesamtanmeldungen 10000
Danke schonmal.
Hugo
ich habe folgendes Problem:
Wir bekommen in der Firma zum Testen für ca. 1 Jahr eine neue Software eingesetzt. Nun soll darüber eine Auswertung in einer ExcelTabelle erfolgen. Die Ausgangstabelle beinhaltet ca. 20000 Zeilen. Diese Zeilen sind in Spalten "Benutzer" "Fehlercode" "Anzahl" unterteilt.
Also z.B. "MüllerRaum1" "10" "5", "MeierRaum1" "0" "50", "SchmidtRaum3" "2" "1" usw. Diese Zeile wird jedesmal bei der Anmeldung erzeugt. Am Ende der Tabelle kommt außerdem eine ca. 10 Zeilen lange Legende. Dieses pro Tag.
Nun soll ich am nächsten Tag eine Auswertung in einer extra Tabelle machen, wo zum einen halt pro Benutzer der Fehler und die Anzahl jeweils als Gesamtsumme erscheint und der prozentuale Wert zur Anzahl der Gesamtanzahl aller Anmeldungen. Dabei gibt es noch das Problem, das es eine Benutzer "TestPC" gibt, der einen speziellen Fehlercode "33" produziert. Dieser Benutzer darf in der Einzelübersicht mit dem Fehlercode "33" nicht erscheinen. Außerdem sollen alle Anmeldungen mit dem Fehlercode "0" (fehlerfrei) von allen Benutzern in der Auswertung pro Benutzer nicht erscheinen. Die Anzahl von der Anmeldung von allen Benutzern(auch "TestPC") mit Fehlercode "0" muss aber mit in der Gesamtsumme aller Anmeldugen mitgezählt werden, der Fehlercode "33" vom Benutzer "TestPC" darf aber nicht mitgezählt werden.
Außerdem muss sich die Tabelle und die Formeln dynamisch der Ausgangstabelle anpassen können, weil es zum einen immer wieder weitere Benutzer geben wird und auch weitere Fehlercodes auftreten können.
Die Legende, die unten dran hängt, kann für die Auswertungstabelle wegfallen.
Also am Ende soll es ungefähr so aussehen:
Benutzer Code Anzahl Prozent
MüllerRaum1 10 30 2%
MeierRaum1 11 10 1%
Gesamtanmeldungen 10000
Danke schonmal.
Hugo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189410
Url: https://administrator.de/contentid/189410
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo Hugo!
Sollte in etwa so gehen:
Gruß Dieter
[edit] Prüfung hinzugefügt, ob externe Datei existiert oder nicht geöffnet werden kann [/edit]
[edit] Noch eingefügt: Zellinhalte löschen, bevor die Daten importiert werden [/edit]
Sollte in etwa so gehen:
Option Explicit
Option Compare Text
Private Const ExternPath = "E:\Test\Ausgabe.xls" 'Pfad der Ausgabedatei
Private Const HeaderLine = "Benutzer;Fehlercode;Anzahl;Prozent" 'Überschrift Zeile 1
Private Const StartLine = 2 'Daten ab Zeile 2
Private Const ErrMsg1 = "Die Ausgabedatei nicht gefunden!"
Private Const ErrMsg2 = "Die Ausgabedatei kann nicht geöffnet werden!"
Sub GetExternData()
Dim oFso As Object, oWkb As Workbook, oWks As Worksheet, oUserList As Object, oKey As Variant
Dim aValues As Variant, sUserCode As String, iNextLine As Long, iCount As Long, i As Long
'Externe FileSystem-Funktionen einbinden
Set oFso = CreateObject("Scripting.FileSystemObject")
'Prüfen ob die Ausgabedatei existiert, ansonsten Fehlermeldung ausgeben und abbrechen
If oFso.FileExists(ExternPath) = False Then
MsgBox ErrMsg1, vbExclamation, "Fehler...": Exit Sub
End If
'Fehlerbehandlung Aus
On Error Resume Next
'Ausgabedatei öffnen und der Object-Variablen oWkb zuweisen
Set oWkb = Workbooks.Open(ExternPath)
'Prüfen ob die Ausgabedatei geöffnet wurde, ansonsten Fehlermeldung ausgeben und abbrechen
If Err Then
MsgBox ErrMsg2, vbExclamation, "Fehler...": Exit Sub
End If
'Fehlerbehandlung wieder Ein
On Error GoTo 0
'Das 1.Tabellenblatt der Ausgabedatei der Object-Variablen oWks zuweisen
Set oWks = oWkb.Sheets(1)
'Assoziatives Array zum katalogisieren der einzelnen Benutzer mit Fehlercode und Anzahl
Set oUserList = CreateObject("Scripting.Dictionary")
'Vergleichsmethode Text (Klein/Großschreibung nicht unterscheiden)
oUserList.CompareMode = vbTextCompare
'Die erste Zeilennummer in der Ausgabedatei-Tabelle festlegen
iNextLine = StartLine
'Alle Zeilen in der Ausgabedatei bis zur 1. Leerzeile einlesen
Do While oWks.Cells(iNextLine, "A").Text <> ""
'Aktuelle Zeile in der Ausgabedatei bearbeiten
With oWks.Rows(iNextLine)
'Nur auswerten, wenn Benutzer ist nicht TestPC und Spalte B/C enthält eine Zahl (kein Text)
If Not .Columns("A") Like "TestPc" And IsNumeric(.Columns("B")) And IsNumeric(.Columns("C")) Then
'Katalog-Schlüssel (Key) = Benutzername + Fehlercode z.B. "Computer1" + "11" = "Computer1$11"
sUserCode = .Columns("A") & "$" & .Columns("B")
'Prüfen ob Benutzer schon mit dem gleichen Fehlercode schon im Katalog existiert
If oUserList.Exists(sUserCode) Then 'Wenn ja, dann Katalog-Item = Aktuelle Anzahl + Anzahl
oUserList.Item(sUserCode) = oUserList.Item(sUserCode) + .Columns("C")
Else 'Wenn nein, dann Katalog-Key + Katalog-Item (Anzahl) dem Katalog hinzufügen
oUserList.Add sUserCode, CInt(.Columns("C"))
End If
End If
End With
'Nächste Zeile in Ausgabedatei festlegen
iNextLine = iNextLine + 1
Loop
'Ausgabedatei nach dem Einlesen wieder schließen
oWkb.Close False
'Gesamtsumme ermitteln (iCount)
For Each oKey In oUserList.Keys
iCount = iCount + oUserList.Item(oKey)
Next
'Diese Arbeitsmappe Tabelle1 aktivieren
ThisWorkbook.Sheets(1).Activate
'Zell-Inhalte löschen
Cells.ClearContents
'Überschrift in 1. Zeile schreiben (Fett, Zentriert)
With Range("A1").Resize(1, 4)
.Font.Bold = True
.Value = Split(HeaderLine, ";")
.HorizontalAlignment = xlCenter
End With
'Die erste Zeilennummer in der Auswertungstabelle festlegen
iNextLine = StartLine
'Katalog auslesen und in die Auswertungstabelle eintragen
For Each oKey In oUserList.Keys
With Rows(iNextLine) 'Aktuelle Zeile
aValues = Split(oKey, "$") 'Katalog-Schlüssel in Benutzer und Fehlercode aufsplitten
If aValues(1) <> 0 Then 'Test ob Fehlercode <> 0, wenn ja dann Eintragen
.Columns("A") = aValues(0) '=Benutzername
.Columns("B") = aValues(1) '=Fehlercode
.Columns("C") = oUserList.Item(oKey) '=Anzahl
.Columns("D").NumberFormat = "0.00%" '=Zellformat Prozent
.Columns("D") = oUserList.Item(oKey) / iCount '=Prozent
iNextLine = iNextLine + 1 'Nächste Zeile in Auswertungstabelle festlegen
End If
End With
Next
'Auswertungstabelle nach Benutzername sortieren
Columns("A:D").Sort Key1:=Range("A2"), Header:=xlYes, MatchCase:=False
'Text mit Gesamtanmeldungen in Auswertungstabelle eintragen
Cells(iNextLine + 1, "A") = "Gesamtanmeldungen: " & iCount
End Sub
Gruß Dieter
[edit] Prüfung hinzugefügt, ob externe Datei existiert oder nicht geöffnet werden kann [/edit]
[edit] Noch eingefügt: Zellinhalte löschen, bevor die Daten importiert werden [/edit]
Hallo Hugo!
Da fehlt offensichtlich in Codezeile 4 Deine Pfadangabe für die Ausgabe.xls
Gruß Dieter
Da fehlt offensichtlich in Codezeile 4 Deine Pfadangabe für die Ausgabe.xls
Gruß Dieter
Hallo Hugo!
Habe den Quellcode mal insoweit geändert, dass nun geprüft wird, ob die externe Datei existiert oder nicht geöffnet werden kann.
Gruß Dieter
Habe den Quellcode mal insoweit geändert, dass nun geprüft wird, ob die externe Datei existiert oder nicht geöffnet werden kann.
Gruß Dieter
Hallo Hugo!
Wenn der Code nicht durchläuft kann das folgende Ursachen haben:
- Die Startzeile ist eine Leerzeile
- Die Einträge Benutzer, Fehlercode und Anzahl befinden sich nicht in Spalte A, B und C
Gruß Dieter
tut mir leid. Läuft jetzt zwar durch tut aber nichts außer oben in der ersten Zeile die Daten "Benutzer;Fehlercode;Anzahl;Prozent" einzufügen.
Soll wohl heißen, dass Deine Pfadangabe doch falsch war?Wenn der Code nicht durchläuft kann das folgende Ursachen haben:
- Die Startzeile ist eine Leerzeile
- Die Einträge Benutzer, Fehlercode und Anzahl befinden sich nicht in Spalte A, B und C
Gruß Dieter
Hallo Hugo!
Habe im Code noch eine neue Codezeile in Zeile 59 eingefügt. Für alle Fälle Sheet-Inhalt löschen, bevor Daten eingelesen werden.
Gruß Dieter
also soweit läuft es jetzt. Allerdings ist es etwas merkwürdig. Er schreib mir einmal oben in die Zeile 2, Spalte A die Gesamtsumme der Anmeldungen mit Text und Summe in ein Feld und das gleich nochmal in der letzten Zeile. Irgendwie
Das kann ich absolut nicht nachvollziehen, zumal diese Zeile als allerletzte Anweisung nur einmal ausgeführt wird und von daher eigentlich nur am Ende stehen kann???Habe im Code noch eine neue Codezeile in Zeile 59 eingefügt. Für alle Fälle Sheet-Inhalt löschen, bevor Daten eingelesen werden.
Gruß Dieter
Hallo Hugo!
Hab's überprüft und bei mir funktionierts?
Wo hast Du eigentlich den Code eingefügt? In einem Modul in einer seperaten Arbeitsmappe?
Gruß Dieter
Hab's überprüft und bei mir funktionierts?
Wo hast Du eigentlich den Code eingefügt? In einem Modul in einer seperaten Arbeitsmappe?
Gruß Dieter
Hallo Hugo!
Der Einfachheit halber, kannst Du die Makro-Datei auch als Vorlage (*.xlt) speichern
Gegebenenfalls könnte ich noch einen Öffnen-Dialog hinzufügen, falls sich der Dateiname der Ausgabe-Datei ändert?
Die entsprechenden Kommentare füge ich dem obigen Code noch hinzu...
Gruß und ebenfalls ein schönes Wochenende
Dieter
Der Einfachheit halber, kannst Du die Makro-Datei auch als Vorlage (*.xlt) speichern
Gegebenenfalls könnte ich noch einen Öffnen-Dialog hinzufügen, falls sich der Dateiname der Ausgabe-Datei ändert?
Die entsprechenden Kommentare füge ich dem obigen Code noch hinzu...
Gruß und ebenfalls ein schönes Wochenende
Dieter