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 |
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 ' 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 Diese Ergänzung ruft folgendes Makro auf: Sub löschen() |
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