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:
Wie kann ich das am besten umsetzen?
Danke für Tipps!
Lg. aus Wien
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 111741
Url: https://administrator.de/contentid/111741
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
19 Kommentare
Neuester Kommentar
Ich denke, am einfachsten löst man dieses Problem mit einer Pivot-Tabelle.
Hier findest Du eine gute Video-Anleitung zum Thema Pivot-Tabellen.
Hier findest Du eine gute Video-Anleitung zum Thema Pivot-Tabellen.
Hallo,
wieviele Abteilungen und Kostenstellen gibt es.?
Wo sollen die Ergebnisse hin?
Gruß Dieter
wieviele Abteilungen und Kostenstellen gibt es.?
Wo sollen die Ergebnisse hin?
Gruß Dieter
Hallo viewpoint,
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.
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.
Hallo viewpoint,
danke für die Vorab-Info.
Die Mitarbeiter-Nummer ist für diesen Zweck ungeeignet.
Noch ein schönes WE
Gruß Dieter
danke für die Vorab-Info.
Die Mitarbeiter-Nummer ist für diesen Zweck ungeeignet.
Noch ein schönes WE
Gruß Dieter
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:
Aktuell habe ich es so:
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?
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?
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...)?
3. Sollen mehr als derzeit 5 Kostenstellen pro Abteilungen vorgesehen werden?
4. Wie sollen die Werte aktualisiert werden ( dauert 1-2 Sekunden)?
5. Bestehen Kentnisse über VB-Editor und/oder ist dieser installiert?
Gruß Dieter
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
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)?
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)?
Hallo Andreas,
das sehe ich jetzt erst . 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.
Stimmt das weningstens so?
Gruß Dieter
das sehe ich jetzt erst . 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
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:
Moin!
Sheet sieht folgender Maßen aus:
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
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:
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.
Ergebnis:
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
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
Hallo ,
habe am Code-Ende einen Fehler korrigiert: Muss natürlich heissen "Application.ScreenUpdating = True"
Gruß Dieter
habe am Code-Ende einen Fehler korrigiert: Muss natürlich heissen "Application.ScreenUpdating = True"
Gruß Dieter
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
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