User Tools

Site Tools


vba:functions:increment

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
vba:functions:increment [26.11.2014 10:46:19]
yaslaw
vba:functions:increment [29.04.2015 11:02:55]
yaslaw
Line 1: Line 1:
 <​const>​ <​const>​
     version=1.0.0     version=1.0.0
-    vdate=26.10.2014+    vdate=25.11.2014
     fname=lib_increment.bas     fname=lib_increment.bas
     ns=%NAMESPACE%     ns=%NAMESPACE%
Line 8: Line 8:
  
 ====== [VBA] Increment/​Decrement (i++ etc) ====== ====== [VBA] Increment/​Decrement (i++ etc) ======
-==Version ​%%version%% - %%vdate%%==+//Simuliert ein %%i++ oder ++i%% für VBA.//
  
 +==Version %%version%% - %%vdate%%==
 {{%%fname%%|Download %%fname%% (V-%%version%%)}} {{%%fname%%|Download %%fname%% (V-%%version%%)}}
  
-In vielen Sprachen kennt man %%PostIncrement und PreIncrement%%. Also ++i und i++. +In vielen Sprachen kennt man %%PostIncrement%% und %%PreIncrement%%. Also ''​%%++%%i'' ​und ''​i%%++%%''​
-Leider kennt VBA das nicht. Somit muss bei einer Manuellen Schleife dies immer cvon hand mittels i = i+1 durchgeführt werden.+Leider kennt VBA das nicht. Somit muss bei einer Manuellen Schleife dies immer von Hand mittels ​''​i = i+1'' ​durchgeführt werden.
 \\ Mit den folgenden Funktionen kann amn das umgehen. \\ Mit den folgenden Funktionen kann amn das umgehen.
 +
  
 ===== Beispiele ===== ===== Beispiele =====
 +> Für die Ausgabe der Resultate verwendete ich die Funktion [[:​vba:​functions:​print_r:​]].
 +
 +Ich nehme 2 mal dieselbe Funktion. Es wird i jeweils um 1 hochgezählt. Das Quadrat davon muss < als 30 sein.
 +Somit wissen wir am Anfang noch nicht wieviele Einträge da kommen - ergo muss laufend hochgezählt werden und der Ausgabearray vergrössert werden.
 +
 +==== PreIncrement ++i ====
 +
 +Ohne Incement-Funktion sieht meine Lösung so aus
 <code vb> <code vb>
 +Public Sub withoutPreIncrement()
 +    Dim i       As Integer
 +    Dim arr()   As Integer
 +    ​
 +    i = -1
 +    Do While (i + 1) ^ 2 < 30
 +        i = i + 1
 +        ReDim Preserve arr(i)
 +        arr(i) = i ^ 2
 +    Loop
 +
 +    print_r arr
 +End Sub
 +</​code>​
 +
 +Mit inc() oder preInc() vereinfacht sich das ganze
 +<code vb>
 +Public Sub withPreIncrement()
 +    Dim i       As Integer
 +    Dim arr()   As Integer
 +    ​
 +    i = -1
 +    Do While inc(i) ^ 2 < 30
 +        ReDim Preserve arr(i)
 +        arr(i) = i ^ 2
 +    Loop
 +
 +    print_r arr
 +End Sub
 +</​code>​
 +
 +==== PostIncrement i++ ====
 +Umsetzung ohne meine Funktion
 +<code vb>
 +Public Sub withoutPostIncrement()
 +    Dim i       As Integer
 +    Dim arr()   As Integer
 +    ​
 +    Do While (i) ^ 2 < 30
 +        ReDim Preserve arr(i)
 +        arr(i) = i ^ 2
 +        i = i + 1
 +    Loop
 +
 +    print_r arr
 +End Sub
 +</​code>​
 +
 +umsetzung mit postInc() oder inc(#,​itPostIncrement)
 +<code vb>
 +Public Sub withPostIncrement()
 +    Dim i       As Integer
 +    Dim arr()   As Integer
 +    ​
 +    Do While i ^ 2 < 30
 +        ReDim Preserve arr(i)
 +        'Die Formel wird zuerst ausgeführt. Dann erst kommt der Teil vor dem =
 +        'Darum ist postInc() vor dem =
 +        arr(postInc(i)) = i ^ 2
 +    Loop
 +
 +    print_r arr
 +End Sub
 +</​code>​
  
 +==== Resultat ====
 +Achja, alle Test haben natürlich dieselbe Ausgabe:
 +<​code><​Integer()> ​ (
 +    [0] => <​Integer>​ 0
 +    [1] => <​Integer>​ 1
 +    [2] => <​Integer>​ 4
 +    [3] => <​Integer>​ 9
 +    [4] => <​Integer>​ 16
 +    [5] => <​Integer>​ 25
 +)</​code>​
 ===== Code ===== ===== Code =====
 <source '​%%fpath%%/​%%fname%%'​ vb> <source '​%%fpath%%/​%%fname%%'​ vb>
  
vba/functions/increment.txt · Last modified: 11.01.2016 12:06:32 by yaslaw