Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
544to548
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
544to548
544to548
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige