Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Zählen???





Frage

Hallo, ich hoffe ihr könnt mir ein Makro oder eine Formel empfählen. Ist folgendes Machbar? habe eine Datenbank mit ca. 10000 Datensätzen. in Spalte A steht Mitarbeiter nummer(Duplikate sind vorhanden). Spalte B Stehen Arten der Aufträge und in C sind Aufträge. z.b. Mitarbeiter 239 hat Auftragsart 100 und Auftrag 8373 und Mitarbeiter 239 hat Auftragsart 100 und Auftrag 8473 usw. es ist so dass auftrag immer nur einmal vorkommt und Auftragsart kann genauso wie Mitarbeiter mehrfach vorkommen. Würde gerne in eine andere Tabelle dann raussuchen lassen wieviele unterschiedliche Auftragsarten und Aufträge es zu dem Mitarbeiter gibt. ist sowas machbar?? Danke.

Antwort 1 von TeX

Hi Sftefee

Ich weiß jetzt nicht aus dem Kopf wie das geht, aber die Funktion ZÄHLENWENN in Excel hilft Dir da sicher weiter.

Einfach mal in der Hilfe nach ZÄHLENWENN suchen und das dortige Beispiel nachvollziehen.

Ansonsten könnte man sich auch ein Makro schreiben, welches dann in einer Extra-Tabelle oder Extra-Sheet gleich die gewünschten Ausgaben auflistet, aber vielleicht reicht ja der obige Lösungsvorschlag.

Gruß TeX

Antwort 2 von Sftefee

Hi Tex,

ich habe shcon mit allem probiert.
Die Formal DBAnzahl macht schon das was ich will, aber zählt auch die dublikate die ich habe mit.. denn es gibt ja mehrerer Aufträge die die gleiche auftragsart haben.
muss nur noch dieses Problem lösen eigentlich. kann man das mit dem makro lösen?
denn ich hab z.b. zu einer Mitarbeiternummer 290 Aufträge aber er zeigt mir dann auch 290 Auftragsarten an. aber ich weis das es weniger sind.

Danke

Antwort 3 von piano

Hallo
Probier eine Pivot-Tabelle:
Mitarbeiter nach Zeile / Spalte (- je nach Bedarf)
Auftragsart nach Spalte / Zeile
Auftragsnummer nach Daten und Formel "Anzahl" wählen.

Gruß piano

Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
- probieren geht über studieren -

Antwort 4 von Sftefee

Danke piano,

aber kann es sein, dass der pc probleme damit hat, da es so viele Datensätze sind.
Der bringt mir nur ein leerestabellenblatt.

Antwort 5 von piano

Hallo
An der Anzahl Datensätze kann es nicht liegen, aber die Anzahl der Mitarbeiter / Auftragsarten könnte ein Problem sein. Hast du es mit einer kleinen Menge deiner Daten versucht?
Ausserdem sollte die Tabelle nach Mitarbeiter und Auftragsart sortiert sein.
Gruß piano
PS: VBA-Lösung ist auch möglich, melde dich aber vorher!

Antwort 6 von CaroS

Hallo,

ich hätte hier eine Formel-Lösung, allerdings mit Einschränkungen. Es geht nur für max. 249 Mitarbeiter. 3 Hilfsspalten habe ich verbaut, 2 Formeln müssen bis zur letzten benutzten Zeile runterkopiert werden (ca. 10000) und das Ergebnis ist auch nur eine wahrscheinlich ziemlich große (und in der Praxis wahrscheinlich auch ziemlich leere) Kreuztabelle horz-Mitarbeiter / vert-Auftragsart mit der jeweiligen Anzahl an Aufträgen je Mitarbeiter und Auftragsart. Das meiste werden wohl Null- bzw. Leerwerte sein. Ein Beispiel sagt mehr als 1000 Worte:

Ergebnis: | MA4 | MA2 | MA5
----------+-----+-----+-----
AuftrArt1 | _72 | ___ | __6
----------+-----+-----+-----
AuftrArt8 | ___ | 143 | __2
----------+-----+-----+-----
AuftrArt5 | __9 | _18 | 355
----------+-----+-----+-----
AuftrArt2 | ___ | ___ | _64
----------+-----+-----+-----
AuftrArt9 | _12 | ___ | ___


Werte:
A1: Spaltenüberschrift MA-Nr
B1: Spaltenüberschrift A-Art
C1: Spaltenüberschrift A-Nr

A2:A9999 MA-Nummern (auch nichtnumerisch möglich)
B2:B9999 Art.-Arten (auch nichtnumerisch möglich)
C2:C9999 Art.-Nummern (auch nichtnumerisch möglich)

Formeln:
von:bis eintragen in Zelle: =Formel

D2:D9999 D2: =WENN(ZÄHLENWENN(A$2:A2;A2)=1;ZEILE(A2);"")

E2:E249 (maximal) E2: =WENN(ZEILE(D2)-1>ANZAHL(D:D);"";INDEX(A$2:A$9999;KKLEINSTE(D$2:D$9999;ZEILE(2:2)-1)))

F2:F9999 F2: =WENN(ZÄHLENWENN(B$2:B2;B2)=1;ZEILE(B2);"")

G2:G1000 G2: =WENN(ZEILE(F2)-1>ANZAHL(F:F);"";INDEX(B$2:B$9999;KKLEINSTE(F$2:F$9999;ZEILE(2:2)-1)-1))

H1:IV1 markieren und als Matrixformel eingeben: {=MTRANS(E$2:E$4)}

H2 markieren und als Matrixformel eingeben: {=SUMMENPRODUKT(($A$2:$A$9999=H$1)*($B$2:$B$19=$G2))}

H2 markieren und kopieren/ziehen nach H2:IV1000

H2:IV1000 benutzerdefiniertes Zahlenormat "0;;;@"
H:IV Spaltenbreite anpassen, Spalten D:F verbergen


Das war´s, Freunde der Formelprogrammierung, 6 kleine Formeln, ist doch gar nicht sooo schlimm! Aber mit VBA geht natürlich noch viel mehr und viel bequemer.

Gruß,
CaroS

Antwort 7 von Sftefee

Danke CaroS,

ich werde mir das mal überlegen ob ich das einbauen oder umsetzen kann.. Aber denke das ist eine gute Lösung.

Vielen Dank.

Antwort 8 von Saarbauer

Hallo,

ein Makro, Aufbau etwa wie @ CaroS.

Sub Auswertung()
Sheets("Tabelle2").Select
Rows("1:" & Range("A65536").End(xlUp).Row + 1).Select
Selection.ClearContents
Sheets("Tabelle1").Select
Zeile1 = Range("A65536").End(xlUp).Row
Rows("1:" & Range("A65536").End(xlUp).Row + 1).Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A2").Select
ActiveSheet.Paste
Columns("C:Z").Select
Application.CutCopyMode = False
Selection.ClearContents
Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A1:A" & Range("A65536").End(xlUp).Row).Select
Selection.Cut Destination:=Range("A2:A" & Range("A65536").End(xlUp).Row + 1)
Columns("B:B").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Zeile = Range("A65536").End(xlUp).Row
Spalte = Range("B65536").End(xlUp).Row

For j = 1 To 2
Wert = Cells(3 - j, j).Value
For i = 4 - j To Zeile
Cells(i, j).Select
If ActiveCell.Value = Wert And Not ActiveCell.Value = "" Then
Selection.Delete Shift:=xlUp
i = i - 1
Else
Wert = Cells(i, j).Value

End If
Next i
Next j

Zeile = Range("A65536").End(xlUp).Row
Spalte = Range("B65536").End(xlUp).Row

For i = 2 To Spalte
Cells(1, i + 1).Value = Cells(i, 2).Value
Next i

Range("B2").Select
ActiveCell.FormulaR1C1 = _
"=SUMPRODUCT((Tabelle1!R1C1:R" & Zeile1 & "C1=Tabelle2!RC1)*(Tabelle1!R1C2:R" & Zeile1 & "C2=Tabelle2!R1C))"
Ende$ = "B2:" & Chr(Spalte + 65) & Zeile
Selection.Copy
Range(Ende$).Select
ActiveSheet.Paste
Range("B" & Zeile + 1).Select
ActiveCell.FormulaR1C1 = "=SUM(R[" & -Zeile + 1 & "]C:R[-1]C)"
Selection.Copy
Ende$ = "B" & Zeile + 1 & ":" & Chr(Spalte + 65) & Zeile + 1
Range(Ende$).Select
ActiveSheet.Paste
Range(Chr(Spalte + 66) & "2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[" & -Spalte & "]:RC[-1])"
Selection.Copy
Ende$ = Chr(Spalte + 66) & "2:" & Chr(Spalte + 66) & Zeile
Range(Ende$).Select
ActiveSheet.Paste
Range("B" & Zeile + 2).Select
ActiveCell.FormulaR1C1 = "=COUNTIF(R[" & -Zeile & "]C:R[-2]C,"">0"")"
Selection.Copy
Ende$ = "B" & Zeile + 2 & ":" & Chr(Spalte + 65) & Zeile + 2
Range(Ende$).Select
ActiveSheet.Paste
Range(Chr(Spalte + 67) & "2").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(RC[" & -Spalte - 1 & "]:RC[-2],"">0"")"
Selection.Copy
Ende$ = Chr(Spalte + 67) & "2:" & Chr(Spalte + 67) & Zeile
Range(Ende$).Select
ActiveSheet.Paste
Cells(Zeile + 1, 1).Value = "Summe"
Cells(Zeile + 2, 1).Value = "Verschiedene"
Cells(1, Spalte + 2).Value = "Summe"
Cells(1, Spalte + 3).Value = "Verschiedene"
End Sub

rüberkopieren und mal Testen

War etwas zu langsam, aber trotzdem

Gruß

Helmut

Antwort 9 von Sftefee

hallo Saarbauer,

wie muss ich da meine Tabelle aufbauen?? muss ich dann meine Mitarbeiter schon ordnen???

Funktioniert auch ein Makro mit meinem Tabellenaufbau??

Also

Mitarbeiter Auftragsart Auftragsnummer Wert
9383 555 222 10
9383 555 223 -125
9383 220 224 586
9585 555 225 99
usw.

also es gibt ziehmlich viele Mitarbeiter und Einige Auftragsarten, die sich wiederholen können und die Auftragsnummer ist eigentlich immer einmal vorhanden..

Es soll dann gezählt werden zu den jeweiligen Mitarbeitern wieviel unterschiedliche Auftragsarten es gibt und Aufttragsnummern.

und am ende soll auch noch der anzahl der werte in 3 spalten aufgezeigt werden 1. bis 100 dann von 101 bis 500 und von 501 bis 1000 euro.


ist das auch möglich???

Danke

Antwort 10 von Saarbauer

Hallo,

die jetz eingestellte Tabelle ist etwas anders als die ursprünglichen Angaben

Mit meiner Tabelle werden die Angaben aus deiner Tabelle in ein 2. Blatt kopiert und automatisch nach Mitarbeiter und Auftragsart sortiert, doppelte gelöscht und dann werden für jeden Mitarbeiter die ausgeführten Aufträge nach Auftragsart ermittelt (da die Auftragsnummern nur einmal vorkommen, sind diese aus meiner Sicht uninteressant). Zum Schluss werden für jenen Mitarbeiter die Anzahl der Aufträge aller Auftragsarten und die Anzahl der unterschiedlichen Auftragsarten ermittelt. Genau so erfolgt die Ermittlung bei den Auftragsarten, Anzahl der ausgeführten Aufträge, Anzahl der verschiedenen Mitarbeiter

Ich würde zu einem Test mit einer Hilfsdatei raten und Vielleicht das Makro schritt für Schritt ("F8") abarbeiten

Die oben genannte Ergänzung ist mir noch nicht ganz klar, sollte aber erst eingearbeitet werden, wenn der rest passt. Dürfte kein größerer Aufwand sein

Gruß

Helmut

Antwort 11 von Sftefee

Hallo Saarbauer,
Super, es funktioniert alles perfekt und es helft mir auch.
Das Problem ist nur, dass ich auch werte habe die sich in der Spalte D befindet. Kann man auch ein Makro umschreiben, dass die Werte in gruppen eingeteilt werden? das z.b. Ein Mitarbeiternummer 8 Auftragnummern hat die einen Wert unter 100 euro haben oder 7 Aufträge zu einer Mitarbeiternummer haben einen wert zwichen 100 und 500 und am besten nicht nur die anzahl der Aufträge sonder auch eine Summe der Aufträge.

Danke

Antwort 12 von CaroS

Hallo Sftefee,

ich nehme an, dass die Formellösung längst raus aus dem Rennen ist, deshalb schreibe ich keine Formeln mehr, aber die drei Werte
  • Anzahl Auftragsarten pro MA
  • Anzahl Aufträge pro MA insgesamt
  • Anzahl Aufträge pro MA und Kategorie (bis 100, bis 500, bis 2000, ... ?)
    lassen sich sehr einfach mit ANZAHL2, SUMME und SUMMEWENN berechnen. Genau für sowas ist Excel sozusagen mal erfunden worden, könnte man sagen. Allerdings würde ich das dann oberhalb der Kreuztabelle berechnen, sonst sucht man sich ja ... oder benutzt einen Namen.

    Ergebnis: | MA4 | MA2 | MA5 
    ----------+-----+-----+----- 
    Auf-Arten | _xx | _yy | _zz
    Auft_alle | xxx | yyy | zzz
    Auft__100 | _xx | __y | zzz
    Auft__500 | xxx | _yy | __z
    Auft_2000 | __x | yyy | _zz
    ----------+-----+-----+----- 
    AuftrArt1 | _72 | ___ | __6 
    ----------+-----+-----+----- 
    AuftrArt8 | ___ | 143 | __2 
    ----------+-----+-----+----- 
    AuftrArt5 | __9 | _18 | 355 
    ----------+-----+-----+----- 
    AuftrArt2 | ___ | ___ | _64 
    ----------+-----+-----+----- 
    AuftrArt9 | _12 | ___ | ___ 


    Vielleicht nutzt es ja noch jemand anders für irgendwas, dann ist jetzt alles halbwegs beisammen und wir fangen nächstes Mal nicht wieder ganz von vorne an.

    Gruß,
    CaroS

  • Antwort 13 von Saarbauer

    Hallo,

    vom Grundsatz her kein Problem, es sit sogar möglich die genauen Beträge der Auftragsgruppe zu übernehmen. Ich habe jetz mal die genauen Beträge je Auftrag aus einer Auftragsgruppe übernommen.

    Die Daten werden auf den 3 Blatt ausgeworfen

    Der nachfolgenden Teil ( zwischen den _____)ist am Schluss vor dem End Sub einzufügen
    ______________________

    Sheets("Tabelle3").Select
    Rows("1:" & Range("A65536").End(xlUp).Row + 1).Select
    Selection.ClearContents

    Sheets("Tabelle2").Select
    Rows("1:" & Range("A65536").End(xlUp).Row - 1).Select
    Selection.Copy
    Sheets("Tabelle3").Select
    Range("A1").Select
    ActiveSheet.Paste

    Columns(Chr(Spalte + 67) & ":Z").Select
    Application.CutCopyMode = False
    Selection.ClearContents

    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
    "=SUMPRODUCT((Tabelle1!R1C1:R" & Zeile1 & "C1=Tabelle3!RC1)*(Tabelle1!R1C2:R" & Zeile1 & "C2=Tabelle3!R1C)*(Tabelle1!R1C4:R" & Zeile1 & "C4))"
    Ende$ = "B2:" & Chr(Spalte + 65) & Zeile
    Selection.Copy
    Range(Ende$).Select
    ActiveSheet.Paste
    _________________

    Gruß

    Helmut

    P.S. kann natürlich auch in einem Blatt untergebracht weerden, etwas zusätzlicher Aufwand. Und auch mit Preisgruppen

    Antwort 14 von Sftefee

    Hallo Helmut,
    ich weiß nicht was das Makro macht aber es bringt mir im Tabellenblatt3 keine Werte sondern dieses #Wert! usw.

    weis nicht woran das liegt.


    Gruß

    Antwort 15 von Saarbauer

    Hallo,

    ich habe es nochmal getestet, aber bei mir funktioniert es ohne Probleme.

    Leider ist es schwer den genauen Fehler so festzustellen. Ich vermute Ergänzung falsch reinkopiert, ein Name/Wert wird nicht gefunden oder eine Angabe ist keine Zahl.

    Stell mal die Zelle mit #Wert hier ein, hielft vielleicht weiter

    Kannst du mir mal deine emailadresse mitteileen, erhälst dann meine. (Ausatausch der Dateine, des Makros)

    Gruß

    Helmut

    Ich möchte kostenlos eine Frage an die Mitglieder stellen:


    Ähnliche Themen:


    Suche in allen vorhandenen Beiträgen: