4.2k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich suche einen Code mit dem ich aus einer Liste mit Datumsangaben jeweils die Anzahl der Jahrgänge bestimmen kann:

15.09.1932
04.05.1932
21.02.1933
21.01.1935
16.11.1935
17.12.1935
15.05.1936
...
Also Jahrgang 1932 : 2
Jahrgang 1933 : 1
Jahrgang 1935 : 3 usw.
Hat jemand eine Idee?
Danke und Gruß.
A.

17 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
=Summenprodukt((Jahr(A1:A10)=1932)*1)

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Hajo,

danke für deine Antwort. Ich habe versucht, das in einen Code umzusetzen

anz = Application.CountIf(Year(Range("W2:W" & Cells(Rows.Count, 20).End(xlUp).Row)), Year(Cells(i, 23)))

wobei die Spalte "W" die Daten
15.09.1932
04.05.1932
21.02.1933
21.01.1935
16.11.1935
17.12.1935
15.05.1936
...
enthält. Der Code funktioniert so aber leider nicht.
Weißt du Rat?
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
das musst Du den Fragen der Dir CountIf vorgeschlagen hat. Ich war es nicht.

Gruß Hajo
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo,
vielleicht mit einem Makro so:

Option Explicit
Sub Jahrgänge()
Dim Zelle As Range
Dim Ber As Range
Dim LetzteZeile As Long
Dim Zähler As Long
Dim Name As Integer
Name = InputBox("Bitte das Jahr eingeben!")
LetzteZeile = Range("W65536").End(xlUp).Row
Set Ber = Range("W2:W" & LetzteZeile)
For Each Zelle In Ber
If Right(Zelle.Value, 4) = Name Then
Zähler = Zähler + 1
End If
Next
MsgBox "Jahr" & " " & Name & " : " & Zähler
End Sub

Gurß
fedjo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Danke fedjo,
das klappt und liefert das richtige Ergebnis.
Ich wollte in meinem Ansatz nur das Durchlaufen von Schleifen durch den CountIf(s)-Befehl umgehen. Ich habe mehrere Bedingungen in einem großen Datenfeld im konkreten Fall und müsste die Schleifen mehrmals durchlaufen lassen, was ganz schön dauert....
Also falls noch jemand eine Idee hat, wie ich mit CountIf aus Datumswerten nur die jeweiligen Jahreszahlen zählen lassen kann, dann wäre das prima.
Danke und Gruß
Andreas
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Andreas,
hab Dir mal ein Muster erstellt.

Tabelle1 Spalte W = Datum
Tabelle 1 Spalte X = Hilfsspalte (ausgeblendet)
Tabelle2: Auswertung

Gruß
fedjo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo fedjo,

klappt super, DANKE!!
Jetzt muss ich nur noch versuchen, dein geniales Programm zu verstehen....
VG Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

1)
countiff erfordert eine hilfsspalte mit Year

2)
summenprodukt braucht keine hilfsspalte durch die Arrayform bedingt

Matrix Format durch evaluate verfuegbar

und hier eine summenproduct lösung unseres excelgottes(ransi)

von der Rechengeschwindigkeit und Syntax Gestaltung ungeschlagen

gruss nighty

Public Sub test()
Dim arr
Dim L As Long
Dim objDic As Object
Dim strtmp As String
Dim Start As Double
Start = Timer
Set objDic = CreateObject("Scripting.Dictionary")
arr = Range("A1").CurrentRegion
Redim out(1 To UBound(arr), 1 To 1)
For L = LBound(arr) To UBound(arr)
strtmp = arr(L, 1) & "DUMMY" & arr(L, 6)
objDic(strtmp) = objDic(strtmp) + arr(L, 8)
out(L, 1) = objDic(strtmp)
Next
Range("I1").Resize(UBound(out)) = out
Debug.Print Timer - Start
End Sub
0 Punkte
Beantwortet von
countiff erfordert eine hilfsspalte mit Year


Hallo zusammen,

Das ist so nicht ganz richtig. Wie ich bereits hier über SumIfs geschrieben hatte, können Datumswerte auch als Zahlen interpretiert werden.

Versuchs mal hiermit:

anz = Application.CountIf(Range("W2:W" & Cells(Rows.Count, 20).End(xlUp).Row), ">=" & CLng(CDate("01.01." & Year(Cells(i, 23)))), _
Range("W2:W" & Cells(Rows.Count, 20).End(xlUp).Row), "<=" & CLng(CDate("31.12." & Year(Cells(i, 23)))))

Mr. K.
0 Punkte
Beantwortet von
Jetzt hab ich mich auch noch verschrieben. Die Formel ist natürlich Application.CountIfs
Sorry!
...