BM VBA mit Excel
BM VBA mit Excel
BM VBA mit Excel
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Einführung<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
<strong>VBA</strong>-Programme helfen Ihnen…<br />
Vorbereitungen<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Die Programmiersprache <strong>VBA</strong> (Visual Basic for Applications) gewinnt zunehmend<br />
an Bedeutung, weil alle MSOfficeProgramme von <strong>VBA</strong> unterstützt<br />
werden. <strong>VBA</strong> ist aus der sehr viel mächtigeren Sprache VisuaIBasic<br />
(VB) abgeleitet worden, <strong>mit</strong> der eigenständige Programme <strong>mit</strong> grafischen<br />
Benutzeroberflächen entwickelt werden können. Bei den MS-Office-Programmen<br />
steht ein kleiner Kernbereich von VB zur Verfügung, der aber <strong>mit</strong><br />
applikationsspezifischen Funktionen ergänzt wurde. Bei <strong>Excel</strong> lassen sich die<br />
Daten in den Zellen oft viel einfacher und effizienter auswerten, wenn man<br />
sie <strong>mit</strong> <strong>VBA</strong>Programmen bzw. -Prozeduren verarbeiten kann.<br />
Bei dieser Einführung konzentrieren wir uns bewusst auf die Besonderheiten<br />
von <strong>VBA</strong> bei <strong>Excel</strong>-Anwendungen. Gleichzeitig setzen wir voraus, dass<br />
das Aufzeichnen einfacher Makros bereits bekannt ist.<br />
immer wiederkehrende Arbeiten automatisch zu erledigen neue Funktionen<br />
hinzuzufügen wenig geübten BenützerInnen eine Arbeitsumgebung zu geben,<br />
in der nur noch jene Menüs und Befehle vorhanden sind, die für die<br />
konkrete Arbeit gebraucht werden Anwendungen herzustellen, die den Benützer<br />
genauso durch eine Arbeitsfolge führen wie ein <strong>mit</strong> einer Programmiersprache<br />
erstelltes Programm andere Microsoft-Anwendungen zu starten<br />
und auszuführen<br />
Da <strong>VBA</strong> die Zellen nach der Z1S1-Bezugsart adressiert, wechseln Sie in<br />
diese Ansicht. Menü: Extras / Optionen / Register Allgemein<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 1
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das erste Programm, Übung 1<br />
Erklärungen zur Übung 1<br />
Aktivieren Sie die Symbolleiste für Visual Basic. Zur Eingabe des ersten<br />
Programms starten Sie den Visual Basic Editor:<br />
Nachdem Sie unter dem Menü: Einfügen / Modul gewählt haben, wird ein<br />
leeres Fenster für die Eingabe des Programm-Codes geöffnet.<br />
Tippen Sie die nachfolgenden Befehle ein:<br />
Eine Sub-Prozedur erstellen<br />
Sub-Prozeduren sind kleine Programmeinheiten, die eine bestimmte Aktion<br />
ausführen können. Da<strong>mit</strong> die vielen Prozeduren unterscheidbar bleiben,<br />
gibt man ihnen einen Namen.<br />
Prozedurnamen dürfen nur aus Buchstaben und Ziffern bestehen und dürfen<br />
keine Sonderzeichen und Zwischenräume enthalten. Einzig «Unterstriche»<br />
sind zulässig. Die Syntax 1 der Sub-Prozeduren werden wir später<br />
noch genauer anschauen. In der einfachsten Form schreiben wir nur gerade<br />
das Schlüsselwort Sub und einen Namen,<br />
Sub Summe ( )<br />
der nach Möglichkeit etwas über die programmierte Aktion aussagen soll.<br />
Dem Prozedurnamen müssen zwei Klammern folgen, die für die Übergabe<br />
von Argumenten gedacht sind. Sie müssen auch dann angefügt werden,<br />
wenn gar keine Argumente an die Prozedur übergeben werden.<br />
Variablen deklarieren<br />
In <strong>VBA</strong> ist es nicht unbedingt erforderlich, Variablen vorgängig zu deklarieren.<br />
Trotzdem ist es sinnvoll, alle verwendeten Variablen <strong>mit</strong> den entsprechenden<br />
Datentypen festzulegen. Variablen werden für das Speichern<br />
von Daten oder Zwischenergebnissen verwendet. Auch Variablen haben<br />
Namen, die nach Möglichkeit etwas über ihren Inhalt aussagen sollen.<br />
1 In der Grammatik die Lehre vom Aufbau eines Satzes. In der EDV die Regeln zur Formulierung eindeutiger Befehle<br />
in einer Programmiersprache.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 2
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Abschluss Übung 1<br />
Datentypen<br />
Der Datentyp präzisiert, für was die Variable verwendet werden soll. Also<br />
ob sie einen Text, eine Zahl, ein Datum oder ein Wahrheitswert aufnehmen<br />
wird. Bei numerischen Variablen können wir angeben, ob die Zahl sehr<br />
gross und genau oder lediglich klein und nur ganzzahlig sein darf.<br />
In unseren ersten Übungen haben wir es nur <strong>mit</strong> ganzzahligen Werten (Integer)<br />
zu tun.<br />
Zellen adressieren<br />
In <strong>VBA</strong> gibt es unterschiedliche Möglichkeiten für den Zugriff auf Zellen.<br />
Die einfachste ist<br />
Cells(Zeile, Spalte)<br />
In unserem Beispiel wird also der Wert in Zelle (4, 3) der Variablen summand1,<br />
der Wert in Zelle (5, 3) der Variablen summand2 zugewiesen. Die Inhalte<br />
der Variablen summand1 und summand2 werden addiert und das Ergebnis<br />
der Variablen resultat zugewiesen. Danach übergeben wir den Inhalt der<br />
Variablen resultat an die Zelle (7, 3).<br />
Das ist alles nicht sehr spektakulär, soll aber helfen, auch die nachfolgenden<br />
Prozeduren gut zu verstehen. Da<strong>mit</strong> die Prozedur ausgeführt werden kann,<br />
müssen wir sie noch einer Schaltfläche zuordnen.<br />
Beenden Sie nun den Editor und bereiten Sie das Tabellenblatt für die<br />
Kontrolle der Prozedur vor.<br />
Ereignisorientierte Programmierung<br />
Da<strong>mit</strong> die Sub-Prozedur Summe ( ) wirksam wird, müssen wir das entsprechende<br />
Makro ausführen lassen. Dazu öffnen wir die Liste der Makros:<br />
Menü: Extras / Makro / Makros…wählen das Makro Summe und klicken auf<br />
die Schaltfläche Ausführen.<br />
Dieses Vorgehen ist aber eher für das Austesten von Sub-Prozeduren gedacht.<br />
<strong>VBA</strong> ist eine ereignisorientierte Programmiersprache.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 3
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das heisst, dass die Sub-Prozeduren auf ein Ereignis warten; dass sie aktivieren<br />
soll. Im einfachsten Fall ist das ein Mausklick auf eine Schaltfläche.<br />
Später werden wir noch andere Möglichkeiten kennen lernen, wo das Ereignis<br />
von einem Kontrollfeld, von der Tastatur, von einer Maustaste, oder<br />
schon allein durch das Bewegen der Maus ausgelöst wird.<br />
Schaltfläche zuordnen<br />
Dazu aktivieren wir die Symbolleiste Formular:<br />
Menü: Ansicht / Symbolleisten / Formular<br />
Dort klicken wir auf das Symbol Schaltfläche. Danach zeichnen wir die Schaltfläche<br />
in unser Tabellenblatt. Mit gedrückter Alt-Taste wird die Schaltfläche<br />
in die Zellenstruktur eingebettet. Gleichzeitig wird das Verzeichnis der Makros<br />
eingeblendet. Dort aktivieren wir das Makro Summe. Schliesslich können<br />
wir den Text in der Schaltfläche beliebig anpassen.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 4
Zählerschleifen<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das zweite Programm, Übung 2<br />
Abschluss Übung 2<br />
Sollen in einer Anwendung eine oder mehrere Anweisungen mehrmals<br />
wiederholt werden, so werden so genannte Schleifen verwendet. Da dies<br />
natürlich häufig der Fall ist gehören Schleifen zu den wichtigsten Elementen<br />
jeder Programmiersprache. Bei <strong>VBA</strong> hat eine Zählerschleife die Form:<br />
For Zähler = Anfang To Ende [Step Schritt]<br />
Anweisungen<br />
Next Zähler<br />
Dabei bedeutet:<br />
Zähler Ist eine numerische Variable, die als Schleifenzähler dient.<br />
Anfang Der Startwert von Zähler.<br />
Ende Der Endwert von Zähler.<br />
Schritt Ist optional. Es ist ein Betrag, um den Zähler bei jedem Schleifendurchlauf<br />
verändert wird. Falls kein Wert angegeben wird, hat<br />
der Schritt immer den Wert 1.<br />
Wir kopieren den Programm-Code von Übung 1 und ändern ihn so ab, dass<br />
daraus ein Zähler entsteht. Der Wert in Zelle (4, 3) wird zum Anfangswert<br />
der Variablen anfang, der Wert in Zelle (5, 3) zum Endwert in Variable ende. In<br />
der For...Next-Schleife werden nun der Variablen count alle Werte von anfang<br />
bis ende zugewiesen und in der Zelle (7, 3) angezeigt. Je nach Leistungsfähigkeit<br />
Ihres Computers dauert dieser Zählvorgang mehr oder weniger lang.<br />
Tippen Sie die nachfolgenden Befehle ein:<br />
Beenden Sie nun den Editor und bereiten Sie das Tabellenblatt für die<br />
Kontrolle der Prozedur vor.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 5
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Vielleicht haben Sie Lust; <strong>mit</strong> dieser noch sehr einfachen Sub-Prozedur zu<br />
experimentieren? Zum Beispiel könnten Sie einen «Abwärtszähler» konstruieren,<br />
der vom Endwert zum Anfangswert zurückzählt. Das wird in einer<br />
For...Next-Schleife <strong>mit</strong> dem Schritt Step –1 realisiert.<br />
Beispiel für Abwärtszähler:<br />
Tabellenblatt für die Kontrolle der Prozedur:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 6
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das dritte Programm, Übung 3<br />
Erklärungen zur Übung 3<br />
Indexierung der Zellenadressen<br />
In einem nächsten Schritt wollen wir auf einer Tabellen-Zeile eine Nummerierung<br />
vornehmen. Also in:<br />
Cells(11, 6) = 0<br />
Cells(11, 7) = 1<br />
Cells(11, 8) = 2<br />
Cells(11, 9) = 3<br />
Cells(11, 10) = 4<br />
Cells(11, 11) = 5<br />
Cells(11, 12) = 6<br />
Cells(11, 13) = 7<br />
Cells(11, 14) = 8<br />
Cells(11, 15) = 9<br />
Diese Adressierungsart nennt man auch Indexierung, weil die Zeilen-Nummern<br />
und Spalten-Nummern wie Indizes verwendet werden. Statt nun<br />
zehnmal die fast gleiche Anweisung zu schreiben, nutzen wir die Vorteile<br />
der For...Next-Schleife. Die Zahlenreihe geht ja hier von 0 bis 9:<br />
For spalte = 0 To 9<br />
Und da die Spalten-Adresse immer gerade um 6 höher ist als der Wert der<br />
Variablen Spalte ergibt sich:<br />
For spalte = 0 To 9<br />
Cells(11, 6 + spalte) = spalte<br />
Next spalte<br />
Sie können diesen Programm-Code einfach hinzufügen und im Tabellenblatt<br />
<strong>mit</strong> einer Schaltfläche verknüpfen.<br />
Bei der Beschriftung der Spalte 5 gelten natürlich die gleichen Überlegungen,<br />
nur das hier der Spalten Index konstant bleibt und der Zeilen-Index<br />
verändert wird:<br />
Cells(12, 5) = 0<br />
Cells(13, 5) = 1<br />
Cells(14, 5) = 2<br />
Cells(15, 5) = 3<br />
Cells(16; 5) = 4<br />
Cells(17, 5) = 5<br />
Cells(18, 5) = 6<br />
Cells(19, 5) = 7<br />
Cells(20, 5) = 8<br />
Cells(21, 5) = 9<br />
Und die entsprechende For...Next-Schleife:<br />
For zeile = 0 To 9<br />
Cells(12 + zeile, 5) = zeile<br />
Next zeile<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 7
Auftrag<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Hier der Programm-Code für die Prozeduren:<br />
Tabelleblatt für die Kontrolle der Prozeduren:<br />
Ändern Sie die Prozedur Zeilenbeschriftung so ab, dass die jeweils ausgewählte<br />
Zelle <strong>mit</strong> einer Farbe eingefärbt wird.<br />
Tipp: Zeichnen Sie <strong>mit</strong> dem Makrorecorder ein entsprechendes Makro auf.<br />
Danach fügen Sie die Befehle in die Prozedur Zeilenbeschriftung ein!<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 8
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das vierte Programm, Übung 4<br />
Erklärungen zur Übung 4<br />
Verschachtelte Schleifen<br />
Liegen die zu verarbeitenden oder zu erzeugenden Daten in Tabellenform<br />
vor, so kann der Zugriff <strong>mit</strong> verschachtelten For...Next-Schleifen erfolgen.<br />
Ähnlich wie bei Matrix-Operationen in der Mathematik bekommt jede Zelle<br />
einen Zeilen- und einen Spalten-Index. Und beide Indexierungen werden<br />
<strong>mit</strong> Hilfe einer Schleifen-Variablen vorgenommen.<br />
Hier der Programm-Code für die Übung 4:<br />
Tabellenblatt <strong>mit</strong> Ergebnis für die Übung 4:<br />
In unserem Beispiel erzeugt die äussere Schleife den Zeilen-Index zeile, die<br />
innere Schleife den Spalten-Index spalte. Bei der Programmausführung bekommt<br />
die Variable zeile vorerst einmal der Wert 0. Dann werden in der inneren<br />
Schleife der Variablen spalte alle Werte von 0 bis 9 zugewiesen. Danach<br />
wird die innere Schleife wieder verlassen und zeile in der äusseren<br />
Schleife um 1 erhöht. Dieser Vorgang wiederholt sich, bis auch die Variable<br />
zeile alle Werte von 0 bis 9 angenommen hat.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 9
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Datenbereich löschen<br />
Im Gegensatz zu den Sub-Prozeduren Zeilenbeschriftung ( ) und Spaltenbeschriftung<br />
( ), wo jeweils ein Index konstant blieb und nur der andere<br />
verändert wurde, sind hier nun beide Indizes veränderbar:<br />
Cells(10 + zeile, 6 + spalte) = inhalt<br />
Die konstanten Werte 12 und 6 bedeuten hier nur, dass der erste Wert der<br />
Tabelle in Zeile 12 und Spalte 6 zu liegen kommt. Verändern Sie diese Werte,<br />
so verschiebt sich die Tabelle im Tabellenblatt.<br />
Die Inhalte der Tabelle werden <strong>mit</strong> der Anweisung:<br />
inhalt = 10 * zeile + spalte<br />
erzeugt, was aber nur bedeutet, dass der Zeilen-Index für die Zehner, der<br />
Spalten-Index für die Einerstellen verantwortlich sind.<br />
Um die Funktionsweise der Sub-Prozeduren überprüfen zu können ist es<br />
hilfreich, die Inhalte der betroffenen Zellen wieder «löschen» zu können.<br />
Dazu lassen wir einfach ein entsprechendes Makro aufzeichnen und <strong>mit</strong> einer<br />
Schaltfläche verbinden.<br />
Hier der Programm-Code der Prozedur Löschen:<br />
Tabellenblatt inklusive Formular Löschen:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 10
Aufgabe 1<br />
Aufgabe 2<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Erstellen Sie eine Multiplikationstabelle, in welcher das Produkt aus Zeilen-<br />
und Spaltennummer angezeigt wird.<br />
Hier die Lösung von Aufgabe 1:<br />
Erstellen Sie eine Anwendung, bei welcher die Zelleninhalte in genau umgekehrter<br />
Reihenfolge (von 99 nach 0) eingetragen werden.<br />
Hier die Lösung von Aufgabe 2:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 11
Aufgabe 3<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Erstellen Sie eine Anwendung, bei welcher ein Startwert bestimmt, <strong>mit</strong> welchem<br />
Wert die Zahlentabelle beginnen soll.<br />
Hier die Lösung von Aufgabe 3.<br />
Als Startwert wird der Inhalt der Zelle (4, 3) übernommen:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 12
Verzweigungen<br />
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das fünfte Programm, Übung 5<br />
Erklärungen zur Übung 5<br />
Zu den wohl wichtigsten Programmbefehlen gehören die Verzweigungen,<br />
die sogenannten<br />
Wenn … Dann … Sonst – Anweisungen<br />
Hierbei werden reine Vergleichs-Prüfungen durchgeführt und je nach Ergebnis<br />
die eine oder die andere Massnahme getroffen.<br />
Wenn die Raumtemperatur tiefer als 18°C ist, dann soll die Heizung eingeschaltet<br />
werden, sonst nicht.<br />
Bei unserem Beispiel geht es um die Untersuchung der Teilbarkeit von<br />
Zahlen. Als Teiler kommen ja alle Zahlen von 2 bis zur Zahl selber in Frage.<br />
Die Vergleichsprüfung erfolgt <strong>mit</strong> der Modulo-Funktion, die aus der<br />
Mathematik bekannt ist: zahl Mod teiler<br />
Hier der Programm-Code der Prozedur Teilbarkeit:<br />
Tabellenblatt für die Kontrolle der Prozedur (Teiler von 800):<br />
Die Modulo-Funktion (Mod) gibt bekanntlich den Rest einer Division zurück.<br />
Ist dieser Rest Null, so haben wir einen echten Teiler gefunden.<br />
If zahl Mod teiler = 0 Then<br />
Trifft also diese Wahrheitsprüfung zu, so haben wir einen Teiler gefunden,<br />
den wir auf Spalte spalte in die Liste eintragen und anzeigen wollen.<br />
Mit der Anweisung<br />
spalte = spalte + 1<br />
stellen wir gleichzeitig sicher, dass der Spalten-Index um 1 erhöht wird.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 13
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Der Ausdruck spalte = spalte + 1 ist nicht als mathematische Gleichung zu<br />
verstehen. In der Programmiersprache bedeutet dies nämlich, dass der Wert<br />
der Variablen spalte ersetzt wird durch einen Wert, der um 1 höher ist.<br />
Oft werden Programme auch <strong>mit</strong> so genannten Flussdiagrammen beschrieben.<br />
Die nachfolgende Skizze zeigt, wie so eine Programmverzweigung dargestellt<br />
wird.<br />
Flussdiagramm einer Programmverzweigung:<br />
zahl Mod teiler = 0<br />
Werden bei einer Programm-Verzweigung mehrere Anweisungen durchgeführt,<br />
müssen diese <strong>mit</strong> End If abgeschlossen werden.<br />
If Bedingung Then<br />
Anweisung 1<br />
Anweisung 2<br />
…<br />
End If<br />
ja<br />
nein teiler anzeigen<br />
spalte = spalte + 1<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 14
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Das sechste Programm, Übung 6<br />
Erklärungen zur Übung 6<br />
Teilbarkeit erweitert<br />
Statt die Teilbarkeit nur gerade für eine Zahl zu untersuchen können wir<br />
auch leicht einen ganzen Zahlenbereich angeben. Der Startwert und der<br />
Endwert des Zahlenbereiches werden aus der Tabelle ausgelesen. Danach<br />
wird die Teilbarkeit für diesen Zahlenbereich ausgerechnet. Dazu brauchen<br />
wir eine zusätzliche For...Next-Schleife.<br />
Hier der Programm-Code der Prozedur TeilbarkeitErweitert:<br />
Tabellenblatt für die Kontrolle der Prozedur:<br />
Die innere Schleife ist der gleiche Schleifenkörper, den wir schon im vorangehenden<br />
Beispiel verwendet haben. In der äusseren Schleife wird die Zahl<br />
vom Startwert bis zum Endwert angepasst. Auch der Zeilen-Index muss<br />
nach jeder «neuen» Zahl um eine Einheit erhöht werden und der Spalten-<br />
Index muss immer wieder auf die Spalte 6 zurückgesetzt werden.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 15
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Option für Fortgeschrittene<br />
Mit der Schleife:<br />
For n = 0 To (Cells(6, 3) – Cells(5, 3))<br />
richten wir den äusseren Zähler ein. Die Anzahl Schleifendurchgänge wird<br />
aus der Differenz von Endwert – Startwert berechnet. Die eigentlichen Zahlen,<br />
die auf ihre Teilbarkeit untersucht werden, ergeben sich dann jeweils<br />
aus dem Startwert in der Zelle (5, 3) und der Variablen n:<br />
zahl = Cells(5, 3) + n<br />
Auch der Zeilen-Index zeile läst sich aus n ableiten:<br />
zeile = n + 5<br />
Da<strong>mit</strong> können wir die gerade zu untersuchende Zahl in der richtigen Zelle<br />
anzeigen:<br />
Cells(zeile, spalte – 1) = zahl<br />
Schliesslich legen wir noch fest, dass bei jeder neuen Zahl der Spalten-<br />
Index auf 6 zurückgesetzt werden muss.<br />
spalte = 6<br />
Was danach folgt kennen Sie bereits. Es ist der gleiche Schleifenkörper, den<br />
wir schon im vorangehenden Beispiel verwendet haben.<br />
Versuchen Sie die Prozedur so abzuändern, das die zu untersuchende Zahl<br />
rot herausgeschrieben wird.<br />
Kopieren Sie die Prozedur und ändern Sie diese so ab, dass nur noch Primzahlen<br />
innerhalb des Zahlenbereiches angezeigt werden.<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 16
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Do While-Schleife<br />
Neben der For...Next-Schleife gibt es in praktisch allen Programmiersprachen<br />
noch weitere Schleifen-Anweisungen. Eine sehr praktische ist die Do<br />
While-Schleife, bei der Anweisungen solange ausgeführt werden solange eine<br />
Bedingung erfüllt ist.<br />
Im nachfolgenden Beispiel sollen Zahlen in ihre Faktoren zerlegt werden.<br />
Im Gegensatz zur Prüfung der Teilbarkeit, wo jeder Teiler nur einmal vorkommen<br />
kann, müssen wir bei der Zerlegung in Faktoren berücksichtigen,<br />
dass mehrere gleiche Faktoren vorkommen können.<br />
Ein Beispiel möge dies verdeutlichen. Wir zerlegen die Zahl 1’000 in Faktoren:<br />
1'000 : 2 = 500<br />
500 : 2 = 250<br />
250 : 2 = 125<br />
125 : 5 = 25<br />
25 : 5 = 5<br />
5 : 5 = 1<br />
Also lauten die Faktoren der Zahl 1’000 = 2 2 2 5 5 5<br />
Da die zu untersuchende Zahl verändert wird, verwenden wir eine Hilfsvariable<br />
temp. Dann prüfen wir jeden möglichen Teiler, ob er als Faktor in<br />
Frage kommt. Solange die Division temp : teiler keinen Rest ergibt, ist der<br />
Teiler ein Faktor:<br />
Do While temp Mod teiler = 0<br />
Danach müssen wir aber den Wert der Variablen temp jeweils reduzieren,<br />
wie das im vorangehenden Beispiel ja sichtbar wurde.<br />
Hier der Programm-Code der Prozedur Faktorzerlegung:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 17
Einführung <strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong><br />
Tabellenblatt für die Kontrolle der Prozedur:<br />
<strong>VBA</strong> <strong>mit</strong> <strong>Excel</strong>.doc 18