17.10.2013 Aufrufe

BM VBA mit Excel

BM VBA mit Excel

BM VBA mit Excel

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!