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

SumIf - geht das auch schneller?

Forumthread: SumIf - geht das auch schneller?

SumIf - geht das auch schneller?
13.01.2005 21:33:24
Melanie
Hallo VBA-Spezies!
Ich habe eine Datei von 25.000 Zeilen, bei der ich die Sum-If-Funktion verwende für 2 verschiedene Spalten. Das funktioniert auch - aber es DAUERT!!! So ungefähr 20 - 30 Minuten - ist das normal? Das Screenupdating habe ich schon ausgeschaltet. Hier ist mein Code:
Dim crit as Variant
Dim i as Integer
Range("p1").Select
For i = 1 To ActiveSheet.UsedRange.Rows.Count
Set crit = Cells(i, 1)
ActiveCell.Value = Application.SumIf(Range("A:A"), crit, Range("L:L"))
ActiveCell.Offset(1, 0).Select
Next
Dasselbe Problem habe ich noch in einer anderen Datei, die allerdings rund 50.000 Zeilen hat. Da habe ich pro Zeile ungefähr 10 S-Verweise über Application.Worksheetfunction..... eingefügt und auch mit For-Next-Schleife. Kann man das auch irgendwie schneller machen?
Gruß,
Melanie
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SumIf - geht das auch schneller?
Reinhard
Hi Melanie,
probiers mal so:

Sub tt()
Dim i As Long, zei As Long
zei = ActiveSheet.UsedRange.Rows.Count
For i = 1 To zei
Cells(i, 16) = Application.SumIf(Range("A:A"), Cells(i, 1), Range("L:L"))
Next
End Sub

und das andere, poste mal den Code
Gruß
Reinhard
Anzeige
AW: SumIf - geht das auch schneller?
13.01.2005 22:00:00
Josef
Hallo Melanie!


      
Sub test()
Dim crit As Range
Dim lRow As Long
Dim lastRow As Long
With Application
.ScreenUpdating = 
False
.EnableEvents = 
False
.DisplayAlerts = 
False
.Calculation = xlCalculationManual
End With
lastRow = IIf(Range(
"A65536") <> "", 65536, Range("A65536").End(xlUp).Row)
For lRow = 1 To lastRow
   
Set crit = Cells(lRow, 1)
'   Cells(lRow, 16) = Application.SumIf(Range("A:A"), crit, Range("L:L")) '0:03:04 für 10.000 Zeilen
Cells(lRow, 16) = Application.Evaluate("=SUMMEWENN(" & Range("A:A").Address & _
";" & crit.Address & ";" & Range("L:L").Address & ")")   '0:02:47 für 10.000 Zeilen
Next
With Application
.ScreenUpdating = 
True
.EnableEvents = 
True
.DisplayAlerts = 
True
.Calculation = xlCalculationAutomatic
End With
End Sub 


Ergebnisse mit 433 mHz ;-))
Gruß Sepp
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige