Lösungen zu Aufgabe1:


Die Frage als Worddokument findet Ihr hier: http://excelabc.de/excel/lernen/aufgabe1.doc  
Diese stammt von  Peter Haserodt

Eintragen könnt ihr Eure Lösung(en) in ein moderiertes Gästebuch
Das bedeutet: Deine Lösung wird erst zur Eröffnung eingeblendet.
Vorher sehen die anderen Deine Lösung nicht.

Demoarbeitsmappe                   Lösung von Peter

Alle Lösungen in einer Arbeitsmappe:

Mit 10 000 Zeilen Mit 60 000 Zeilen

Einen sehr ausführlichen Kommentar für diese Übung hat Peter zusammengestellt.
Hier könnt ihr sehr viel zu dieser Aufgabe nachlesen.
Vor allen Dingen: Einen Sieger dürft Ihr selber küren.
Jeder Lösungsansatz hat seine Vor und Nachteile.

Das für mich verblüffenste war allerdings folgendes:

Je nach Rechnerausstattung, Excelversion und Zeilenumfang läuft die eine oder die andere Lösung eine Idee schneller.
Die Auswertung aller Lösungen unter 3 Rechnerumgebungen war ganz schön zeitaufwändig.
Seht Euch mal hier das Ergebnis dazu an.

Lösung3 von Berti  :  
Kommentar: Außer Konkurrenz, da ich bereits andere Lösungen kenne.
                   Die Zuweisung über den Tabellenblattnamen ist aber mit Vorsicht zu genießen.
Option Explicit
'Diese Api liefert 1000stel Sekunden von Windowsstart
'dies kann man dann nutzen um einen Vorgang zu messen:

Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben_____Berti3()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Dim xrange

Set xrange = [Tabelle1].[A1:A10000]
[Tabelle1].[A1].Formula = "2"
xrange.DataSeries Step:=2, Stop:=20000

Set xrange = [Tabelle2].[A1:A10000]
[Tabelle2].[A1].Formula = "1"
xrange.DataSeries Step:=2, Stop:=19999

[Tabelle3].[A1:A10000].FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
' Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
[Tabelle1].[G66] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Marcus Berndt: 06.12.2001, 16:54
Kommentar:  
'Alle Variablen müssen deklariert sein
Option Explicit
'Diese Api liefert 1000stel Sekunden von Windowsstart
'dies kann man dann nutzen um einen Vorgang zu messen:

Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben___Marcus4()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long

'Start
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
'Gerade Zahlen eintragen
Worksheets("Gerade").Select
Range("A1") = 2
'statt A1:A10000 die Reihe zuzuweisen, lieber Excel
'20.000 Operationen durchführen lassen => schneller.

Range("A1").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2, Stop:=20000
'Ungerade Zahlen eintragen
Worksheets("Ungerade").Select
Range("A1") = 1
'statt A1:A10000 die Reihe zuzuweisen, lieber Excel
'20.000 Operationen durchführen lassen => schneller.
Range("A1").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2, Stop:=20000
'Formel in Tabelle "Summe" eintragen
Worksheets("Summe").Select
'im Direktzugriff auf A1:A10000 schneller als mit Filldown:
Range("A1:A10000") = "=Gerade!RC+ungerade!RC"
Worksheets("Gerade").Select 'Nachträglich
'Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G63] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Marcus Berndt: 06.12.2001, 08:42
Kommentar:  
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Marcus3()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
'Start
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
'Gerade Zahlen eintragen
Worksheets("Gerade").Select
Range("A1") = 2
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
'Ungerade Zahlen eintragen
Worksheets("Ungerade").Select
Range("A1") = 1
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
'Formel in Tabelle "Summe" eintragen
Worksheets("Summe").Select
'Formel direkt zuweisen, statt nach unten zu kopieren:
Range("A1:A10000") = "=Gerade!RC+Ungerade!RC"
Worksheets("Gerade").Select 'Nachträglich
'Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G60] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Marcus Berndt: 05.12.2001, 22:59
Kommentar:  
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Marcus2()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
'Start
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
'Gerade Zahlen eintragen
Worksheets("Gerade").Select
Range("A1") = 2
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
'Ungerade Zahlen eintragen
Worksheets("Ungerade").Select
Range("A1") = 1
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
'Formel in Tabelle "Summe" eintragen
Worksheets("Summe").Select
Range("A1:A10000") = "=Gerade!RC+ungerade!RC"
Worksheets("Gerade").Select 'Nachträglich
'Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G57] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Josef Burch: 05.12.2001, 21:18
Kommentar: Keine Formeln im Summenblatt
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Josef3()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

' Makro von Burch Josef Variante2
' Gerade Zahlen eintragen

With Worksheets("Gerade")
.Range("A1") = 2
.Range("A1").DataSeries Rowcol:=xlColumns, Step:=2, Stop:=20000
End With
'Ungerade Zahlen eintragen
With Worksheets("Ungerade")
.Range("A1") = 1
.Range("A1").DataSeries Rowcol:=xlColumns, Step:=2, Stop:=19999
End With
'Summe bilden
With Worksheets("Summe")
.Range("A1") = 3
.Range("A1").DataSeries Rowcol:=xlColumns, Step:=4, Stop:=39999
End With
Debug.Print GetTickCount - iAnfangsZeit
' Ausgabe der 1000stel Sekunden im Direktfenster
Worksheets("Gerade").[G54] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Udo Reichenbach: 05.12.2001, 17:28
Kommentar:  
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Udo2()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
Sheets("Gerade").Select
Range("A1").FormulaR1C1 = "2"
Range("A2").FormulaR1C1 = "4"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
Range("A1:A10000").Select
Sheets("Ungerade").Select
Range("A1").FormulaR1C1 = "1"
Range("A2").FormulaR1C1 = "3"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
Range("A1:A10000").Select
Sheets("Summe").Select
Range("A1").FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
Range("A1").Select
Selection.Copy
Range("A2:A10000").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Sheets("Gerade").Select 'Nachträglich
Application.ScreenUpdating = True
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G51] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Marcus Berndt: 05.12.2001, 17:04
Kommentar:  
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Marcus()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
'Start
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
'Formel in Tabelle "Summe" eintragen
Worksheets("Summe").Select
Range("A1") = "=Gerade!RC+ungerade!RC"
Range("A1:A10000").FillDown
'Gerade Zahlen eintragen
Worksheets("Gerade").Select
Range("A1") = 2
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
'Ungerade Zahlen eintragen
Worksheets("Ungerade").Select
Range("A1") = 1
Range("A1:A10000").DataSeries _
Rowcol:=xlColumns, Type:=xlLinear, Step:=2
Sheets("Gerade").Select 'nachträglich
'Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G48] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung2 von Monika Weber: 05.12.2001, 16:49
Kommentar:  
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben___Monika2()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Worksheets("Gerade").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "0"
Range("A2").Select
ActiveCell.FormulaR1C1 = "2"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A1000"), Type:=xlFillDefault
Worksheets("Ungerade").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Range("A2").Select
ActiveCell.FormulaR1C1 = "3"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A1000"), Type:=xlFillDefault
Worksheets("Summe").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
Sheets("Gerade").Select 'nachträglich
Debug.Print GetTickCount - iAnfangsZeit
' Ausgabe der 1000stel Sekunden im Direktfenster
Worksheets("Gerade").[G45] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung2 von Hajo: 05.12.2001, 09:08
Kommentar:  
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long
Sub ZahlenEingeben___Hajo2()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Worksheets("Gerade").Range("A1") = 2
Worksheets("Gerade").Range("A2:A10000").FormulaR1C1 = "=R[-1]C+2"
Worksheets("Ungerade").Range("A1") = 1
Worksheets("Ungerade").Range("A2:A10000").FormulaR1C1 = "=R[-1]C+2"
Worksheets("Summe").Range("A1:A10000").FormulaR1C1 = "=Gerade!RC+ungerade!RC"
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G42] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung2 von Josef Burch: 04.12.2001, 21:06
Kommentar:  
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Josef2()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

' Makro von Burch Josef Variante2
' Gerade Zahlen eintragen

With Worksheets("Gerade")
.Range("A1") = 2
.Range("A1").DataSeries Rowcol:=xlColumns, Step:=2, Stop:=20000
End With 
'Ungerade Zahlen eintragen
With Worksheets("Ungerade")
.Range("A1") = 1
.Range("A1").DataSeries Rowcol:=xlColumns, Step:=2, Stop:=19999
End With
'Summe berechnen
Worksheets("Summe").Range("A1:A10000").FormulaR1C1 = "=Gerade!RC+ungerade!RC"
Debug.Print GetTickCount - iAnfangsZeit
' Ausgabe der 1000stel Sekunden im Direktfenster
Worksheets("Gerade").[G39] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Thomas Risi: 04.12.2001, 02:20
Kommentar: Kleiner Fehler bei der Dimensionierung des Datenfeldes, dadurch SpalteB
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben___ThomasRisi()
Dim iAnfangsZeit As Long
'Altangaben löschen vor dem stoppen
Call löschenRisi
iAnfangsZeit = GetTickCount

Dim i As Long
Dim Gerade(1 To 10000, 1) As Integer 'kleiner Fehler
Dim Ungerade(1 To 10000, 1) As Integer 'kleiner Fehler
For i = 1 To 10000
Ungerade(i, 0) = 2 * i - 1
Gerade(i, 0) = 2 * i
Next i
Worksheets("Ungerade").Range("B1:B10000") = Ungerade
Worksheets("Gerade").Range("B1:B10000") = Gerade
Worksheets("Summe").Range("B1:B10000").FormulaR1C1 = "=Gerade!RC+ungerade!RC"
Debug.Print GetTickCount - iAnfangsZeit
Sheets("Gerade").[G36] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung3 von Thomas Ramel : 03.12.2001, 10:11
Kommentar: Ein total anderer Lösungsansatz  :-)
Option Explicit
Private Declare Function
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Thomas3()
Dim iAnfangsZeit As Long
'Altangaben löschen vor dem stoppen
Call löschen
iAnfangsZeit = GetTickCount


Dim i As Integer
Dim Gerade(1 To 10000, 0)
Dim Ungerade(1 To 10000, 0)
For i = 1 To 10000
Gerade(i, 0) = i * 2
Ungerade(i, 0) = i * 2 - 1
Next i

Sheets("Gerade").[A1:A10000] = Gerade()
Sheets("Ungerade").[A1:A10000] = Ungerade()
Sheets("Summe").[A1:A10000] = "=Gerade!RC + Ungerade!RC"

Debug.Print GetTickCount - iAnfangsZeit
Sheets("Gerade").[G33] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung2 von Thomas Ramel : 03.12.2001, 10:09
Kommentar:  
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Thomas2()
Dim iAnfangsZeit As Long
'Altangaben löschen vor dem stoppen
Call löschen
iAnfangsZeit = GetTickCount


Sheets("Gerade").[A1] = 2
Sheets("Gerade").[A1:A10000].DataSeries Rowcol:=xlColumns, Step:=2, Stop:=20000

Sheets("Ungerade").[A1] = 1
Sheets("Ungerade").[A1:A10000].DataSeries Rowcol:=xlColumns, Step:=2, Stop:=19999

Sheets("Summe").[A1:A10000] = "=Gerade!RC + Ungerade!RC"

Debug.Print GetTickCount - iAnfangsZeit
Sheets("Gerade").[G30] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Thomas Ramel: 03.12.2001, 07:34
Kommentar:  
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Thomas()
Dim iAnfangsZeit As Long
'Altangaben löschen vor dem stoppen
Call löschen
iAnfangsZeit = GetTickCount


Application.ScreenUpdating = False

Sheets("Gerade").Select
Range("A1").Select
ActiveCell.Value = 2
Selection.DataSeries Rowcol:=xlColumns, Step:=2, Stop:=20000

Sheets("Ungerade").Select
Range("A1").Select
ActiveCell.Value = 1
Selection.DataSeries Rowcol:=xlColumns, Step:=2, Stop:=19999

Sheets("Summe").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(Gerade!RC,Ungerade!RC)"
Range("A1:A10000").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlAutoFill

Sheets("Gerade").Select

Application.ScreenUpdating = True 'False Minifehler

Debug.Print GetTickCount - iAnfangsZeit
Sheets("Gerade").[G27] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Josef Burch: 02.12.2001, 19:14
Kommentar:  
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben___Josef()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount


'Makro von Josef Burch

'Gerade Zahlen eintragen

Worksheets("Gerade").Range("A1") = 2
Worksheets("Gerade").Range("A2") = 4
Worksheets("Gerade").Range("A1:A2").AutoFill Destination:=Worksheets("Gerade").Range("A1:A10000"), Type:=xlFillDefault

'Ungerade Zahlen eintragen
Worksheets("Ungerade").Range("A1") = 1
Worksheets("Ungerade").Range("A2") = 3
Worksheets("Ungerade").Range("A1:A2").AutoFill Destination:=Worksheets("Ungerade").Range("A1:A10000"), Type:=xlFillDefault

'Summe berechnen
Worksheets("Summe").Range("A1:A10000").FormulaR1C1 = "=Gerade!RC+ungerade!RC"

Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G24] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Peter Gloor: 01.12.2001, 19:50
Kommentar: Peter hat auf jeden Fall am besten Kommentiert
Option Explicit
'Diese Api liefert 1000stel Sekunden von Windowsstart
'dies kann man dann nutzen um einen Vorgang zu messen:

Private Declare Function _
GetTickCount Lib "kernel32" () As Long

Public Sub ZahlenEingeben_____p_gloor()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
'Start
iAnfangsZeit = GetTickCount

' Schritt 1:
' Arbeitsblatt "Gerade" auswählen,
' in erster Zelle den Wert 2 eingeben,
' den gewünschten Bereich auswählen
' und den gewählten Bereich in 2er-
' Schritten linear bis 19999 auffüllen

Worksheets("Gerade").Activate
Range("A1").Value = 2
Range("A1:A10000").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Step:=2, Stop:=20000, Trend:=False
Range("A1").Select ' Selektion auf erste Zelle setzen

' Schritt 2:
' Arbeitsblatt "Ungerade" auswählen,
' in erster Zelle den Wert 1 eingeben,
' den gewünschten Bereich auswählen
' und den gewählten Bereich in 2er-
' Schritten linear bis 19999 auffüllen

Worksheets("Ungerade").Activate
Range("A1").Value = 1
Range("A1:A10000").Select
Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Step:=2, Stop:=19999, Trend:=False
Range("A1").Select ' Selektion auf erste Zelle setzen

' Schritt 3:
' Arbeitsblatt "Summe" auswählen,
' in erster Zelle die Formel setzen,
' den gewünschten Bereich auswählen
' und den gewählten Bereich mit der
' Formel nach unten füllen

Worksheets("Summe").Activate
Range("A1").FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
Range("A1:A10000").Select
Selection.FillDown
Range("A1").Select ' Selektion auf erste Zelle setzen

' 4. Schritt
' 1. Arbeitsblatt aktivieren (optionaler Rücksprung)

Worksheets("Gerade").Activate

' Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G21] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Monika Weber: 01.12.2001, 10:00
Kommentar:   
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben___Monika1()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Dim i As Integer
Dim c As Variant

Worksheets("Gerade").Select
Range("A1:A10000").Select
Selection.ClearContents
i = 0
For Each c In Selection
c.Value = i
i = i + 2
Next c

Worksheets("Ungerade").Select
Range("A1:A10000").Select
Selection.ClearContents
i = 1
For Each c In Selection
c.Value = i
i = i + 2
Next c

Worksheets("Summe").Select
Range("A1:A10000").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
Range("A1").Select
Selection.AutoFill Destination:=Range("A1:A10000")
Range("A1:A10000").Select
Sheets("Gerade").Select 'nachträglich

Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G15] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Udo Reichenbach: 01.12.2001, 02:12
Kommentar:  
Option Explicit
Private Declare Function _
GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben___Udo()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long

iAnfangsZeit = GetTickCount
Application.ScreenUpdating = False
Sheets("Gerade").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "2"
Range("A2").Select
ActiveCell.FormulaR1C1 = "4"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
Range("A1:A10000").Select
Sheets("Ungerade").Select
ActiveCell.FormulaR1C1 = "1"
Range("A2").Select
ActiveCell.FormulaR1C1 = "3"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
Range("A1:A10000").Select
Sheets("Summe").Select
ActiveCell.FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
Range("A1").Select
Selection.Copy
Range("A2:A10000").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A1").Select
Sheets("Gerade").Select
Application.ScreenUpdating = True
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G12] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Lösung von Hajo: 01.12.2001, 00:42
Kommentar: Dies war am Anfang das schnellste Makro, bis sich herausstellte, dass es nur bis 1000 ging  :-(
                    Kleiner Schönheitsfehler: in den Tabellenblättern Gerade und Ungerade stehen keine Zahlen.
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub ZahlenEingeben___Hajo()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long
iAnfangsZeit = GetTickCount

Worksheets("Gerade").Range("A1") = 2
Worksheets("Gerade").Range("A2:A10000").FormulaR1C1 = "=R[-1]C+2"
Worksheets("Ungerade").Range("A1") = 1
Worksheets("Ungerade").Range("A2:A10000").FormulaR1C1 = "=R[-1]C+2"
Worksheets("Summe").Range("A1:A10000").FormulaR1C1 = "=Gerade!RC+ungerade!RC"
Debug.Print GetTickCount - iAnfangsZeit
Worksheets("Gerade").[G9] = (GetTickCount - iAnfangsZeit) / 1000

End Sub

Lösung von Berti: 30.11.2001, 22:16
Kommentar:  
Option Explicit
'Diese Api liefert 1000stel Sekunden von Windowsstart
'dies kann man dann nutzen um einen Vorgang zu messen:

Private Declare Function _
GetTickCount Lib "kernel32" () As Long
Public Sub ZahlenEingeben_____Berti()
'Altangaben löschen vor dem stoppen
Call löschen
Dim iAnfangsZeit As Long

Dim WS1 As Worksheet, WS2 As Worksheet, WS3 As Worksheet
Set WS1 = Worksheets(1)
Set WS2 = Worksheets(2)
Set WS3 = Worksheets(3)
iAnfangsZeit = GetTickCount
WS1.[A1] = 1
WS1.[A1].DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Step:=2, Stop:=19999
WS2.[A1] = 2
WS2.[A1].DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Step:=2, Stop:=20000
WS3.[A1].FormulaR1C1 = "=Gerade!RC+Ungerade!RC"
WS3.[A1].AutoFill Destination:=WS3.Range("A1:A10000"), _
Type:=xlFillDefault
' Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit
WS1.[G6] = (GetTickCount - iAnfangsZeit) / 1000
End Sub

Demolösung von Berti: Datum, Uhrzeit
Kommentar: Konkurrenzlos langsam!
'Alle Variablen müssen deklariert sein
Option Explicit
'Diese Api liefert 1000stel Sekunden von Windowsstart
'dies kann man dann nutzen um einen Vorgang zu messen:

Private Declare Function GetTickCount Lib "kernel32" () As Long

Sub ZahlenEingeben____Demo()
Dim iAnfangsZeit As Long
'Start
iAnfangsZeit = GetTickCount


'Gerade Zahlen eintragen
Dim i
Worksheets("Gerade").Activate
Range("A1").Select
Selection = 2
For i = 2 To 10000
Selection.Offset(1, 0).Select
Selection = Selection.Offset(-1, 0) + 2
Next i
Range("A1").Select

'Ungerade Zahlen eintragen
Worksheets("Ungerade").Activate
Range("A1").Select
Selection = 1
For i = 2 To 10000
Selection.Offset(1, 0).Select
Selection = Selection.Offset(-1, 0) + 2
Next i
Range("A1").Select

'Formel in Tabelle "Summe" eintragen
Worksheets("Summe").Activate
Range("A1").Select
Selection.FormulaR1C1 = "=Gerade!RC+ungerade!RC"
For i = 1 To 9999
Selection.Offset(1, 0).Select
Selection.FormulaR1C1 = "=Gerade!RC+ungerade!RC"
Next i
Range("A1").Select

'Ausgabe der 1000stel Sekunden im Direktfenster
Debug.Print GetTickCount - iAnfangsZeit

'Bitte nur in der Demo!
MsgBox (GetTickCount - iAnfangsZeit) / 1000 & " Sekunden" _
& Chr(13) & "Weiß jemand eine noch langsamere Methode?"

End Sub

 

Jeder hat um einen einheitlichen Start zu haben, folgende Ergänzung bekommen:

'Altangaben löschen vor dem stoppen
Call löschen

Diese Ergänzung ruft folgendes Makro auf:

Sub löschen()
Dim WS1 As Worksheet, WS2 As Worksheet, WS3 As Worksheet
Set WS1 = Worksheets(1)
Set WS2 = Worksheets(2)
Set WS3 = Worksheets(3)
WS1.Columns(1) = ""
WS2.Columns(1) = ""
WS3.Columns(1) = ""
WS1.[a1].Select
WS2.[a1].Select
WS3.[a1].Select
End Sub



Diese Seite ist Teil eines Framesets von Excelabc.de.
Falls Sie auf der linken Seite kein Navigationsframe sehen, klicken Sie bitte auf das Logo.

letzte Aktualisierung dieser Seite am Montag, 29. November 2004 06:59