Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excelsoftwareauswertung

Frage Microsoft Microsoft Office

Mitglied: hugoundertaker

hugoundertaker (Level 1) - Jetzt verbinden

10.08.2012, aktualisiert 11:57 Uhr, 2508 Aufrufe, 13 Kommentare

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



Mitglied: 76109
11.08.2012, aktualisiert 17.08.2012
Hallo Hugo!

Sollte in etwa so gehen:
01.
Option Explicit 
02.
Option Compare Text 
03.
 
04.
Private Const ExternPath = "E:\Test\Ausgabe.xls"                    'Pfad der Ausgabedatei 
05.
 
06.
Private Const HeaderLine = "Benutzer;Fehlercode;Anzahl;Prozent"     'Überschrift Zeile 1 
07.
Private Const StartLine = 2                                         'Daten ab Zeile 2 
08.
 
09.
Private Const ErrMsg1 = "Die Ausgabedatei nicht gefunden!" 
10.
Private Const ErrMsg2 = "Die Ausgabedatei kann nicht geöffnet werden!" 
11.
 
12.
Sub GetExternData() 
13.
    Dim oFso As Object, oWkb As Workbook, oWks As Worksheet, oUserList As Object, oKey As Variant 
14.
    Dim aValues As Variant, sUserCode As String, iNextLine As Long, iCount As Long, i As Long 
15.
     
16.
    'Externe FileSystem-Funktionen einbinden 
17.
    Set oFso = CreateObject("Scripting.FileSystemObject") 
18.
     
19.
    'Prüfen ob die Ausgabedatei existiert, ansonsten Fehlermeldung ausgeben und abbrechen 
20.
    If oFso.FileExists(ExternPath) = False Then 
21.
        MsgBox ErrMsg1, vbExclamation, "Fehler...":  Exit Sub 
22.
    End If 
23.
     
24.
    'Fehlerbehandlung Aus 
25.
    On Error Resume Next 
26.
     
27.
    'Ausgabedatei öffnen und der Object-Variablen oWkb zuweisen 
28.
    Set oWkb = Workbooks.Open(ExternPath) 
29.
     
30.
    'Prüfen ob die Ausgabedatei geöffnet wurde, ansonsten Fehlermeldung ausgeben und abbrechen 
31.
    If Err Then 
32.
        MsgBox ErrMsg2, vbExclamation, "Fehler...":  Exit Sub 
33.
    End If 
34.
     
35.
    'Fehlerbehandlung wieder Ein 
36.
    On Error GoTo 0 
37.
     
38.
    'Das 1.Tabellenblatt der Ausgabedatei der Object-Variablen oWks zuweisen 
39.
    Set oWks = oWkb.Sheets(1) 
40.
     
41.
    'Assoziatives Array zum katalogisieren der einzelnen Benutzer mit Fehlercode und Anzahl 
42.
    Set oUserList = CreateObject("Scripting.Dictionary") 
43.
    'Vergleichsmethode Text (Klein/Großschreibung nicht unterscheiden) 
44.
    oUserList.CompareMode = vbTextCompare 
45.
     
46.
    'Die erste Zeilennummer in der Ausgabedatei-Tabelle festlegen 
47.
    iNextLine = StartLine 
48.
     
49.
    'Alle Zeilen in der Ausgabedatei bis zur 1. Leerzeile einlesen 
50.
    Do While oWks.Cells(iNextLine, "A").Text <> "" 
51.
        'Aktuelle Zeile in der Ausgabedatei bearbeiten 
52.
        With oWks.Rows(iNextLine) 
53.
            'Nur auswerten, wenn Benutzer ist nicht TestPC und Spalte B/C enthält eine Zahl (kein Text) 
54.
            If Not .Columns("A") Like "TestPc" And IsNumeric(.Columns("B")) And IsNumeric(.Columns("C")) Then 
55.
                'Katalog-Schlüssel (Key) = Benutzername + Fehlercode z.B. "Computer1" + "11" = "Computer1$11" 
56.
                sUserCode = .Columns("A") & "$" & .Columns("B") 
57.
                'Prüfen ob Benutzer schon mit dem gleichen Fehlercode schon im Katalog existiert 
58.
                If oUserList.Exists(sUserCode) Then  'Wenn ja, dann Katalog-Item = Aktuelle Anzahl + Anzahl 
59.
                    oUserList.Item(sUserCode) = oUserList.Item(sUserCode) + .Columns("C") 
60.
                Else  'Wenn nein, dann Katalog-Key + Katalog-Item (Anzahl) dem Katalog hinzufügen 
61.
                    oUserList.Add sUserCode, CInt(.Columns("C")) 
62.
                End If 
63.
            End If 
64.
        End With 
65.
        'Nächste Zeile in Ausgabedatei festlegen 
66.
        iNextLine = iNextLine + 1 
67.
    Loop 
68.
     
69.
    'Ausgabedatei nach dem Einlesen wieder schließen 
70.
    oWkb.Close False 
71.
     
72.
    'Gesamtsumme ermitteln (iCount) 
73.
    For Each oKey In oUserList.Keys 
74.
        iCount = iCount + oUserList.Item(oKey) 
75.
    Next 
76.
     
77.
    'Diese Arbeitsmappe Tabelle1 aktivieren 
78.
    ThisWorkbook.Sheets(1).Activate 
79.
 
80.
    'Zell-Inhalte löschen 
81.
    Cells.ClearContents 
82.
     
83.
    'Überschrift in 1. Zeile schreiben (Fett, Zentriert) 
84.
    With Range("A1").Resize(1, 4) 
85.
        .Font.Bold = True 
86.
        .Value = Split(HeaderLine, ";") 
87.
        .HorizontalAlignment = xlCenter 
88.
    End With 
89.
     
90.
    'Die erste Zeilennummer in der Auswertungstabelle festlegen 
91.
    iNextLine = StartLine 
92.
     
93.
    'Katalog auslesen und in die Auswertungstabelle eintragen 
94.
    For Each oKey In oUserList.Keys 
95.
        With Rows(iNextLine)  'Aktuelle Zeile 
96.
            aValues = Split(oKey, "$")  'Katalog-Schlüssel in Benutzer und Fehlercode aufsplitten 
97.
            If aValues(1) <> 0 Then 'Test ob Fehlercode <> 0, wenn ja dann Eintragen 
98.
                .Columns("A") = aValues(0)                      '=Benutzername 
99.
                .Columns("B") = aValues(1)                      '=Fehlercode 
100.
                .Columns("C") = oUserList.Item(oKey)            '=Anzahl 
101.
                .Columns("D").NumberFormat = "0.00%"            '=Zellformat Prozent 
102.
                .Columns("D") = oUserList.Item(oKey) / iCount   '=Prozent 
103.
                iNextLine = iNextLine + 1                       'Nächste Zeile in Auswertungstabelle festlegen 
104.
            End If 
105.
        End With 
106.
    Next 
107.
     
108.
    'Auswertungstabelle nach Benutzername sortieren 
109.
    Columns("A:D").Sort Key1:=Range("A2"), Header:=xlYes, MatchCase:=False 
110.
     
111.
    'Text mit Gesamtanmeldungen in Auswertungstabelle eintragen 
112.
    Cells(iNextLine + 1, "A") = "Gesamtanmeldungen: " & iCount 
113.
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]
Bitte warten ..
Mitglied: hugoundertaker
13.08.2012 um 12:18 Uhr
Hallo,
erstmal danke für das bisherige.
Aber er kommt immer auf die Fehlermeldung:
Fehler bei Kompilieren:Methode oder Datenobjekt nicht gefunden
Beim Debuggen wird in der Zeile 17
"Set oWkb = Workbooks.Open(ExternPath): Set oWks = oWkb.Sheets(1)" ".Sheets" markiert. Irgendwie finde ich aber nicht was da fehlt.

Danke schonmal.
Hugo
Bitte warten ..
Mitglied: 76109
13.08.2012, aktualisiert um 12:46 Uhr
Hallo Hugo!

Da fehlt offensichtlich in Codezeile 4 Deine Pfadangabe für die Ausgabe.xls


Gruß Dieter
Bitte warten ..
Mitglied: hugoundertaker
13.08.2012 um 13:17 Uhr
Hallo Dieter,

tut mir leid, aber die Pfadangabe ist mit drin.
Geht trotzdem nicht.

Grüße
Hugo
Bitte warten ..
Mitglied: 76109
14.08.2012 um 10:54 Uhr
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
Bitte warten ..
Mitglied: hugoundertaker
15.08.2012 um 11:54 Uhr
Hallo 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.
Habe das Problem wegen der Gesamtsumme durch eine Zusatztabelle selber gelöst. Bloss die Dynamik geht noch nicht. Kann man das über eine Zusatztabelle lösen? Also z.B. eine Tabelle, in der einmal eine Grundauflistung von den Benutzern mit Fehlercode steht und diese dann die Ausgangstabelle durchsucht und wenn der Wert ("Benutzer" + "Fehlercode") noch nicht vorhanden, dieses an diese Zusatztabelle anhängt und dann die Auswertung über diese Zusatztabelle läuft?

Danke.
Hugo
Bitte warten ..
Mitglied: 76109
15.08.2012 um 12:44 Uhr
Hallo Hugo!

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
Bitte warten ..
Mitglied: hugoundertaker
16.08.2012 um 08:56 Uhr
Morgen 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 scheint er sich in der Felder falsch zu verschieben, weil ich dann auch in der Zeile 2 bei den Prozenten aber einen Wert habe, der mir aber unten fehlt. Außerdem hat er bei einem Benutzer merkwürdiger weise zwei Fehlercodes garnicht aufgeführt.

Danke.
Hugo
Bitte warten ..
Mitglied: 76109
16.08.2012 um 10:46 Uhr
Hallo Hugo!

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
Bitte warten ..
Mitglied: hugoundertaker
16.08.2012 um 15:17 Uhr
Hallo Dieter,

ich weiß nicht was sich jetzt verbogen hat, aber es geht garnichts mehr.
Ich habe eine bereinigte Tabelle als Grundlage mit den Spalten A "Benutzer", B "Fehlercode" und C "Anzahl" in der ersten Spalte.
Die Pfadangabe stimmt jetzt auch!! Ausgabe.xls ist vorhanden.
Er schreibt nichts mehr in die Ausgabetabelle und schreibt nur noch in der Grundlagentabelle in die ersten Zeile in die jeweiligen Spalten "Benutzer" "Fehlercode" "Anzahl" und "Prozent" in Fett aber sonst tut sich garnichts mehr.
Kannst Du mal bitte Deinen Code überprüfen ob plötzlich was anders ist?

Danke.
Hugo
Bitte warten ..
Mitglied: 76109
16.08.2012, aktualisiert um 15:59 Uhr
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
Bitte warten ..
Mitglied: hugoundertaker
17.08.2012 um 08:37 Uhr
Morgen Dieter,

ja das war gestern doch etwas konfus bei mir. Wirklich in falscher Arbeitsmappe gewesen. Hatte mir die Vorgehensweise vom ersten funktionieren vor lauter Begeisterung nicht gemerkt.

Also es klappt wunderbar. Ganz herzlichen Dank.

Nun nur noch eine kleine Bitte:
Da ich bisher nicht ganz soviel mit Excel zu tun hatte, es jetzt
aber doch öfters mal brauche, könntest Du Deinen Code noch ein bisschen erklären. Reicht ja vielleicht schon, einfach Kommentare in die Zeilen einfügen. Dann kann ich das mir noch genauer durchlesen und auch verstehen und vielleicht auch die Informationen zukünfig verwenden.

Aber wirklich nochmals ganz herzlichen Dank.

Und ein schönes Wochenende
Hugo
Bitte warten ..
Mitglied: 76109
17.08.2012, aktualisiert um 10:12 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...