Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Funktion CountIf

Forumthread: Funktion CountIf

Funktion CountIf
12.08.2015 17:36:15
Andi...
Hallo,
Ich möchte folgendes Problem lösen: in der Tabelle stehen in Spalte 5 die Auftragsnummern, diese sollen verglichen werden und wenn eine Auftragsnummer mehrmals vorkommt, dann soll „WAHR“ und wenn diese nur einmal vorkommt, dann soll „Falsch“ in Spalte 8 ausgegeben werden. Momentan habe ich das mit der Funktion "Zählenwenn" gelöst:
=Zählenwenn(E2:E$10000;E2)>1
Das Funktioniert auch ganz gut nur es dauert sehr lange, wenn alle Daten aktualisiert werden und alle Formeln neu berechnet werden.
Nun möchte ich das Ganze mit VBA lösen. Ich habe hierzu auch schon einen Code aber mit diesem dauert die Prozedur noch länger:
Sub Vergleich()
Dim Hilfstabelle As Worksheet
Dim i As Long
Dim j As Long
Dim werT As Long
Dim Bereich As Range
Set Hilfstabelle = ThisWorkbook.Worksheets("Hilfstabelle")
j = Hilfstabelle.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To Hilfstabelle.Cells(Rows.Count, 5).End(xlUp).Row
If Application.WorksheetFunction.CountIf(Range(Cells(i, 5), Cells(j, 5)), Cells(i, 5)) 
Habt Ihr vielleicht eine Idee wie man den Code anpassen müsste, damit dieser schneller läuft?
Viele Grüße
Andi

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion CountIf
12.08.2015 18:02:10
Rudi
Hallo,
reich 0,1 Sek. für 20000 Datensätze?
Sub AuftragsAnzahl()
Dim vArr, i As Long
Dim oCount As Object
Set oCount = CreateObject("scripting.dictionary")
vArr = Range(Cells(2, 5), Cells(Rows.Count, 5).End(xlUp))
For i = 1 To UBound(vArr)
oCount(vArr(i, 1)) = oCount(vArr(i, 1)) + 1
Next
For i = 1 To UBound(vArr)
vArr(i, 1) = oCount(vArr(i, 1)) > 1
Next
Cells(2, 8).Resize(UBound(vArr)) = vArr
End Sub
Wenn du die Anzahl willst, lasse einfach > 1 weg
Gruß
Rudi

Anzeige
AW: Funktion CountIf
12.08.2015 18:21:16
Andi...
Hallo Rudi,
ja 0,1 Sek ist ausreichend :-)
Vielen Dank, der Code läuft super.
Grüße
Andi

AW: Funktion CountIf
13.08.2015 09:56:11
Andi...
Hallo Rudi,
ein Frage hätte ich noch, lässt sich der Code auch so anpassen, dass wenn der Auftrag zum ersten mal vorkommt "Falsch" und bei allen weiteren gleichen Auftragsnummern "Wahr" ausgegeben wird?
Grüße
Andi

Anzeige
AW: Funktion CountIf
13.08.2015 12:30:07
Rudi
Hallo,
sicher geht das.
Sub AuftragsAnzahl()
Dim vArr, i As Long
Dim oCount As Object, oCountA As Object
Set oCount = CreateObject("scripting.dictionary")
Set oCountA = CreateObject("scripting.dictionary")
vArr = Range(Cells(2, 5), Cells(Rows.Count, 5).End(xlUp))
For i = 1 To UBound(vArr)
oCount(vArr(i, 1)) = oCount(vArr(i, 1)) + 1
Next
For i = 1 To UBound(vArr)
If oCountA.exists(vArr(i, 1)) Then
vArr(i, 1) = oCount(vArr(i, 1)) > 1
Else
oCountA(vArr(i, 1)) = 0
vArr(i, 1) = False
End If
Next
Cells(2, 8).Resize(UBound(vArr)) = vArr
End Sub

Gruß
Rudi

Anzeige
AW: Funktion CountIf
13.08.2015 16:43:07
Andi...
Hallo Rudi,
Vielen Dank, funktioniert einwandfrei.
Gruß
Andi

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige