viewpoint
Goto Top

Zellvergleich

Zellvergleich mit mehreren

Hallo!

Ich habe ein Excel-Sheet mit 35650 Zeilen und 26 Spalten.
In Spalte A steht ein Mitarbeiter-Name, in Spalte S steht der Abteilungsname (ein normales Textfeld), in Spalte V ist eine Kostenstelle hinterlegt (die anderen Spalten sind unrelevant)

Ich will nun wissen, wie oft innerhalb einer Abteilung eine abweichende Kostenstelle (und welche) eingetragen ist

Ein Beispiel: In Spalte S kommt 10x der Abteilungsname "Programmierung" vor. und innerhalb der Abteilung gibt es 5 verschiedene Kostenstellen -> mit Auflistung:
Programmierung
Kst 001
Kst 002
Kst 003
Kst 004
Kst 005


Wie kann ich das am besten umsetzen?

Danke für Tipps!

Lg. aus Wien

Content-ID: 111741

Url: https://administrator.de/contentid/111741

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

SarekHL
SarekHL 18.03.2009 um 12:26:27 Uhr
Goto Top
Ich denke, am einfachsten löst man dieses Problem mit einer Pivot-Tabelle.

Hier findest Du eine gute Video-Anleitung zum Thema Pivot-Tabellen.
viewpoint
viewpoint 18.03.2009 um 13:17:29 Uhr
Goto Top
Das dachte ich auch, jedoch ist es nicht so einfach, 10.000 Werte in einer Pivot Tabelle anzeigen zu lassen, davon abgesehen würde ich diese Ergebnisse gerne weiterverwenden - eben wie in oben angeführter Tabelle.
76109
76109 19.03.2009 um 15:38:45 Uhr
Goto Top
Hallo,

wieviele Abteilungen und Kostenstellen gibt es.?

Wo sollen die Ergebnisse hin?


Gruß Dieter
viewpoint
viewpoint 20.03.2009 um 13:40:56 Uhr
Goto Top
unternehmensweit schätze ich 8000 abteilungen - etwa 5000 kostenstellen - geschätzt!
Am besten wäre die "Tabellisierung" in einem neuen Blatt - zwecks der Übersichtlichkeit
76109
76109 20.03.2009 um 15:21:53 Uhr
Goto Top
Hallo viewpoint,

face-smile ein Haus voller Spezialisten und keiner kann ein Excel-Macro schreiben?

Sieht der Tabellenaufbau genauso aus, wie im 1. Beitrag, oder stehen in jeder Zeile Abteilung und Kostenstelle und sind zwischen den Abteilungen Leerzeilen und und und?

Bitte Beispiel mit genauem Tabellenaufbau, am besten mit 2 Abteilungen und Aussehen der Ergebnistabelle an Hand des Beispiels.

Und existiert eventuell für die verschiedenen Abteilung eine Spalte mit eindeutiger Abteilungs-Nummer?


Gruß Dieter


PS. Die Tabellennamen wären auch wichtig.
viewpoint
viewpoint 21.03.2009 um 14:06:37 Uhr
Goto Top
Hallo!

Die Daten kommen aus dem SAP. Sobald ich am Montag wieder im Büro bin, werde ich 5-6 Zeilen hier rein kopieren.
Grundsätzlich sind zwischen den Abteilungen keine Leerzeichen oder Leerzeilen, es ist sortiert nach einer eindeutigen Nummer die der Mitarbeiter hat - jeder Mitarbeiter füllt eine Zeile.
Es kann sein, dass ein Mitarbeiter in der 10 Zeile steht, und sein Kollege der selben Abteilung mit der selben Kostenstelle 1000 Zeilen drunter.
Ich will quasi filtern welche Abteilungen es gibt, und welche Kostenstellen diese Abteilung führt (pro Abteilung können es mehrere Kostenstellen sein).
So wie es in meinem ersten Beitrag ist, so sollte es in etwa aussehen. Ich denke so ist es übersichtlich und damit kann man etwas anfangen.

Lg., bis Montag ;)
76109
76109 21.03.2009 um 14:36:52 Uhr
Goto Top
Hallo viewpoint,

danke für die Vorab-Info.

Die Mitarbeiter-Nummer ist für diesen Zweck ungeeignet.

Noch ein schönes WE

Gruß Dieter
viewpoint
viewpoint 23.03.2009 um 09:36:47 Uhr
Goto Top
Moin!

Sheet sieht folgender Maßen aus:

MAIL GIVENNAME SURNAME ACCOUNTNAME COMPANY ORGSHORT COSTCENTER NUMBER
pepi.maier@mail.com Pepi Maier MAIPE Gesellschaft 1 Prog 123456 100987
sepp.Huber@mail.com Sepp Huber HUBSE Gesellschaft 1 Prog 234567 100876
karl.gates@mail.com Karl Gates GATKA Gesellschaft 1 Prog 123456 100765
fred.seidl@mail.com Fred Seidl SEIFR Gesellschaft 1 Buch 345678 100654

Die erste Zeile ist die Überschrift. Daten sind natürlich Dummy-Daten (aus Datenschutzgründen...). Vorher und nachher sind noch einige Spalten wie "Anrede", "Gebäude", "Stockwerk", etc.
Ergebnis sollte nun so aussehen:
Gesellschaft 1
Prog
123456
234567
Buch
345678

Das einzige das wirklich einzigartig ist und den Mitarbeiter erkennbar macht, ist das Feld "NUMBER". Oder eben eine Kombination aus mehreren Attributen/Angaben.
76109
76109 23.03.2009 um 16:45:22 Uhr
Goto Top
Hallo viewpoint,

die Abteilung reicht als Orientierung aus. Mitarbeiter können wechseln. Dank der Finanzkrise ist ja wohl nix mehr sicher.

Habe ich das richtig verstanden, dass auch die Anzahl eingetragen werden soll. Also wie oft eine Kostenstelle verwendet wurde.

Und kann ich davon ausgehen, dass in Spalte S1 und V1 nichts drin steht?

Kann es auch so aussehen incl. Anzahl:

Gesellschaft 1
Prog 123456 5 (mal)
789012 3 (mal)
Buch 471108 7 (mal)
081547 12 (mal)

Aktuell habe ich es so:

Gesellschaft 1
Prog Kst1 Kst2 Kst3 Kst4 Kst5
Prog 5 3 7 1 9

Die obere Tabelle ist wesentlich komplizierter. D.h. ich müsste die untere nochmal in die obere umstricken.


Gruß Dieter

PS. Die Tabellblattnamen brauch ich auch noch?
viewpoint
viewpoint 24.03.2009 um 10:34:57 Uhr
Goto Top
Hallo!

eigentlich reicht Vorschlag 2 völlig aus.
das Sheet heißt "extUser". Ab Spalte AA steht nichts mehr drin - also überall inklusive Z.

Sieht ja ziemlich heftig aus - sollte man verkaufen ;)

Lg. Andreas
76109
76109 24.03.2009 um 17:52:38 Uhr
Goto Top
Hallo Andreas,

wie was, ich soll euch den Code verkaufen?

Die Frage bezüglich Spalte S1 und V1 war ein Missverständnis meinerseits.

Ein paar Fragen hab ich noch:

1. Wie heißt das Tabellenblatt mit den Quell-Daten?

2. Soll in Zeile 1 eine Überschrift und wenn ja, welche (Gesellschaft1...)?
  • Zeile 1 wird bei der Aktualisierung einfachheitshalber gelöscht.

3. Sollen mehr als derzeit 5 Kostenstellen pro Abteilungen vorgesehen werden?

4. Wie sollen die Werte aktualisiert werden ( dauert 1-2 Sekunden)?
  • Automatisch bei Veränderung der Quell-Daten oder manuell über Taste STRG + ?

5. Bestehen Kentnisse über VB-Editor und/oder ist dieser installiert?


Gruß Dieter
viewpoint
viewpoint 25.03.2009 um 08:08:53 Uhr
Goto Top
Hallo!

- Das Tabellenblatt heißt "extUser"
- Das Unternehmen besteht aus 5 Unternehmen. Es ist möglich, dass in dieser Liste 2 Unternehmen die gleiche Kostenstelle haben, aber nicht zusammen gehören
- Ich glaube dass es Abteilungen gibt, die bis zu 30 Kostenstellen haben - das will ich eben rausfinden
- Aktualisierung reicht eigentlich mit Klick auf einen Button - also per "Makro ausführen" bzw. Tastenkombi
- Kenntnisse über VB-Editor im Office hab ich. Allerdings kann ich so komplexe Schritte nicht programmieren - aber bestehenden Code lesen und verstehen.

Lg. Andreas
76109
76109 25.03.2009 um 11:11:07 Uhr
Goto Top
Hallo Andreas,

Also nochmal zum mitschreiben:

Es existiert eine Tabelle mit dem Namen extUser, dass ist soweit klar.
Aber ich habe zwei Tabellen einmal die, wo die ursprünglichen Daten
(SheetName?) stehen und einmal die, wo die Ergebnisse (SheetName?)
der Zählungen stehen?

Den Code ändere ich in soweit um, dass pro Abteilung maximal 255
Kostenstellen möglich sind.

Noch ein Tip: Ab und an ist es hilfreich Makros aufzuzeichnen und sich
den Code im VB-Editor anzusehen. Dabei wird zwar viel unnötiges an
Code geschrieben. Aber um zu sehen wie was funktioniert ist es doch
hilfreich.

Gruß Dieter

PS. Was ist mit der Überschrift in Zeile 1 (Tabelle Ergebnisse)?
viewpoint
viewpoint 25.03.2009 um 15:36:56 Uhr
Goto Top
Hallo!

Die Datei heißt extUser.xls
Das Tabellenblatt ebenfalls extUser
Dort wo die Ergebnisse hineinkommen sollen, würde ich "Berechnung" nennen

Eine echte Überschrift brauche ich eigentlich nicht, es würde reichen wenn ganz oben das Unternehmen steht

Meine VB Erfahrung habe ich eh aus Makros die ich mir ansehe und zum Größten Teil hier aus diesem Forum ;)

Lg.
76109
76109 25.03.2009 um 16:28:38 Uhr
Goto Top
Hallo Andreas,

das sehe ich jetzt erst face-sad. Du hast mich ganz schön reingelegt.

Der Hinweis, das mehrere Gesellschaften in einem Tabellenblatt vertreten sind,
hast Du bisher vergessen zu erwähnen. Jetzt kann ich grad nochmal von vorne
anfangen.

Zitat von @viewpoint:
Hallo!

- Das Tabellenblatt heißt "extUser"
- Das Unternehmen besteht aus 5 Unternehmen. Es ist möglich,
dass in dieser Liste 2 Unternehmen die gleiche Kostenstelle haben,
aber nicht zusammen gehören


Stimmt das weningstens so?

Zitat von @viewpoint:
Moin!

Sheet sieht folgender Maßen aus:

MAIL GIVENNAME SURNAME ACCOUNTNAME COMPANY ORGSHORT COSTCENTER NUMBER
@mail.com Pepi Maier MAIPE Gesellschaft 1 Prog 123456 100987
@mail.com Sepp Huber HUBSE Gesellschaft 1 Prog 234567 100876
@mail.com Karl Gates GATKA Gesellschaft 1 Prog 123456 100765
@mail.com Fred Seidl SEIFR Gesellschaft 1 Buch 345678 100654



Gruß Dieter
76109
76109 25.03.2009 um 20:13:22 Uhr
Goto Top
Hallo Andreas,

bei dem VBA-Code wird davon ausgegangen, das die extSheet-Tabelle genauso aussieht,
wie in der vorangegangenen Antwort "didi1954 schreibt am 25.03.2009 um 16:28:38 Uhr"

Es wird angenommen, dass sich folgende Einträge in folgenden Spalten befinden:

1. Spalte R = Gesellschaft
2. Spalte S = Abteilung
3. Spalte V = Kostenstelle

Ansonsten den Kopierbefehl im Code anpassen.


Es wird angenommen, dass folgende Tabellenblätter existieren:

1. Quell-Daten = "extUser"
2. Ziel-Daten = "Berechnung"

Ansonsten die Tabellennamen in den Set-Anweisungen ändern


Das Makro ist minimal getestet. Einen richtiger Test muss mit der Original-Tabelle
durchgeführt werden. Dazu schlage ich vor:

1. Das Makro in Modul 1 in einer Kopie der Excell-Datei zu kopieren
2. Das Makro mit einer Tastenkombination zu verknüpfen oder über Debugger starten
3. Die Quell-Daten in Sheet "extUser" ans Ende kopieren und wie folgt zu sortieren:
  • Zellen löschen: Zeile 1 und alle Spalten ausser R,S,V
  • Alle Zellen markieren und Dialog sortieren öffnen:
  • Eingabe 1 sortieren nach A
  • Eingabe 2 sortieren nach B
  • Eingabe 3 sortieren nach C

Nun müsste nach Gesellschaft mit den einzelnen Abteilungen und ihren Kostenstellen
sortiert sein. Jetzt kannst Du von Hand auszählen und die Werte Vergleichen.


Option Explicit
Option Compare Text


Sub CreateCostTable()
    Dim Scr As Worksheet, Des As Worksheet, Kst, Anz, Org As String, Cpy As String
    Dim Clr(0 To 254), EndLine As Long, Line As Long, r As Long, i As Integer, n As Integer
    
    On Error GoTo Ende

    Set Scr = Sheets("extUser"):  Set Des = Sheets("Berechnung")  
    
    With Des
       .Cells.Clear
        Application.ScreenUpdating = False
        
        Scr.Range("R:S,V:V").Copy Destination:=.Range("A1"): .Range("A1:C1").Clear  
      
       .Columns("A:C").Sort Key1:=.Range("A1"), Key2:=.Range("B1"), _  
                            Key3:=.Range("C1"), OrderCustom:=1  
    
        EndLine = .Cells(.Rows.Count, 2).End(xlUp).Row
        
        For r = 1 To EndLine
            If Not .Cells(r, 1) Like Cpy Then Cpy = .Cells(r, 1):  Org = ""  
            If Not .Cells(r, 2) Like Org Then
                Org = .Cells(r, 2):  Line = r:  i = 0:  n = 0
                Kst = Clr:  Anz = Clr:  Kst(0) = .Cells(r, 3):  Anz(0) = 1
            Else
                If Not .Cells(r, 3) Like Kst(i) Then
                    i = i + 1:  Kst(i) = .Cells(r, 3):  n = n + 1:  Anz(n) = 1
                Else
                    Anz(n) = Anz(n) + 1
                End If
            End If
            If Not .Cells(r + 1, 2) Like Org Then
                .Range(.Cells(Line, 3), .Cells(Line, 256)) = Kst
                .Range(.Cells(Line, 3), .Cells(Line, 256)).NumberFormat = "@"  
                .Range(.Cells(Line + 1, 3), .Cells(Line + 1, 256)) = Anz
                .Range(.Cells(Line + 2, 1), .Cells(r, 3)).Clear
            End If
        Next
       .Cells.Sort Key1:=.Range("A1")  
    End With
Ende:
    If Err Then MsgBox "Die Kostenstellenaufzählung ist fehlgeschlagen.", vbExclamation, "Fehler"  
    Application.ScreenUpdating = True

End Sub


Ergebnis:

Company 1 Prog Kst1 Kst2 Kst3 --- Kst254
Company 1 Prog 5 3 7 --- 9
Company 1 Buch Kst1 Kst2 Kst3 --- Kst254
Company 1 Buch 6 9 1 --- 3
Company 2 Prog Kst1 Kst2 Kst3 --- Kst254
Company 2 Prog 3 1 2 --- 5
Company 2 Buch Kst1 Kst2 Kst3 --- Kst254
Company 2 Buch 7 4 9 --- 3


Ich hoffe Du bist nicht zu sehr darüber schockiert, dass der Code - entgegen Deiner
Erwartungen - nicht so heftig ausgefallen ist, als angenommen.


Gruß Dieter
76109
76109 26.03.2009 um 16:04:35 Uhr
Goto Top
Hallo ,

habe am Code-Ende einen Fehler korrigiert: Muss natürlich heissen "Application.ScreenUpdating = True"

Gruß Dieter
viewpoint
viewpoint 26.03.2009 um 21:46:58 Uhr
Goto Top
Funktioniert perfekt :D ist genau das wonach ich suchte!

Vielen Dank!
76109
76109 26.03.2009 um 23:15:43 Uhr
Goto Top
Hallo Andreas,

Toll, wenn es funktioniert.

Ich denke das mit dem ScreenUpdating hast Du geändert?

Ganz am Anfang vom Code habe ich noch die "Option Compare Text" geschrieben.

Das bedeutet, dass beim Textvergleich mit dem Like-Operator nicht zwischen Groß/Kleinschreibung unterschieden wird.

Um gegebenenfalls sicher zugehen, dass sich keine Leerzeichen in den Textfeldern eingeschlichen haben, könnte man
noch an einigen Stellen eine Trim-Anweisung einfügen?


Gruß Dieter