Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: Daten aus Zelle oder Array - Geschwindigkeit
von: Armin
Geschrieben am: 03.02.2010 18:03:32
Hallo,
ich sitze gerade vor der Frage, um wieviel schneller es ist Daten zunächst in eine Array-Variable einzulesen und anschließend einen Wert mit dem Inhalt der Array-Variable zu vergleichen. Die andere Alternative wäre, den Wert im dem direkten Inhalt einer Zelle zu vergleichen.
Beispiel Array:
for i = 1 to 10000
array(i) = cells(i,1).value
next i
for i = 1 to 10000
if wert = array(i) then
treffer = treffer +1
end if
next i
Beispiel direkter Vergleich
for i = 1 to 10000
if wert = cells(i,1).value then
treffer = treffer +1
end if
next i
Welche Variante ist unter Geschwindigkeits-Gesichtspunkten zu bevorzugen?
Vielen Dank für euere Tipps
Armin
Betrifft: AW: Daten aus Zelle oder Array - Geschwindigkeit
von: Josef Ehrensberger
Geschrieben am: 03.02.2010 18:09:50
Hallo Armin,
Betrifft: to 65000 im ersten Code! o.T.
von: Josef Ehrensberger
Geschrieben am: 03.02.2010 18:12:48
Betrifft: AW: Daten aus Zelle oder Array - Geschwindigkeit
von: Daniel
Geschrieben am: 03.02.2010 20:41:19
Hi
wenn ich verschiedene Varianten auf Geschwindigkeit testen will, verwende ich immer folgenden Testaufbau:
dabei habe ich ein Testmakro, daß die einzelnen Makros nacheinander aufruft und die Laufzeit im Direktfenster darstellt.
Außerdem habe ich für dein Problem noch 2 andere Lösungsvarianten hinzugefügt, die vom Speed her für dich auch interessant sein könnten:
Option Explicit '------------------------------------ Sub TestMakro() Dim T As Double Dim i As Long For i = 1 To 4 'an die anzahl der Makros anpassen T = Timer Application.Run "Makro" & i T = Timer - T Debug.Print "Makro" & i & ":", T Next End Sub '--------------------------------------- Sub makro1() Dim Treffer As Long Dim wert As Long Dim i As Long Dim arr(1 To 10000) wert = 10 For i = 1 To 10000 arr(i) = Cells(i, 1).Value Next i For i = 1 To 10000 If wert = arr(i) Then Treffer = Treffer + 1 End If Next i End Sub '------------------------------ Sub makro2() Dim i As Long Dim wert As Long Dim Treffer As Long wert = 10 For i = 1 To 10000 If wert = Cells(i, 1).Value Then Treffer = Treffer + 1 End If Next i End Sub '--------------------------- Sub makro3() Dim arr Dim Treffer As Long Dim i As Long Dim wert As Long wert = 10 arr = Range("A1:A10000").Value2 For i = 1 To 10000 If arr(i, 1) = wert Then Treffer = Treffer + 1 End If Next End Sub '------------------------------- Sub Makro4() Dim wert As Long Dim Treffer As Long wert = 10 Treffer = WorksheetFunction.CountIf(Range("A1:A10000"), wert) End Sub