Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Daten aus Zelle oder Array - Geschwindigkeit | Herbers Excel-Forum


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,


es kommt natürlich immer auf den jeweiligen Einsatz an,
aber den Zeitunterschied kannst du ja leicht testen.


Sub test1()
  Dim vntArray As Variant
  Dim lngIndex As Long, lngC As Long
  Dim t As Double
  
  t = Timer
  
  vntArray = Range("A1:A65000")
  
  For lngIndex = 1 To 25000
    If vntArray(lngIndex, 1) = 1 Then lngC = lngC + 1
  Next
  
  MsgBox Timer - t
End Sub

Sub test2()
  Dim rng As Range
  Dim lngC As Long
  Dim t As Double
  
  t = Timer
  
  For Each rng In Range("A1:A65000")
    If rng = 1 Then lngC = lngC + 1
  Next
  
  MsgBox Timer - t
End Sub


Gruß Sepp



  

Betrifft: to 65000 im ersten Code! o.T. von: Josef Ehrensberger
Geschrieben am: 03.02.2010 18:12:48


Gruß Sepp



  

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

Gruß, Daniel