Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Häufigkeit von Feldeinträgen

Häufigkeit von Feldeinträgen
27.02.2013 10:56:30
Feldeinträgen
Hallo,
Ich möchte gerne automatisch analysieren, wie häufig verschiedene Feldeinträge in einer Spalte vorhanden sind, die in der gleichen Zeile aber einer anderen Spalte zusätzlich ein Kriterium erfüllen - Siehe Beispieldatei anbei

Die Datei https://www.herber.de/bbs/user/84069.xlsx wurde aus Datenschutzgründen gelöscht

Das Kriterium für Spalte A steht in Feld G3.
Die Ergebnisliste sollte Top/Down sortiert sein und sich selbst die entsprechenden Namen zusammenstellen...
Geht das?
Danke euch
Martin

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Häufigkeit von Feldeinträgen
27.02.2013 11:52:14
Feldeinträgen
Danke schon einmal - das trifft die Sache aber noch nicht...
Ich dachte schon, dass meine Ergebnisse richtig sind. Du hast ja ein paar Datensätze hinzugefügt. Nach dem 13.Juni 2012 sind dann 20 Datensätze bzw. 18 die auch auf die 4 Namen passen - aber in deinen Ergebnissen sind es nur 10....?
Aber, es war leider komplizierter gefragt:
Die Ergebnisspalte sollten "sich selbst die entsprechenden Namen zusammenstellen" bedeutet die Namensliste der Ergebnisspalte soll ebenfalls automatisch generiert werden. Denn ich weiß nicht im Voraus, welche Namen auftauchen können.

Anzeige
AW: Häufigkeit von Feldeinträgen
27.02.2013 12:02:34
Feldeinträgen
Hallo Martin,
das geht sicher mit Formeln, währ mir aber grad zu aufwendig. Darf es VBA sein?
Grüße,
Klaus M.vdT.

AW: Häufigkeit von Feldeinträgen
27.02.2013 13:15:18
Feldeinträgen
VBA ist auch OK, auch wenn ich da nicht alt so viel von verstehe und dann halt sehen muss, wie ich das auf meine Mega-Tabelle umhebe.
Habe auch schon Pivot versucht, aber da bekomme ich keinen Datumsfilter wie größer/gleich heute()-180 hinein...
Danke euch.
Martin

Ops, falsche Hierarchieebene
27.02.2013 14:07:10
Klaus
Hallo Martin,
ich habe weiter unten "mir selbst" geantwortet und weiss nicht ob du darauf eine Mail bekommst .. deshalb hier nochmal per Link:
https://www.herber.de/forum/messages/1301294.html
Grüße, Klaus M.vdT.

Anzeige
OT: Wird er schon, Klaus!
27.02.2013 14:28:37
Luc:-?
Schon 'ne Idee zu ganz unten (2,3,6×)… ;-)
Gruß Luc :-?

AW: OT: Excelrätsel von Luc
27.02.2013 14:37:59
Luc
Hallo Luc,
ehrlich gesagt denke ich darüber schon nicht mehr nach :-)
Grüße,
Klaus M.vdT.

Na, dann eben nicht! orT
27.02.2013 18:28:21
Luc:-?
(Ein Link „…wäre Ihr Preis gewesen!“)
Gruß Luc :-?

...oder siehe unten! Gruß owT
27.02.2013 18:50:46
Luc:-?
:-?

AW: Ops, falsche Hierarchieebene
27.02.2013 14:33:10
Martin
Habe ich bekommen Danke.
Na ja, wenn du so ein Makro als weniger Arbeit empfindest muss dir das schon recht flüssig aus den Fingern kommen...
Du sagst, du hast es mit meiner Datei ausprobiert.
Kann ich die irgendwo auf dem Server sehen mit dem Makro drin - Würde mir sehr helfen.
Danke
Martin

Anzeige
zum Angeben: ohne VBA.
27.02.2013 14:49:48
Klaus
Hallo Martin,
nur um anzugeben und gut darzustehen habe ich das ganze nochmal VBA-frei gelöst.
(du hast recht, das ging schneller als das Makro zu schreiben).
https://www.herber.de/bbs/user/84076.xlsx
Formeln musst du jeweils so weit nach unten ziehen wie du sie brauchst.
Jetzt kann Luc sich das ganze anschauen und mit Matrixformeln ohne Hilfsspalten lösen, um mich wieder in meine Schranken zu verweisen :-)
Grüße,
Klaus M.vdT.

Anzeige
AW: Ops, falsche Hierarchieebene
27.02.2013 14:51:29
Martin
Sehr imponierend! Du mußt scho Wizzard.mäßig drauf sein!
Zwei Fragen habe ich:
1)
Das ganze müsste sich ohne Bottom mit der automatischen Berechnung selbst aktualisieren.
2)
Irgendwas stimmt mit den Zahlen noch nicht:
Es gibt 21 Sätze in den Tabelle
Davon sind 7 Sätze in 2013
Wenn ich als in Feld G3 31.12.2012 eingebe, sollten doch insgesamt die Summe 7 gelistet werden.
Wenn ich als in Feld G3 31.12.2011 eingebe, sollten dann insgesamt die Summe 21 gelistet werden.
So hatte ich mir das zumindest vorgestellt.
Danke die schon mal sehr!!!
Martin

Anzeige
AW: Ops, falsche Hierarchieebene
27.02.2013 15:04:08
Martin
OK, Jetzt verstehe ich unser Missverständnis:
Ich hatte geschrieben Kriterium sei GRÖ?ER/GLEICH G3 und nicht nur GLEICH.
Wo muss ich das im Makro noch ändern, damit es das tut?
Danke dir
Martin

AW: Ops, falsche Hierarchieebene
27.02.2013 15:13:25
Klaus
Hi,
dies hier
            'schreibe die Anzahl (ermittelt mit CountIfs - Excel 2010 !!
wksTarget.Cells(lRowTargetFirst, iColTargetNumm).Value = _
Application.WorksheetFunction.CountIfs(.Cells(1,iColSourceDate).EntireColumn,rDatumVergleich, .Cells(1, iColSourceName).EntireColumn, rBereich.Value)
tauscht du gegen:

'schreibe die Anzahl (ermittelt mit CountIfs - Excel 2010 !!
wksTarget.Cells(lRowTargetFirst, iColTargetNumm).Value = _
Application.WorksheetFunction.CountIfs(.Cells(1, iColSourceDate).EntireColumn, ">=" & rDatumVergleich * 1, .Cells(1, iColSourceName).EntireColumn, rBereich.Value)
Dann läuft der Vergleich nicht mehr auf "Ist Datum", sondern auf "Ist oder Größer als Datum".
Kleiner als analog dazu :-)
Grüße,
Klaus M.vdT.

Anzeige
Genau genommen ...
27.02.2013 15:15:51
Klaus
Hallo Martin,
das ist jetzt total unwichtig, aber ich bin so gern pedantisch.
Ich hatte geschrieben Kriterium sei GRÖ?ER/GLEICH G3 und nicht nur GLEICH.
Genau genommen hattest du das geschrieben:
die in der gleichen Zeile aber einer anderen Spalte zusätzlich ein Kriterium erfüllen - Siehe Beispieldatei anbei
In der Musterdatei wahr dann als Kriterium ein Datum angegeben .. da musste ich zu GLEICH tendieren und nicht zu GLEICH/GRÖSSER.
Grüße,
Klaus M.vdT.

AW: Genau genommen ...
27.02.2013 17:27:04
Martin
Stimmt, du hast Recht
Sorry!
Dafür noch 2 Fragen:
1)
Wo genau schreibe ich das hier hin:
Private Sub Worksheet_Calculate()
Call Auflisten 'Makro starten
End Sub

Habe "ThisWorkbook" 2 Zeilen unterhalb "Option Explicit" probiert, klappt aber nicht....
2)
Wenn die generierte Liste wegen z.B. eines anderen Datums kürzer wird, überschreibt das Makro "nur" die bestehende Liste und löscht diese nicht vorher, sodass die Liste dann zu lang/falsch ist, denn es stehen am Ende noch "alte" Daten...
Was müsste denn zum Makro dazu, damit es vorher sagen wir 200 Zeilen löscht?
Danke dir
Gruß Martin

Anzeige
AW: Genau genommen ...
27.02.2013 22:11:47
Klaus
Hallo Martin,
ich habe zwischendurch den Eindruck, dass du nicht auf meine aktuellsten Einträge antwortest sondern auf zufällige innerhalb der Eintragsliste :-)
Rechtsclick auf den Reiter "Tabelle1" unten links (oder wie dein Blatt auch heisst), dann auf "Code anzeigen". In das weiße Feld das Worksheet_Calculate kopieren.
Zur Erklärung: Module kennst du ja schon. Das hier ist quasi das Modul des Blattes selbst. Hier kann man schöne Sachen mit dem Blatt anstellen - zum Beispiel vor jedem "calculate" ein Makro aufrufen.
Ich gebe dir aber hier auf den Weg, dass das nicht so funktionieren wird wie du es dir vorstellst (es sei denn, du hast irgendwo volatile Funktionen auf dem Blatt).

2)
Wenn die generierte Liste wegen z.B. eines anderen Datums kürzer wird, überschreibt das Makro "nur" die bestehende Liste und löscht diese nicht vorher, sodass die Liste dann zu lang/falsch ist, denn es stehen am Ende noch "alte" Daten...

*pedantisch Modus an* Das liegt daran, dass du Eingangs danach gefragt hast wie man per Formel oder Makro die Liste erstellt - das implizierte nicht notwendigerweise das mehrmalige erstellen der Liste unter Löschung der vorherigen Listeneinträge. Wer präziser fragt, bekommt präzisere Lösungen *pedantisch Modus aus* Entschuldige bitte, da ist es grad wieder mit mir durchgegangen :-)

Was müsste denn zum Makro dazu, damit es vorher sagen wir 200 Zeilen löscht?

Soll das Makro genau 200 Zeilen löschen? Dann ergänze eine Zeile dafür:

with wksTarget
.range(.Cells(lRowTargetFirst, iColTargetName),.Cells(200+lRowTargetFirst, iColTargetNumm)). _
clearcontents
end with
With wksSource
'letzte Zeile automatisch ermitteln
lRowSourceLast = .Cells(.Rows.Count, iColSourceName).End(xlUp).Row
For Each rBereich In .Range(.Cells(lRowSourceFrom, iColSourceName), .Cells(lRowSourceLast,   _
_
iColSourceName))
'COUNTIF - kommt der Name das erste mal vor?
Die Zeilen
with wksTarget.range [...] end with/b>
kopierts du direkt vor das "with wkssource". Das löscht genau 200 Zeilen.
Anderersteits könnte man es auch so machen:

dim lRowLastClear as long
with wksTarget
lrowlastclear = .cells(.rows.count,icoltargetnumm).end(xlup).row
.range(.Cells(lRowTargetFirst, iColTargetName),.Cells(lrowlastclear, iColTargetNumm)).clearcontents
end with

Das löscht nicht exakt 200 Zeilen, sondern exakt die vorhandene Liste, egal wie lang sie ist.
Grüße,
Klaus M.vdT.

Anzeige
AW: Genau genommen ...
01.03.2013 15:49:32
Martin
Hallo Klaus,
So schön ich diese Lösung auch finde - ich bekomme es nicht hin. Ich habe deine Zeilen, sogut ich es verstanden habe, in das Makro hineinkopiert. und nun "funktioniert Excel nicht mehr richtig", stürzt also immer wieder ab.
Also entweder ich gebe das Ganze hier auf, oder du bist tatsächlich noch so toll und geduldig und passt das Makro in meiner Datei an. Ich hänge die letzte funktionierende Version nochmal dran.

Die Datei https://www.herber.de/bbs/user/84132.xlsm wurde aus Datenschutzgründen gelöscht


Das hier sind die beiden Features, die ich nicht "rein" bekomme:
1) vormaliges Listing löschen (exakt die vorhandene Liste)
2) automatisches update mit jeder Neuberechnung anstatt über Bottom
Wäre echt supertoll von dir!!!
Danke und Gruß
Martin

Anzeige
Eingebaut, Upload
02.03.2013 11:19:01
Klaus
Hi Martin,
hier hab ichs eingebaut.
https://www.herber.de/bbs/user/84143.xlsm
Was sollte der riesige Bereich mit verbundenen Zellen?
Ich hab in das Blatt irgendwo wo Platz war die Formel =JETZT() geschrieben. Das ist eine volatile Funktion. Das Makro wird bei jeder Neuberechung ausgelöst - Excel ist aber relativ zurückhalten damit, Neuberechnungen auszulösen. Volatile Funktionen müssen aber bei jeder Zelländerung (egal welche Zelle) einmal berechnet werden, darum wird durch das reine vorhandensein der Formel =JETZT() das Makro bei jeder Zelländerung angestoßen.
Grüße,
Klaus M.vdT.

AW: Eingebaut, Upload
04.03.2013 11:42:33
Martin
Vielen tausend Dank, Klaus!!!
Du bisr der GRÖßTE!
Alles funktioniert nun bestens.
Riesige Bereich mit verbundenen Zellen: Da hatte ich meine Forum-Anfrage hineinkopiert. Das mache ich immer am Ende solcher Recherchen, damit ich in 12 Monaten auch noch weiß, was ich eigentlich wollte... Man wird halt nicht jünger... und wenn man die Formeln nich oft benutzt, vergist man bzw. ich zumindest.
Danke nochmals
Gruß
Martin

Danke für die Rückmeldung! owT.
04.03.2013 14:04:41
Klaus
.

AW: Ops, falsche Hierarchieebene
27.02.2013 15:05:19
Klaus

2)
Irgendwas stimmt mit den Zahlen noch nicht:
Es gibt 21 Sätze in den Tabelle
Davon sind 7 Sätze in 2013
Wenn ich als in Feld G3 31.12.2012 eingebe, sollten doch insgesamt die Summe 7 gelistet werden.
Wenn ich als in Feld G3 31.12.2011 eingebe, sollten dann insgesamt die Summe 21 gelistet werden.
Ich verstehe kein Wort. Die momentane Formel ist in Pseudocode:
- schaue nach dem Namen Peters
- schaue nach dem Datum in G3
- vergleiche den Namen Peters mit Spalte A
- vergleiche das Datum aus G3 mit Spalte B
- wenn BEIDES eintritt, dann +1
Du schreibst jetzt plötzlich "im Jahr 2013" ... was willst du zählen, exakte Datums oder Jahre? Lad bitte mal eine neue Tabelle hoch, in der du per Hand in Farbe und bunt markierst, was gezählt wird!
1)
Das ganze müsste sich ohne Bottom mit der automatischen Berechnung selbst aktualisieren.

das ist gar kein Problem. Dafür gibt es Ereignisse:
Private Sub Worksheet_Calculate()
Call Auflisten 'Makro starten
End Sub

direkt in den Code des Tabellenblattes startet das Makro bei jedem calculate.
Sehr imponierend! Du mußt scho Wizzard.mäßig drauf sein!
Danke sehr! Ich halte mich da aber eher bescheiden, das o.g. Makro ist jetzt keine so große Kunst gewesen ("nur" ein paar Spaltenbedingungen und eine Worksheetfunction)
Grüße,
Klaus M.vdT.

AW: Häufigkeit von Feldeinträgen
27.02.2013 13:56:20
Feldeinträgen
Hi,
dieses Makro funktioniert in deiner Musterdatei. Ich habe es so geschrieben, dass man es möglichst einfach auf andere Dateien anpassen kann (dafur ist es etwas länger) und die wichtigsten Funktionen kommentiert.
Option Explicit
Sub Auflisten()
Dim wksSource As Worksheet
Dim wksTarget As Worksheet
Dim lRowSourceFrom As Long
Dim lRowSourceLast As Long
Dim lRowTargetFirst As Long
Dim iColSourceDate As Integer
Dim iColSourceName As Integer
Dim iColTargetName As Integer
Dim iColTargetNumm As Integer
Dim rBereich As Range
Dim rDatumVergleich As Range
Dim lTmpTargetRow As Long
Set wksSource = Sheets("Tabelle1")  'in dieser Tabelle stehen die Quellendaten
Set wksTarget = Sheets("Tabelle1")  'Hier soll die Auflistung hin ... gleiche Tabelle oder ne  _
andere
Set rDatumVergleich = wksSource.Range("G3") 'hier steht das Vergleichsdatum!
lRowSourceFrom = 2  'Auswertenab Zeile 2 (Überschriften in Zeile 1)
iColSourceDate = 1  'Datums stehen in Spalte A (A=1, B=2 usw)
iColSourceName = 2  'Namen stehen in Spalte B (A=1, B=2 usw)
lRowTargetFirst = 7 'Ergebnisse ab Zeile 7
iColTargetName = 5  'Namen schreiben in Spalte E (A=1, B=2 usw)
iColTargetNumm = iColTargetName + 1 'Ergebnisse schreifen in Spalte F (A=1, B=2 usw) : muss 1  _
rechts vom Namen sein!
lTmpTargetRow = lRowTargetFirst
With wksSource
'letzte Zeile automatisch ermitteln
lRowSourceLast = .Cells(.Rows.Count, iColSourceName).End(xlUp).Row
For Each rBereich In .Range(.Cells(lRowSourceFrom, iColSourceName), .Cells(lRowSourceLast,  _
iColSourceName))
'COUNTIF - kommt der Name das erste mal vor?
If Application.WorksheetFunction.CountIf(.Range(.Cells(lRowSourceFrom, iColSourceName),  _
Cells(rBereich.Row, iColSourceName)), rBereich.Value) = 1 Then
'schreibe den Namen
wksTarget.Cells(lRowTargetFirst, iColTargetName).Value = rBereich.Value
'schreibe die Anzahl (ermittelt mit CountIfs - Excel 2010 !!
wksTarget.Cells(lRowTargetFirst, iColTargetNumm).Value = _
Application.WorksheetFunction.CountIfs(.Cells(1, iColSourceDate).EntireColumn,  _
rDatumVergleich.Value, .Cells(1, iColSourceName).EntireColumn, rBereich.Value)
'erhöhe die nächste schreib-Zeile
lRowTargetFirst = lRowTargetFirst + 1
End If
Next rBereich
End With
'sortiere aufsteigend
With wksTarget
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range(.Cells(lTmpTargetRow - 1, iColTargetNumm), .Cells( _
lRowTargetFirst, iColTargetNumm)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SetRange .Range(.Cells(lTmpTargetRow - 1, iColTargetName), .Cells(lRowTargetFirst,  _
iColTargetNumm))
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
Grüße,
Klaus M.vdT.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige