Anzeige
Archiv - Navigation
1288to1292
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
Inhaltsverzeichnis

Code optimieren

Code optimieren
11.12.2012 10:52:48
Fritz_W
Hallo Forumsbesucher,
zwar funktioniert der nachfolgende Code wie gewünscht, dennoch dauert die Ausübung
des Makros 'Vervollstaendigen' in einzelnen Fällen etwas lange(bis zu 4 Sekunden).
Vielleicht können mir die VBA-Experten Änderungsvorschläge unterbreiten, damit die Laufzeit des Makros ggf. verkürzt werden kann.
Im Voraus besten Dank für Eure Unterstützung.
mfg
Fritz
Sub Vervollstaendigen()
Application.ScreenUpdating = False
If Tabelle1.Range("A1").Value = 1 Then
Call Ergaenzen1
Tabelle2.Range("D4:L12").Value = Tabelle1.Range("D6:L14").Value
End If
Call Ergaenzen2
Application.ScreenUpdating = True
End Sub
Sub Ergaenzen1()
Dim ArrayData, tmpArr, n&, nn&
Tabelle1.Range("CY6:DG14").Value = Tabelle1.Range("D6:L14").Value
Tabelle1.Range("O11").Value = Tabelle1.Range("O10").Value
Tabelle1.Range("O10").Value = 4
With Tabelle1.Range("D18:L26")
Do While Tabelle1.Range("D17") > 0
ArrayData = .Value
tmpArr = .Offset(-12, 0).FormulaR1C1
For n = 1 To UBound(ArrayData)
For nn = 1 To UBound(ArrayData, 2)
If ArrayData(n, nn)  "" Then
If IsNumeric(ArrayData(n, nn)) Then tmpArr(n, nn) = ArrayData(n, nn)
End If
Next nn
Next n
.Offset(-12, 0).FormulaR1C1 = tmpArr
Loop
End With
Tabelle1.Range("O10").Value = Tabelle1.Range("O11").Value
End Sub
Sub Ergaenzen2()
If Tabelle1.Range("A1").Value = 1 And Tabelle1.Range("A2").Value = 0 Then
Tabelle2.Range("D4:L12").Value = Tabelle1.Range("D6:L14").Value
Call Variante_1
Call Variante_2
Call Variante_3
Call Variante_4
Call Variante_5
Call Variante_6
Call Variante_7
Call Variante_8
End If
End Sub
Sub Variante_1()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_2
Tabelle1.Range("P12").Value = 2
Call Einfuegen_2
Tabelle1.Range("P12").Value = 3
Call Einfuegen_2
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_2()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_1
Tabelle1.Range("P12").Value = 2
Call Einfuegen_1
Tabelle1.Range("P12").Value = 3
Call Einfuegen_1
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_3()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_2
Tabelle1.Range("P12").Value = 2
Call Einfuegen_1
Tabelle1.Range("P12").Value = 3
Call Einfuegen_1
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_4()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_2
Tabelle1.Range("P12").Value = 2
Call Einfuegen_2
Tabelle1.Range("P12").Value = 3
Call Einfuegen_1
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_5()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_1
Tabelle1.Range("P12").Value = 2
Call Einfuegen_2
Tabelle1.Range("P12").Value = 3
Call Einfuegen_1
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_6()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_1
Tabelle1.Range("P12").Value = 2
Call Einfuegen_2
Tabelle1.Range("P12").Value = 3
Call Einfuegen_2
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_7()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_1
Tabelle1.Range("P12").Value = 2
Call Einfuegen_1
Tabelle1.Range("P12").Value = 3
Call Einfuegen_2
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Variante_8()
If Tabelle1.Range("A2").Value = 0 Then
Tabelle1.Range("P12").Value = 1
Call Einfuegen_2
Tabelle1.Range("P12").Value = 2
Call Einfuegen_1
Tabelle1.Range("P12").Value = 3
Call Einfuegen_2
End If
If Tabelle1.Range("A2").Value = 0 Then
Call Ergaenzen1
End If
If Tabelle1.Range("A3").Value = 1 Then
Tabelle1.Range("D6:L14").Value = Tabelle2.Range("D4:L12").Value
End If
End Sub
Sub Einfuegen()
Tabelle1.Range("CY6:DG14").Value = Tabelle1.Range("D6:L14").Value
Dim ArrayData, tmpArr, n&, nn&
With Tabelle1.Range("D18:L26")
ArrayData = .Value
tmpArr = .Offset(-12, 0).FormulaR1C1
For n = 1 To UBound(ArrayData)
For nn = 1 To UBound(ArrayData, 2)
If ArrayData(n, nn)  "" Then
If IsNumeric(ArrayData(n, nn)) Then tmpArr(n, nn) = ArrayData(n, nn)
End If
Next nn
Next n
.Offset(-12, 0).FormulaR1C1 = tmpArr
End With
Tabelle1.Range("CY18:DG26").Value = Tabelle1.Range("D6:L14").Value
End Sub
Sub Einfuegen_1()
Dim ArrayData, tmpArr, n&, nn&
With Tabelle1.Range("D28:L36")
ArrayData = .Value
tmpArr = .Offset(-22, 0).FormulaR1C1
For n = 1 To UBound(ArrayData)
For nn = 1 To UBound(ArrayData, 2)
If ArrayData(n, nn)  "" Then
If IsNumeric(ArrayData(n, nn)) Then tmpArr(n, nn) = ArrayData(n, nn)
End If
Next nn
Next n
.Offset(-22, 0).FormulaR1C1 = tmpArr
End With
End Sub
Sub Einfuegen_2()
Dim ArrayData, tmpArr, n&, nn&
With Tabelle1.Range("D38:L46")
ArrayData = .Value
tmpArr = .Offset(-32, 0).FormulaR1C1
For n = 1 To UBound(ArrayData)
For nn = 1 To UBound(ArrayData, 2)
If ArrayData(n, nn)  "" Then
If IsNumeric(ArrayData(n, nn)) Then tmpArr(n, nn) = ArrayData(n, nn)
End If
Next nn
Next n
.Offset(-32, 0).FormulaR1C1 = tmpArr
End With
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Deine 'Basiskenntnisse' scheinen ja ...
11.12.2012 14:33:15
Luc:-?
…schon etwas fortgeschrittener zu sein, Fritz,
so dass man eine Performance-Steigerung wohl nicht ohne nähere Einarbeitung in den Ablauf erreichen kann. Deshalb erst mal nur soviel, die Variante_n- und Einfügen_n-Subroutinen sind so wahrscheinl nicht nötig, da sie sich ja kaum unterscheiden. Man könnte die kleinen Unterschiede wohl auch über Parameterübergabe an jeweils eine einzige erreichen, was den Umbau des ganzen Pgm(Ablauf)s zur Voraussetzung bzw Folge hat. Dadurch könnte es (aber muss nicht!) schneller wdn.
Gruß Luc :-?

AW: Deine 'Basiskenntnisse' scheinen ja ...
11.12.2012 16:58:17
Fritz_W
Hallo Luc,
ich backe auch hin und wieder eine Obsttorte und verwende dabei jedes Mal einen Tortenboden, den ich gekauft habe :)
Dir schon mal herzlichen Dank, dass Du Dir das Ganze näher angeschaut hast.
Mit meinen Kenntnissen konnte ich halt auch nicht ausschließen, dass (schon kleine) Änderungen sich spürbar auf die Laufzeit auswirken könnten.
Da der Code aber funktioniert, wag ich es nicht, es den Programmablauf umzubauen.
Viele Grüße
Fritz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige