Clever-Excel-Forum

Normale Version: Häufigster Wert mehrfach vorkommender Datengruppen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo Liebe Comunity,

ich stelle mich kurz vor.

Meine Nickname ist badalamente und komme aus der schönen Pflaz. Zurzeit bin ich studen an einer TU und befasse mich mit Excel.
Besitze einige VBA Kentnisse in Access und sehr wenige in Excel.

Folgende Ausgangslage:

Name  Nachname Strecke Zeit                             Strecke/      Nachname    Zeit
                                                                        Name
x           y             1         00:02                             1
x           y             1         00:02                             x                       y      00:02
x           y             1         00:03                             x                       g       ##
x           g             1         00:02                             a                       b      0:04
x           g             1         00:01                             2
a           b             1         00:04                             c                       c       0:05
a           b             1         00:04
c           d             2         00:05
c           d             2         00:05
c           d             2         00:04

Ziel: Über einen Makro / Vba code eine Tablle erzeugen die für jede Strecke den zugehörigen Teilnehmer mit Name, Nachname und am häufigsten gelaufen Zeit (Modal funktion) angibt.

Die Ausgangstabelle wird ständig geändert und ist sehr lang (Viele Zeilen). Über ein Button soll die Prozedur von alleine laufen.

Wie kann ich das realisieren ? hat jmd Vorschläge ?
Schöne Grüße
Hallo b...,


noch einige Fragen:

1. Wie wird die Ausgangstabelle erstellt.
2. Kann das Programm davon ausgehen, dass die Zeilen nach Strecke, Name, Nachname und Zeit sortiert ist.
3. Was soll ausgeben werden wenn mehrere Zeiten gleich häufig vorkommen.
Servus bada,

hier mal ein Denkanstoß ...

Code:
Option Explicit

Public Sub Frequency()

   Dim Bereich As Range
   Dim Arr As Variant
   Dim Dic As Object
   Dim DicMax As Object, e As Variant
   Dim i As Long
   Dim a As String, b As String, c As String
   
   'Daten einlesen
   With ThisWorkbook.Worksheets("Tabelle1")
       Set Bereich = .Range("A2:D" & .Range("A" & .Rows.Count).End(xlUp).Row)
       Arr = Bereich.Value
   End With
   
   Set Dic = CreateObject("Scripting.Dictionary")
   Set DicMax = CreateObject("Scripting.Dictionary")
   
   For i = LBound(Arr, 1) To UBound(Arr, 1)
       a = Trim(Arr(i, 1)) & "|" & Trim(Arr(i, 2)) & "|" & Trim(Arr(i, 3))
       b = Format(Arr(i, 4), "hh:mm")
       c = a & "|" & b
       
       'Unikate zählen
       If Dic.Exists(c) Then
           Dic(c) = Dic(c) + 1
       Else
           Dic(c) = 1
       End If
       
       'Maximum je Strecke und Teilnehmer
       If DicMax.Exists(a) Then
           If DicMax(a)(0) < Dic(c) Then DicMax(a) = Array(Dic(c), b)
       Else
           DicMax(a) = Array(Dic(c), b)
       End If
   Next i
   

   'Ergebnis ausgeben
   With ThisWorkbook.Worksheets("Tabelle2")
       .UsedRange.ClearContents
       .Range("A1:E1").Value = Array("Name", "Nachname", "Strecke", "Anzahl", "Zeit")
       i = 2
       For Each e In DicMax.Keys
           .Range("A:E").Rows(i).Value = Array(Split(e, "|")(0), Split(e, "|")(1), Split(e, "|")(2), DicMax(e)(0), DicMax(e)(1))
           i = i + 1
       Next e
   End With

   'Aufräumen
   Dic.RemoveAll
   DicMax.RemoveAll
   Set Dic = Nothing
   Set DicMax = Nothing
   Set Arr = Nothing
   Set Bereich = Nothing
End Sub
LG Gerd
(26.02.2018, 12:53)Ego schrieb: [ -> ]Hallo b...,


noch einige Fragen:

1. Wie wird die Ausgangstabelle erstellt.
2. Kann das Programm davon ausgehen, dass die Zeilen nach Strecke, Name, Nachname und Zeit sortiert ist.
3. Was soll ausgeben werden wenn mehrere Zeiten gleich häufig vorkommen.

Hi Ego,

danke schon einmal dafür, mir helfen zu wollen.

1)  Die Tabelle wird aus einem anderm System importiert
2) Ja, dass Programm (EXCEL) kann davon ausgehen dass die Zeile nach Strecke, Name, Nachname und Zeit sortiert ist.
3) das ist egal. Kann "###" sein.

@ Bamberg,

auch dir danke.
Ich werde mir den Code anschauen und Ihn erst einmal sezieren müssen :19: .
Werde mich dann noch einmal melden.

Mfg
Badalamente
Guten Morgen Helfer,

@ Bamberg,

ich habe mir den Code angeschaut und folgendes Problem entdeckt:

Die maximale Zeit mehrerer Datensatzgruppen wird nicht ermitellt. Es wird immer nur der erste Zeitwert ausgegeben

Beispiel Augangstabelle :

Name Nachname   Strecke     Zeit
x           y                1        04:12:12
x           y                1        00:02:00
x           y                1        00:01:00
x           y                1        00:03:00
a           b                1        00:01:00
a           b                1        00:03:00  (eigentlich müsste dieser Wert - 00:03:00 - in der Ergebnistabelle erscheinen)

Ergebnistabelle:

Name Nachname   Strecke     Zeit
x           y                1        04:12:12 (das Ergbnis stimmt)
a           b                1        00:01:00 (das Ergebnis stimmt nicht)


Mfg
 
Badalamente
Hallo Badalamente,

in deiner ersten Anfrage hattest du nach der häufigsten Zeit gefragt und jetzt suchst du die grösste Zeit. Was willst du wirklich?

Wenn alle Zeiten in einer Gruppe nur einmal vorkommen, ist auch die erste Zeit eine der Zeiten die am häufigsten vorkommt.
Hi Ego,

Ich suche ich die maximale Zeit.
Ich suche eine Beispieldatei .....

Und du solltest pivottable ankucken.
Hi snb,

Pivottabellen schon angeschaut und umgesetzt. Leider führen diese nicht zum gewolltem Ergebnis.

Beispieldatei lade ich hoch.

Tabellenblatt "Beispieldatensätze" (stellen die eigentlichen Datensätze da)
Tabelle2 dient zur Darstellung der Ergbenisse.
Hallo, das kann ich nachvollziehen, weil ich andere Ergebnisse herausbekomme...
Seiten: 1 2 3