Beruflich Dokumente
Kultur Dokumente
Excel + VBA
für Controller
Mit eigenen Prozeduren
und Funktionen optimieren
Excel + VBA für Controller
Harald Nahrstedt
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detail-
lierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Springer Vieweg
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht
ausdrücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags.
Das gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfilmungen und die
Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von allgemein beschreibenden Bezeichnungen, Marken, Unternehmensnamen etc. in diesem
Werk bedeutet nicht, dass diese frei durch jedermann benutzt werden dürfen. Die Berechtigung zur Benutzung
unterliegt, auch ohne gesonderten Hinweis hierzu, den Regeln des Markenrechts. Die Rechte des jeweiligen
Zeicheninhabers sind zu beachten.
Der Verlag, die Autoren und die Herausgeber gehen davon aus, dass die Angaben und Informationen in
diesem Werk zum Zeitpunkt der Veröffentlichung vollständig und korrekt sind. Weder der Verlag, noch
die Autoren oder die Herausgeber übernehmen, ausdrücklich oder implizit, Gewähr für den Inhalt des
Werkes, etwaige Fehler oder Äußerungen. Der Verlag bleibt im Hinblick auf geografische Zuordnungen und
Gebietsbezeichnungen in veröffentlichten Karten und Institutionsadressen neutral.
Springer Vieweg ist ein Imprint der eingetragenen Gesellschaft Springer Fachmedien Wiesbaden GmbH und ist
ein Teil von Springer Nature
Die Anschrift der Gesellschaft ist: Abraham-Lincoln-Str. 46, 65189 Wiesbaden, Germany
V
Vorwort
Inhaltsverzeichnis
Anhang
Literaturverzeichnis ................................................................................................................ 437
Diagrammverzeichnis ............................................................................................................. 439
Funktionenverzeichnis ............................................................................................................ 441
Index ....................................................................................................................................... 443
1
1 Einführung in VBA
VBA wurde ursprünglich entwickelt, um Anwendungen (Applications) unter Office
anzupassen. Und darin liegt die Einschränkung. Im Gegensatz zu Visual Basic, lässt sich
Visual Basic for Application nur in einer solchen Anwendung nutzen. Doch VBA ist noch viel
mehr als nur eine einfache Programmiersprache. Alle Office-Applikationen besitzen eine
VBA-Entwicklungsumgebung (Integrated Development Environment, kurz IDE), die eine
objektorientierte Programmierung ermöglicht (Bild 1-1). Sie enthält verschiedene Fenster, die
neben der Eingabe und Verwaltung auch das Testen und Optimieren von VBA-Code erlauben.
Bild 1-1
Anwendungen
und IDE
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_1
2 1 Einführung in VBA
und verwaltet wird. Es kann in der IDE über die Registerkarte Ansicht mit der Auswahl Code
aufgerufen werden. Standardmäßig ist das Fenster aber bereits vorgegeben.
Beginnen wir mit ein paar Grundeinstellungen. Die IDE besitzt die Registerkarte Extras und
darunter die Auswahl Optionen. Ein Dialogfenster mit vier Registerkarten (Bild 1-3) öffnet
sich.
Bild 1-3
Optionen zur IDE
Viele Optionen sind schon bei der Installation richtig eingestellt. Nur ein paar Einstellungen
sollten wir ändern. Sie werden sich uns erst im Laufe dieses Buches erschließen.
1.1 Die VBA Entwicklungsumgebung 3
Diese Anweisung steht in allen Codecontainern immer als erste Anweisung und wird
daher in den folgenden Codelisten nicht mit aufgeführt.
Unter Register Editorformat:
Die Schriftart für die Codedarstellung sollte Courier New mit der Schriftgröße 10 sein,
weil bei dieser Schriftart alle Zeichen die gleiche Breite besitzen und somit in mehreren
Zeilen direkt untereinanderstehen. Wichtig ist in erster Linie eine deutliche Lesbarkeit des
Programmcodes.
Unter Register Allgemein:
Rastereinheit für Breite und Höhe auf 2 Punkte einstellen.
Unter Register Verankern:
Alle Fenster, außer Objektkatalog, sind als verankerbar ausgewählt. Hauptsächlich
benötigen wir zur Entwicklung und Ausführung neben dem Editor noch den Projekt-
Explorer und das Eigenschaftsfenster. Mit einem Doppelklick auf ein Objekt im Projekt-
Explorer öffnet sich das zugehörige Code-Fenster automatisch. Lediglich die Formulare
(UserForms) machen da eine Ausnahme. Sie besitzen eine eigene Oberfläche und es kann
zwischen Code-Ansicht und Objekt-Ansicht umgeschaltet werden.
Alle Einstellungen unter Optionen gelten so lange, bis sie erneut geändert werden.
Bild 1-4
Der Projekt-Explorer
in der IDE
4 1 Einführung in VBA
Jedes Projekt besitzt einen Namen, der beim Neustart einer Excel-Anwendung immer
VBAProjekt lautet. Jedes Projekt sollte aber einen eigenen aussagekräftigen Namen
bekommen, in dem keine Sonderzeichen und Leerzeichen vorkommen. Ziffern sind nur
innerhalb des Namens erlaubt. Dazu mehr unter Eigenschaftsfenster.
Wichtig ist noch, dass in der Menüleiste des Projekt-Explorers zwei Schaltflächen von großer
Bedeutung liegen (Bild 1-4 roter Rahmen). Mit diesen Schaltflächen wird die Darstellung des
aktiven Objekts bestimmt, also, ob in der Entwicklungsumgebung das im Projekt-Explorer
markierte Objekt (hier die Tabelle1) als Ansicht oder die dazugehörigen Prozeduren als
Programmcode dargestellt werden.
Bild 1-5
Der Objekt-Katalog in
der Entwicklungs-
umgebung
einer Liste aller vorhandenen Objekte ausgewählt werden. Darunter stehen die Eigenschaften,
die das ausgewählte Objekt besitzt.
Bild 1-6
Das Eigenschaftsfenster
im Visual Basic-Editor
Diese lassen sich zur Entwurfszeit durch Anklicken bzw. durch Doppelklick ändern. Werden
mehrere Objekte gleichzeitig ausgewählt, dann enthält das Eigenschaftsfenster eine Liste nur
der Eigenschaften, die die ausgewählten Objekte gemeinsam besitzen. So müssen mehrere
Objekte nicht einzeln geändert werden. Ein Projekt besitz als Eigenschaft nur einen Namen,
der im Eigenschaftsfenster geändert werden kann.
oder
Objekt[.Unterobjekt ... ][.Eigenschaft]
Eckige Klammern in dieser Schreibweise bedeuten, das Element kann dort stehen, muss es
aber nicht. Soll z. B. ein Textfeld TextBox1 auf dem Formular UserForm1 den Text „Dies ist
ein Test!“ zugewiesen bekommen (Erläuterung kommt später), dann lautet die Anweisung:
UserForm1.TextBox1.Text = "Dies ist ein Test!"
Ein fester Text wird durch obere Anführungszeichen gekennzeichnet. Soll der Text nicht
angezeigt werden, dann kann die Eigenschaft Visible des Textfeldes auf den Wert False
gesetzt werden.
UserForm1.TextBox1.Visible = False
Ereignissen von Objekten sind in der Regel Ereignis-Prozeduren zugeordnet. Zum Beispiel ein
Klick mit der linken Maustaste auf die Befehlsschaltfläche mit dem Namen cmdStart eines
Formulars im Entwurfsmodus, zeigt im Codefenster des Formulars die Prozedur:
Private Sub cmdStart_Click()
End Sub
Der Name einer Ereignis-Prozedur besteht immer aus den Namen von Objekt und Ereignis,
verbunden durch einen Tiefstrich. In eine Ereignis-Prozedur schreiben wir dann alle
Anweisungen die ausgeführt werden sollen, wenn das Ereignis eintritt.
Geschieht die obere Textzuweisung im Codefenster des Formular UserForm1, auf der sich
auch das Textfeld TextBox1 befindet, dann genügt es zu schreiben:
TextBox1.Text = "Dies ist ein Test!"
Es muss also nicht immer die gesamte Objekthierarchie genannt werden, wenn das Objekt
eindeutig bestimmt ist. Ebenso gibt es gewisse Grundeinstellungen (Default-Werte), die wir in
der Aufzählung von Objekt und Eigenschaft nicht nennen müssen. Bei einem Textfeld ist der
Default-Wert Text und so genügt es zu schreiben:
TextBox1 = "Dies ist ein Test!"
Objekte in VBA sind Dokumente, Tabellen, Präsentationen, Datenbanken etc. Aber auch
Fenster, Module, Steuerelemente, Statusleisten, Menüelemente, usw. Grundsätzlich muss
zwischen Objektlisten und den Objekten selbst unterschieden werden. Objekte (Workbook,
1.2 Objekte, Anwendungen, Formulare und Module 7
Worksheet, etc.) in Objektlisten (Workbooks, Worksheets, etc.) werden über ihren Namen
oder einen Index angesprochen.
Einige wichtige Objektlisten in Office-Anwendungen sind:
Documents enthält alle Word-Dokumente einer Word-Anwendung
Workbooks enthält geöffneten Excel-Arbeitsmappen
Worksheets enthält alle Tabellen einer Excel-Anwendung
Windows enthält alle aktiven Fenster
Um ein Objekt in einer solchen Objektliste anzusprechen, wird ein Index oder Name
angegeben. So liefert die Anweisung
MsgBox ThisWorkbook.Worksheets(2).Name
den Namen des zweiten Arbeitsblattes (eine Eigenschaft des Objekts Worksheet) in der
aktuellen Excel-Arbeitsmappe. Die Ausgabe erfolgt mit der Funktion MsgBox. Sie zeigt den
Namen in einem Dialogfeld und wartet auf eine Bestätigung.
Der Zugriff auf ein nicht vorhandenes Objekt erzeugt den Laufzeitfehler 1004.
Aus diesen Listen ergeben sich dann je nach Anwendung die Objekte:
Application aktives Objekt
FileSearch Objekt zum Suchen nach Dateien
Assistant Objekt des Office Assistenten
Document Word-Dokument
Workbook Excel-Arbeitsmappe
Presentation Objektklasse PowerPoint
MsgBox Meldefenster
InputBox Anzeige eines Eingabedialogs
Objekten können wir im Eigenschaftsfenster unter Namen einen anderen Namen zuordnen.
Dabei geben wir dem Objektnamen ein Präfix, mit der wir die Objektart kennzeichnen. Dies
ist nicht zwingend einzuhalten, dient aber der Übersichtlichkeit im Programmcode. Ein einmal
festgelegtes Präfix sollte dann nicht mehr geändert werden.
Beispiele, die ich verwende:
tbl Tabelle (sheet)
frm Form (user form)
mod Modul (modul)
com Befehlsschaltfäche (command)
wbk Excel-Arbeitsmappe (workbook)
wsh Excel-Arbeitsblatt (worksheet)
Ein schneller Zugang zu Eigenschaften und Methoden eines Objekts ist durch das
Kontextmenü möglich. Dabei wird das Objekt mit einem Klick der linken Maustaste markiert.
Mit einem Klick auf die rechte Maustaste öffnet sich ein Dialogfenster, das sogenannte
Kontextmenü. Darin werden die wichtigsten Methoden und Eigenschaften des markierten
Objekts zur Auswahl angezeigt. Das Kontextmenü existiert auch in der Anwendung.
8 1 Einführung in VBA
Wird z. B. eine Zelle in einer Excel-Tabelle markiert, dann zeigt das Kontextmenü die
wichtigsten Eigenschaften und Methoden zu diesem Objekt.
Das Makro funktioniert auch mit anderen Zellen. Wir wählen eine andere Zelle aus, tragen
dort einen Durchmesser ein und bestätigen die Eingabe mit der Eingabetaste. Nach einem
erneuten Aufruf des Makros Kreis erscheint das Ergebnis in der markierten Zelle darunter.
Wenn wir jetzt den VBA-Editor öffnen, befindet sich im Projekt-Explorer ein neues Objekt
Modul1. Dieses wurde durch den Makro-Recorder erzeugt. Ein Doppelklick auf Modul1 im
Projekt-Explorer zeigt den Inhalt des Moduls im Codefenster mit etwa folgendem Inhalt:
Option Explicit
Sub Kreis()
'
' Kreis Makro
'
Range("B5").Select
ActiveCell.FormulaR1C1 = "=R[-1]C*R[-1]C*3.1415926/4"
Range("B6").Select
End Sub
Zeilen, die mit einem Hochkomma beginnen, sind als reine Kommentarzeilen zu betrachten
und grün dargestellt. Die Prozedur selbst beinhaltet drei Anweisungen:
Die erste Anweisung aktiviert die Zelle B5.
Die zweite Anweisung bezieht sich auf die aktive Zelle (ActiveCell) (in unserem Fall B5)
und weist ihrer Eigenschaft (FormulaR1C1) eine Formel zu. Diese bezieht den Wert aus
der Zeile (Row) davor (R[-1]) und der gleichen Spalte (Column) C. Diese Art der
Adressierung bezeichnet man als indirekt. Man gibt also keine absolute Adresse (B4) an,
sondern sagt: Die aktuelle Zelle – 1 Zeile. Der Vorteil liegt klar auf der Hand. Unser
Makro lässt sich auf jede beliebige aktive Zelle anwenden, wie zuvor schon ausprobiert
wurde. Der Wert (aus der vorherigen Zelle) wird mit sich selbst multipliziert und mit der
Kreiskonstanten π multipliziert und dann durch 4 dividiert.
Das Ergebnis wird in der aktuellen Zelle B5 abgelegt. Danach wird die Zelle B6
angesprochen.
Die Anweisungen Range("B5").Select und Range("B6").Select sind überflüssig und
können entfernt werden. Ebenso die Leerzeilen und die Kommentarzeilen.
Option Explicit
Wir benötigen für diese Prozedur nicht grundsätzlich das Modul1 und können sie auch direkt
in das Codefenster der ausgewählten Tabelle1 kopieren:
Dazu markieren wir die gesamte Prozedur in Modul1 (ohne Option Explicit) und wählen
mit der rechten Maustaste das Kontextmenü und darin den Befehl Ausschneiden.
Danach führen wir einen Doppelklick im Projekt-Explorer auf das Objekt Tabelle1 aus.
Dadurch öffnet sich das Codefenster des Objekts Tabelle1.
Wir klicken auf dieses Fenster und rufen wir mit der rechten Maustaste erneut das
Kontextmenü auf. Dort wählen wir Einfügen.
10 1 Einführung in VBA
Schalten wir nun in der Schalfläche des Projekt-Explorers auf Ansicht (Bild 1-4 roter
Rahmen), so sehen wir wieder die Tabelle1.
Wenn wir mit der Registerkarte Entwicklungstools unter Code die Auswahl Makros (oder
ALT + F8) aufrufen, finden wir in der Übersichtsliste den Eintrag Tabelle1.Kreis. Dem
Prozedurnamen wird also das entsprechende Objekt vorangestellt. Beide Namen werden
durch einen Punkt getrennt, ganz im Sinne der Objektschreibweise (siehe Kapitel 1.2.1).
Nun ist dies eine Übung und wir benötigen das Modul1 nicht wirklich. Mit einem Klick der
rechten Maustaste auf dieses Objekt im Projekt-Fenster öffnet sich ein Kontextmenü und wir
können Entfernen von Modul1 wählen. Die Frage nach einer Speicherung verneinen wir.
Vielleicht probieren Sie noch andere einfache Makros aus, um ein Gefühl für die
Wirkungsweise zu bekommen. Wählen Sie dazu andere Volumenformeln oder ähnliche
Berechnungen.
Die Makro-Funktion kann bei der Entwicklung sehr hilfreich sein. Wenn z. B. ein Diagramm
per Prozedur erstellt werden soll, kann zuerst ein Makro aufgezeichnet werden. Der so
erhaltene Quellcode wird dann den eigenen Bedürfnissen anpasst.
Bild 1-7
Steuerelemente-
Toolbox
Wird der Mauszeiger auf ein solches Element positioniert, dann erscheint ein Hilfstext mit
Hinweisen zu diesem Steuerelement. Soll ein Steuerelement auf dem Arbeitsblatt angeordnet
werden, dann sind folgende Schritte erforderlich:
Ein Klick mit der linken Maustaste auf ein Steuerelement schaltet den Entwurfsmodus
(grauer Hintergrund im Menüband) ein.
Der Mauszeiger wandelt sich zu einem Fadenkreuz.
1.2 Objekte, Anwendungen, Formulare und Module 11
Das Fadenkreuz an die Stelle auf dem Arbeitsblatt setzen, wo sich die linke obere Ecke
des Steuerelements befinden soll.
Die linke Maustaste gedrückt halten und das Fadenkreuz nach rechts unten ziehen, bis die
Größe des Steuerelements erreicht ist.
Entwurfsmodus im Menüband durch Anklicken ausschalten.
Übung 1.3 Prozedur mit einer Schaltfläche starten
XCT-01-01_Kreisberechnung.xlsm
End Sub
Die Angabe Call kann eigentlich entfallen, weil das System den Namen Kreis kennt. Ich
trage aber der Übersichtlichkeit wegen in allen Prozeduren die Anweisung Call mit ein.
Damit die Schaltfläche aktiv ist, wird der Entwurfsmodus ausgeschaltet.
Durch Eingabe eines Wertes in eine beliebige Zelle, den Druck auf Eingabetaste und
Befehlsschaltfläche Start, wird die Prozedur Kreis ausgeführt und in der aktuellen Zelle steht
das Ergebnis. Möglich ist dies durch die Verwendung der indirekten Adressierung.
Probieren Sie auch andere Steuerelemente aus, wie z. B. die TextBox.
12 1 Einführung in VBA
Bild 1-9
Ein Formular und die
Werkzeugsammlung
Bild 1-10
Formular
Kreisflächenberechnung
Für alle Objekte auf dem Formular (einzeln oder gemeinsam markiert mit STRG halten
und anklicken) wird in der Eigenschaft Font die Schriftgröße auf 10 abgeändert.
Mit einem Doppelklick auf die jeweilige Befehlsschaltfläche schaltet die
Entwicklungsumgebung automatisch auf die Codedarstellung um, die mit der Schaltfläche
Schließen (X) wieder verlassen werden kann.
Das Codefenster zeigt die (noch leeren) Prozeduren cmdBerechnung_Click bzw. darunter
cmdEnde_Click. Diese Prozeduren erhalten die nachfolgend dargestellten Anweisungen.
Dabei ist darauf zu achten, dass ein Dezimalpunkt Vor- und Nachkommastellen trennt
und nicht ein Komma.
Private Sub cmdBerechnung_Click()
Dim dD As Double
Dim dA As Double
dD = Val(tbxDurchmesser)
dA = dD * dD * 3.1415926 / 4
tbxFläche = Str(dA)
14 1 Einführung in VBA
tbxDurchmesser.SetFocus
End Sub
Mit dieser Anweisung wird das Formular in den Arbeitsspeicher geladen und existiert
somit. Zu sehen ist es für den Anwender noch nicht, doch es kann bereits mit den
Steuerelementen auf dem Formular gearbeitet werden. Das geladene Formular wird durch
die Methode Show sichtbar. Zum Entfernen wird die Methode Unload verwendet, wie in
der Ereignisprozedur cmdEnde_Click. Da sich diese Prozedur im Formular befindet, kann
statt des längeren Formularnamens auch die Kurzform Me verwendet werden.
(Formularname).Show
Ist der Name der Befehlsschaltfläche in der Tabelle z. B. cmdStart und der Name des
Formulars frmKreis, dann sollte die Prozedur zum Aufruf des Formulars im Codefenster
der Tabelle wie folgt aussehen:
Private Sub cmdStart_Click()
Load frmKreis
frmKreis.Show
End Sub
Welche Ereignisse ein Objekt in Ihrem Projekt kennt, können Sie ebenfalls im Codefenster
zum Formular erfahren. Im Kopf des Codefensters gibt es zwei Auswahlfelder (Bild 1-11).
1.2 Objekte, Anwendungen, Formulare und Module 15
Im linken Feld gibt es eine Auswahlliste der vorhandenen Objekte. Wählen Sie hier
txtDurchmesser mit einem Klick. Im rechten Feld gibt es eine Auswahlliste aller möglichen
Ereignisse zu dem ausgewählten Objekt. Wählen Sie hier Change. Im Codefenster erscheint
eine neue Prozedur txtDurchmesser_Change. Diese Prozedur wird immer aufgerufen, wenn
sich der Inhalt im Feld txtDurchmesser ändert. Wenn Sie in dieser Prozedur ebenfalls den
Aufruf der Berechnungsprozedur platzieren, wird nach jeder Änderung im Eingabefeld die
Berechnung aufgerufen.
Damit wird die Schaltfläche Berechnung auf dem Arbeitsblatt überflüssig.
Private Sub tbxDurchmesser_Change()
Call cmdBerechnung_Click
End Sub
Störend ist nur, dass mit jeder eingegeben Ziffer der Aufruf erfolgt. Hier hilft eine andere
Ereignisprozedur weiter, mit dem Namen txtDurchmesser_KeyDown. Ist die Zeile einer
Anweisung zu lang für das Codefenster, so kann mit einem Leerzeichen (wichtig!) und einem
nachfolgenden Tiefstrich ( _ ) in der nächsten Zeile weitergeschrieben werden, auch über
mehrere Zeilen.
Private Sub tbxDurchmesser_KeyDown _
(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Then
Call cmdBerechnung_Click
End If
End Sub
Die Ereignisprozedur liefert als Parameter den Tastencode im ASCII-Format in der Variablen
KeyCode. Durch eine Abfrage erfolgt der Aufruf nur, wenn KeyCode den Wert 13 für die
Eingabetaste enthält.
16 1 Einführung in VBA
Hier tritt eine andere unangenehme Erscheinung auf, denn durch den Druck auf die
Eingabetaste wird der Focus auf ein nachfolgendes Objekt gesetzt und bleibt somit nicht bei
dem Eingabefeld. Die Reihenfolge der Objekte zur Focus-Vergabe wird unter der Eigenschaft
TabIndex beginnend bei null aufsteigend festgelegt. Erst wenn wir allen anderen Objekten
unter TabStop = False das Recht zum Erhalt des Focus entziehen, bleibt er beim Eingabefeld
für den Durchmesser.
Befinden sich mehrere Steuerelemente auf einem Formular, so bekommt beim Start das
Steuerelement den Focus, das den niedrigsten TabStop-Wert hat, der dann je nach Ereignis an
andere Steuerelemente weitergegeben wird. Im Kontextmenü eines Formulars gibt es die
Auswahl Aktivierungsreihenfolge. Darunter kann die Reihenfolge für die Focus-Vergabe
manuell festgelegt werden.
Wird nun ein Durchmesser eingegeben und mit der Eingabetaste bestätigt, dann erscheint das
Ergebnis im Textfeld Kreisfläche und der Focus bleibt im Eingabefeld für den Durchmesser.
Allerdings steht der Cursor hinter dem Wert. Für eine erneute Eingabe muss der alte
Eingabewert zuvor gelöscht werden. Wäre der alte Wert selektiert, dann könnte er direkt
überschrieben werden. Die Selektion lässt sich wie folgt durch VBA-Anweisungen erzielen.
Zuerst wird der Selektionsstart auf null, also auf den Anfang des Textes gesetzt. Die Länge der
Selektion wird durch die Länge des Textes bestimmt. Mit dem Aufruf der Methode SetFocus
ist die Selektion abgeschlossen und unsere Ereignisprozedur erhält die endgültige Form.
Private Sub tbxDurchmesser_KeyDown _
(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Then
Call cmdBerechnung_Click
tbxDurchmesser.SelStart = 0
tbxDurchmesser.SelLength = Len(tbxDurchmesser.Text)
tbxDurchmesser.SetFocus
End If
End Sub
Sind Formulare allgemein gehalten, können sie auch in anderen Projekten zur Anwendung
kommen. Unter der Registerkarte Datei in der Entwicklungsumgebung lassen sich Formulare
mit Datei exportieren bzw. Datei importieren autonom speichern und einlesen (Bild 1-12).
Bild 1-12 Übertragung von Modulen und Formularen auf andere Arbeitsmappen
1.2.5 Module
Module dienen wie die Formulare zur Aufnahme von Prozeduren, die auch bei anderen
Projekten eingesetzt werden können. Allerdings besitzen Module keine Oberfläche und damit
auch keine Möglichkeit, Steuerelemente aufzunehmen. Ihre einzige Aufgabe ist es, ein
Container für Programmcode zu sein und zur Darstellungsmöglichkeit ein Codefenster zu
besitzen.
1.3 Die Syntax von VBA 17
Ein Modul haben wir bereits kennen gelernt, denn die Makro-Funktion erzeugt Prozeduren
ausschließlich in Modulen. Beliebig viele Module können in einem VBA-Projekt eingebunden
sein und es lassen sich auch die gleichen Module in verschiedenen VBA-Projekten einbinden.
Dazu können sie genau wie Formulare autonom exportiert und importiert werden.
Eine weitere wichtige Eigenschaft der Module ist, dass in ihnen mit Global deklarierte
Variable außerhalb einer Prozedur (am Anfang eines Moduls) für das ganze VBA-Projekt
Gültigkeit haben. Mehr darüber unter Kapitel 1.3.9.
'
'Die nachfolgende Ausgabe-Anweisung
'ist auf zwei Zeilen verteilt angeordnet
MsgBox "Dies ist eine Testausgabe! Bitte bestätigen Sie mit ok!" _
vbInformation + vbOKOnly, "Wichtiger Hinweis"
'
'In den nachfolgenden Anweisungen
'werden die Inhalte zweier Variabler x und y
'über den Umweg der Variablen z vertauscht
z = x: x = y: y = z
Eine Zeile kann auch mehrere Anweisungen enthalten. Diese werden durch einen
Doppelpunkt voneinander getrennt und von links nach rechts abgearbeitet.
Das Einrücken von Programmanweisungen innerhalb bedingter Anweisungen oder
Programmschleifen dient nur der Übersichtlichkeit und hat keine Auswirkungen auf die
Prozedur. Ich empfehle Ihnen jedoch dringend diese Schreibweise. So werden Sie auch ältere
Programme besser lesen können.
Elemente in eckigen Klammern können, müssen aber nicht gesetzt werden. Eine senkrechte
Linie bedeutet eine Alternative: hier Private oder Public.
Der Aufruf der Prozedur erfolgt durch den Prozedurnamen und die Angabe eventueller
Parameter. Bei den übergebenen Parametern kann es sich um Variable verschiedener
Datentypen handeln. Die so übergebenen Parameter sind nur in der Prozedur gültig. Werden
Variable am Anfang eines Codecontainers mit Global definiert, so gelten sie in allen
Prozeduren und Funktionen des gesamten VBA-Projekts. Aber Achtung, es muss immer
zwischen lokalen und globalen Variablen unterschieden werden. Mehr dazu unter
Parameterlisten. Eine Prozedur kann jederzeit mit der Anweisung Exit Sub beendet werden.
Sinnvollerweise in Abhängigkeit von einer Bedingung.
Funktionen sind eine besondere Form von Prozeduren. Ihr Aufbau entspricht dem von
Prozeduren mit dem Unterschied, dass der Funktionsname selbst als Variable agiert und einem
Datentyp zugeordnet ist.
[Public|Private|Friend][Static] Function Name [(Param.liste)] [As Typ]
[Anweisungen]
[Name = Ausdruck]
[Exit Function]
[Anweisungen]
[Name = Ausdruck]
End Function
Der Aufruf einer Funktion erfolgt durch den Funktionsnamen und eventuelle Parameter. Eine
Funktion kann jederzeit mit der Anweisung Exit Function beendet werden.
Die VBA-Entwicklungsumgebung verfügt über eine große Auswahl an Prozeduren und
Funktionen in Bibliotheken. Die Attribute Public, Private, Friend und Static werden im
Kapitel 1.3.9 Geltungsbereiche erklärt.
VBA und Office stellen eine große Anzahl von Konstanten zur Verfügung, dabei weisen die
ersten beiden Buchstaben auf die Anwendung hin. Nachfolgend die Wichtigsten:
vb VBA Kontante (vbYes)
wd Word Konstante (wdAlign...)
xl Excel Konstante (xlFixed...)
1.3 Die Syntax von VBA 19
Die wichtigsten Datentypen stehen in Tabelle 1-1. Um den Datentyp einer Variablen eindeutig
zu kennzeichnen, kann dem Namen der Variablen ein datentypspezifisches Kürzel angefügt
werden. So ist z. B. die Variable Zahl% vom Typ Integer oder die Variable Text$ vom Typ
String. Die meisten Programmierer verwenden für Namen von Variablen ein Präfix
(Ungarische Notation), ähnlich dem der Systemkonstanten:
bol Boolean (Beispiel: bolSichern)
dtm Datum oder Zeit (dtmTag) ((dtmStartZeitraum)
err Fehlercode (errDateifehler)
int Integer (intZähler)
ftp Fließkomma (ftpErgebnis)
obj Objektverweis (objDokument)
str String/Text (strNachname)
Tabelle 1-1 Die wichtigsten Datentypen in VBA
Ich benutze immer nur einen kleinen Buchstaben vor dem eigentlichen Namen. So
unterscheide ich zwischen Datenvariable (1 Buchstabe), Systemvariable (2 Buchstaben) und
Objektvariable (3 Buchstaben).
20 1 Einführung in VBA
Mitunter müssen viele Daten gespeichert werden, wie z. B. 1000 Messwerte, und da wäre es
sehr aufwendig, allen eine eigene Variable zuzuordnen. Dafür existieren Variable, die mehrere
Daten unter einem Namen speichern können, die sogenannten Datenlisten (Bild 1-13).
Oft werden die Dimensionen auch als Index bezeichnet und man spricht von einer indizierten
Variablen. Die Indizes beginnen standardmäßig bei null. Ist ein Beginn bei eins gewünscht, so
erlaubt die Anweisung
Option Base {0 | 1}
am Anfang eines Codecontainers direkt unter Option Explicit eine Umschaltung. Die oberen
Werte der Indizes lassen sich während des Programmablaufs neu dimensionieren durch die
Anweisung:
Redim [Preserv] Name (Dimension 1[, Dimension 2[, …]])
Die Anweisung Preserv rettet, soweit möglich, vorhandene Daten, während die Anweisung
Erase eine Neuinitialisierung der Datenliste bzw. des Datenfeldes vornimmt.
Erase Name
1.3.4 Parameterlisten
Parameter dienen zur Übergabe von Daten zwischen Prozeduren. Der Datentyp eines
Parameters wird entweder durch Typkennzeichen oder durch die Anweisung As mit
nachfolgendem Datentyp bestimmt.
Die Syntax ist nachfolgend dargestellt.
[Optional] [ByVal | ByRef] Variable[( )] [As Typ] [= StandardWert]
Bei der Übergabe gibt es zwei Formen, by Value und by Reference. Jede Variable besitzt eine
Adresse im Hauptspeicher. Mit by Reference, der Standardübergabe, wird diese Adresse
übergeben und mit by Value nur der Wert. So lässt sich verhindern, dass alte Werte
überschrieben werden.
Sehr anschaulich ist das vorstehende Beispiel Parameterbeispiel mit Aufruf.
Die Prozedur liefert:
Vor dem Aufruf: RefWert = 4, ValWert = 8
Nach dem Aufruf: RefWert = 6, ValWert = 8
Optional
Laut Syntax können Parameter ganz oder teilweise mit dem Argument Optional belegt
werden. Damit wird bestimmt, dass dieser Parameter zur Ausführung der Prozedur nicht
unbedingt erforderlich ist. Ist jedoch ein Parameter in der Liste als optional gekennzeichnet,
müssen auch alle nachfolgenden Parameter optional deklariert werden. Optionale Parameter
stehen also immer am Ende einer Parameterliste mit der Angabe Optional vor dem Parameter.
In dem nachfolgenden Beispiel wird das Volumen eines Würfels (alle Seiten gleich), eines
Quaders (Quadrat x Höhe) und eines Blocks (alle Seiten ungleich) nach der Anzahl Parameter
berechnet. Zu beachten ist, dass die Auswertungsfunktion IsMissing nicht bei einfachen
Variablen wie Integer und Double funktioniert. Daher der Trick mit dem Datentyp Variant in
der Parameterliste der Funktion.
Sub Beispiel()
Dim Text As String
Text = "Würfel mit (a=5,5) = " & Str(Vol(5.5)) & vbCrLf
Text = Text & "Quader mit (a=6,7, b=7,2) = " & _
Str(Vol(6.7, 7.2)) & vbCrLf
Text = Text & "Block mit (a=4,8, b=6.2, c=5.3) = " & _
Str(Vol(4.8, 6.2, 5.3))
MsgBox Text
End Sub
Die Aufzähl-Variablen werden wie normale Konstante genutzt. Sie haben ihre Gültigkeit nur
auf Modulebene.
die Werte der zugehörigen Felder individuell festlegen und den kompletten Satz an
Prozeduren übergeben, um ihn zu drucken, in einer Datenbank abzuspeichern, Berechnungen
damit durchzuführen, die Felder zu prüfen usw. Angesprochen wird eine Variable unter ihrem
vollen Namen, ganz im Sinne der Objektschreibweise, z.B.:
Träger.Name = "ST 37-2"
'Version 1
If Bedingung Then
Anweisungsblock 1
Else
Anweisungsblock 2
End If
'Version 2
If Bedingung1 Then
Anweisungsblock 1
ElseIf Bedingung2 Then
Anweisungsblock 2
Else
Anweisungsblock 3
End If
Case Auswahlwert 2
Anweisungsblock 2
...
Case Else
Anweisungsblock x
End Select
1.3.8.3 Schalter
Die Funktion Switch ist vergleichbar mit der Select-Case-Anweisung. Sie wertet eine Liste
von Bedingungen aus und führt die betreffende Anweisung durch.
Switch (Bedingung1, Anweisung1[,Bedingung2, Anweisung2 …])
1.3.8.4 Zählschleife
Ein Zähler wird ausgehend von einem Startwert bei jedem Next um den Wert 1 oder wenn
Step angegeben ist, um die Schrittweite erhöht, bis der Endwert überschritten wird. Der
Anweisungsblock wird für jeden Zählerzustand einmal durchgeführt.
For Zähler = Startwert To Endwert [Step Schrittweite]
Anweisungsblock
Next [Zähler]
Die Auslegung einer Bedingung wird durch die folgenden Begriffe gesteuert:
While: Schleife wird solange durchlaufen, wie die Bedingung richtig (true) ist.
Until: Schleife wird solange durchlaufen, wie die Bedingung falsch (false) ist.
1.3.8.9 Schleifenabbruch
Eine Schleife kann jederzeit mit der Anweisung Exit beendet werden.
For …
Exit For
Next
Do …
Exit Do
Loop
1.3.9 Geltungsbereiche
Durch die Anweisung Public wird der Geltungsbereich von Konstanten, Variablen,
Funktionen und Prozeduren auf alle Module des Projekts ausgeweitet.
'Beispiel: Setzen Sie den Cursor in die Prozedur Test1
' und rufen Sie Ausführen/UserForm auf
Public Textname
Sub Test1()
Dim Textname As String
Textname = "TEST"
MsgBox Textname, vbOKOnly, "TEST1"
Call Test2
End Sub
1.3 Die Syntax von VBA 27
Sub Test2()
Dim Textname As String
MsgBox Textname, vbOKOnly, "TEST2"
End Sub
Durch die Anweisung Privat wird der Geltungsbereich von Konstanten, Variablen,
Funktionen und Prozeduren grundsätzlich auf ein Modul beschränkt.
Die Anweisung Static und das Schlüsselwort Static wirken sich unterschiedlich auf die
Lebensdauer von Variablen aus. Mit dem Schlüsselwert Static für Prozeduren, wird der
Speicherplatz aller lokalen Variablen einmal angelegt und bleibt während der gesamten
Laufzeit existent. Mit der Anweisung Static werden Variablen in nichtstatischen Prozeduren
als statisch deklariert und behalten ihren Wert während der gesamten Laufzeit.
Prozeduren in Klassen (und nur hier) können mit dem Attribut Friend versehen werden.
Dadurch sind sie auch aus anderen Klassen aufrufbar, siehe befreundete Klassen.
wird nach dem Auftreten eines Fehlers zur angegebenen Programmmarke (Errorhandler)
verzweigt. Mit der Anweisung
Resume [ Next | Marke ]
wird der Programmablauf mit der nächsten Anweisung oder der nächsten Anweisung nach
einer Marke fortgeführt.
Eine Übersicht der Möglichkeiten zur Fehlerbehandlung zeigt Bild 1-14. Die Anweisung
GoTo hat schon von älteren Basic-Dialekten einen schlechten Ruf und sollte möglichst
vermieden werden. Sie erzeugt sogenannten Spagetti Code, der kaum nachvollziehbar ist.
Daher wird GoTo im Kapitel 1.3.8 Strukturen für Prozedurabläufe auch bewusst ausgelassen.
Außerdem ist ein Programmsprung in der Regel vermeidbar. Lediglich bei Fehlerroutinen hat
sich die Variante mit GoTo durchgesetzt und es spricht hier im Grunde auch nichts dagegen.
Mit dem Auftreten eines ungewollten Fehlers muss eh vom üblichen Prozedurablauf
abgewichen werden.
28 1 Einführung in VBA
Bild 1-14
Fehlerbehandlung
in Prozeduren
Das Err-Objekt verfügt neben den Eigenschaften Number (Fehlernummer) und Description
(Beschreibung) noch über die Methoden Raise und Clear zum Auslösen und Löschen von
Laufzeitfehlern:
Err[.{Eigenschaft, Methode}]
Bild 1-15
Objekt-Hierarchie
in Excel
1.4 Objekte unter Excel 29
1.4.1 Application-Objekt
Das Application-Objekt ist das oberste Objekt der Excel-Objekt-Hierarchie. Viele
Eigenschaften und Methoden des Application-Objekts sind global, so dass Application nicht
mit angegeben werden muss.
Tabelle 1-3 Die wichtigsten Unterobjekte und Eigenschaften des Application-Objekts
Methode Beschreibung
Calculate berechnet alle Tabellenblätter neu
erzwingt eine vollständige Berechnung der Daten in allen geöffneten
CalculateFull
Arbeitsmappen
Viele Eigenschaften und Methoden, die gängige Objekte der Benutzeroberfläche zurückgeben
(wie z. B. die aktive Zelle, eine ActiveCell-Eigenschaft), können ohne den
Objektkennzeichner Application verwendet werden. An Stelle von
Application.ActiveCell.Font.Bold = False
1.4.2 Workbook-Objekte
Das Workbook-Objekt dient dazu, auf ein einzelnes Dokument zuzugreifen. Es ist die
Anwendungsmappe, die auch als Datei gespeichert wird.
Soll ein Workbook-Objekt aus der Liste der Workbooks ausgewählt werden, so geschieht dies
durch Angabe eines Index als fortlaufende Nummer aller vorhandenen Workbooks, der aber
kaum bekannt ist, oder einfacher durch Angabe des Workbook-Namens in der Form:
Workbooks.Item(1)
Workbooks.Item("Mappe1.xls")
Später wird noch gezeigt, wie man ein solch selektiertes Workbook einer Objektvariablen
zuordnen kann.
Tabelle 1-5 Die wichtigsten Eigenschaften des Workbook-Objekts
Eigenschaft Beschreibung
ActiveSheet aktuelles (aktives) Blatt
FullName Vollständiger Pfad einschließlich Dateinamen
Name Dateiname der Arbeitsmappe
Names Namen-Auflistung aller Namen der Arbeitsmappe
Parent übergeordnete Objekt (Application-Objekt)
Path vollständiger Pfad der Arbeitsmappe
Saved True, wenn Arbeitsmappe seit dem letzten Speichern nicht geändert
Sheets Sheets-Auflistung, alle Blätter der Arbeitsmappe
WorkSheets Sheets-Auflistung, alle Tabellen-Blätter der Arbeitsmappe
Tabelle 1-6 Die wichtigsten Methoden des Workbook-Objekts
Methode Beschreibung
Activate aktiviert eine einzelne Arbeitsmappe
Close schließt eine einzelne Arbeitsmappe
PrintOut druckt eine Arbeitsmappe
Save speichert die Änderungen der Arbeitsmappe
SaveAs speichert mit Angabe von Namen, Dateiformat, Kennwort, Zugriffscode
SaveCopyAs speichert eine Kopie der Datei ohne die Original-Datei zu ändern
1.4.3 Worksheet-Objekte
Worksheet-Objekte sind die einzelnen Tabellenblätter einer Excel-Anwendung.
Tabelle 1-7 Die wichtigsten Eigenschaften des Worksheet-Objekts
Eigenschaft Beschreibung
Application Application-Objekt
Cells Range-Objekt (Zellenbereich innerhalb der Tabellenblattes)
1.4 Objekte unter Excel 31
Methode Beschreibung
Activate aktiviert eine einzelne Arbeitsmappe
Calculate berechnet ein Tabellenblatt neu
Select markiert ein einzelnes Tabellenblatt
PrintOut druckt das Tabellenblatt
Delete löscht das Tabellenblatt aus der Arbeitsmappe
Verwenden Sie die Add-Methode, um ein neues Blatt zu erstellen und dieses zur Auflistung
hinzuzufügen. Im folgenden Beispiel werden in der aktiven Arbeitsmappe zwei neue Tabellen
hinter der zweiten Tabelle eingefügt.
Worksheets.Add count:=2, after:=Worksheets(2)
Verwenden Sie Worksheets(Index), wobei Index der Name oder die Indexnummer des Blattes
ist, um ein einzelnes Worksheet-Objekt zurückzugeben. Im folgenden Beispiel wird das
Worksheet Tabelle1 aktiviert.
Worksheets("Tabelle1").Activate
Im Gegensatz zu Worksheets, die eine Objektliste aller Tabellenblätter darstellt, gibt es in der
Objekthierarchie unter Excel noch die Objektliste Sheets, die außer allen Worksheets auch alle
Diagrammblätter enthält. Die Eigenschaften und Methoden von Sheets sind andere und
werden im Objektkatalog beschrieben.
1.4.4 Range-Objekte
Range-Objekte beziehen sich auf eine Zelle oder einen Zellbereich. Da VBA nicht über ein
Cell-Objekt verfügt, ist dieses Objekt das mit am meisten verwendete.
Tabelle 1-9 Die wichtigsten Eigenschaften des Range-Objekts
Eigenschaft Beschreibung
Address Bezug eines Zellenbereichs
Application Application-Objekt
Range("A1").Value = 12 setzt den Inhalt der Zelle "A1" auf 12,
Cells
Cells(1, 2).Value = 24 setzt den Inhalt der Zelle "B1" auf 24
Column Spalte (am Anfang des angegebenen Bereichs)
32 1 Einführung in VBA
Methode Beschreibung
Activate aktiviert eine einzelne Zelle
Calculate berechnet einen Zellenbereich neu
Select markiert eine Zelle oder einen Zellbereich
Sub Spalte_markieren()
Columns(2).Select 'markiert zweite Spalte
End Sub
Beispiele:
Worksheets("Tabelle1").Range("A1")
Worksheets("Tabelle1").Range("A4:B7")
Worksheets("Tabelle1").Range("B3:D6, D10:F12")
Worksheets("Tabelle1").Range("A1, B2, C3, D4:D5")
1.4 Objekte unter Excel 33
Beispiel:
Sub Demo()
Dim iZeile As Integer
For iZeile = 1 To 5
Worksheets(1).Cells(iZeile + 1, iZeile).Value = iZeile
Next
End Sub
Wertzuweisungen
Die Wertzuweisung an Zellen wird mit Hilfe der Value-Eigenschaft realisiert. Diese
Eigenschaft ist für ein Range–Objekt ein Default-Wert, d. h. die Angabe Value zum Range-
Objekt kann entfallen.
Beispiele:
ActiveCell.Value = 100: ActiveCell = 100
Range("A1").Value = "Test": Range("A1")="Test"
Range("B1:C1").Value = 25: Range("B1:C1") = 25
Kommentarzuweisungen
Zellen können auch Kommentare zugeordnet werden. Das ist in der Regel ein erklärender
Text, der immer dann erscheint, wenn die Zelle mit dem Mauszeiger berührt wird. Realisiert
wird dies über das Comment-Objekt des Range-Objekts mit nachfolgenden Eigenschaften und
Methoden.
Tabelle 1-11 Die Eigenschaften des Comment-Objekts
Eigenschaft Beschreibung
Visible Anzeige des Kommentars (true, false)
Tabelle 1-12 Die Methoden des Comment-Objekts
Methode Beschreibung
AddComment Erzeugt einen Kommentar
Text Fügt einen Kommentar hinzu oder ersetzt ihn
Delete löscht einen Kommentar
Previous holt vorherigen Kommentar zurück
Next holt nächsten Kommentar zurück
34 1 Einführung in VBA
Methode Beschreibung
Clear Zellen im angegebenen Bereich leeren und Standardformat setzen
ClearContents löscht im angegebenen Bereich nur Inhalte und Formeln
ClearComments löscht im angegebenen Bereich alle Kommentare
ClearFormats löscht im angegebenen Bereich alle Formatierungen, Inhalte bleiben
löscht Zellen und füllt diese mit Zellen mit dem Inhalt der Zellen nach
Delete
der Shift-Anweisung auf.
Beispiele:
Range("A1").Name = "Brutto"
Range("B1").Name = "Netto"
Range("D1:E5").Name = "MWSt"
Da Bereichsnamen Objekte der Auflistung Names sind, kann für die Zuordnung eines Namens
auch die Add-Methode verwendet werden.
Beispiel:
ActiveWorkbook.Names.Add "Test", "=Testeingabe!$A$1"
Der Sinn der Deklaration von Bereichsnamen für Range-Objekte liegt in der übersichtlichen
Schreibweise.
Beispiel:
Range("MWSt")=0.16
Die Bereichsnamen können gelöscht werden durch eine Anweisung der Form:
Range("Tabelle1").Name.Delete
Suchen in Range-Objekten
Für das Suchen in Zellbereichen gibt es die Find-Methode für Range-Objekte. Die Methode
gibt ein Range-Objekt zurück, so dass dieses ausgewertet werden muss.
Beispiele:
'Sucht im angegebenen Bereich nach der Zelle mit dem Inhalt Wert
'und gibt deren Inhalt an die Variable Suche weiter,
'die anschließend ausgegeben wird
Suche = Range("B1:M25").Find("Wert").Value
MsgBox Suche
Das Suchen über Zellen nach Bedingungen ist am einfachsten durch Schleifen realisierbar.
Beispiel:
'Suche nach numerischen Werten die > 13 sind und
'farbliche Kennzeichnung des Hintergrundes
Sub Suche()
For Each Zelle In Range("B1:M25")
If IsNumeric(Zelle.Value) Then
If Zelle.Value > 13 Then
Zelle.Interior.ColorIndex = 5
36 1 Einführung in VBA
End If
End If
Next
End Sub
1.4.7 Objektvariable
Objektvariable sind Variable, die auf ein Objekt verweisen. Sie werden genauso wie normale
Variable mit der Dim-Anweisung definiert unter Zuweisung des Objekttyps.
Dim Objektvariable As Objekttyp
Mit Objektvariablen wird der Zugriff auf Objekte einfacher und schneller. Es müssen nicht
immer alle Objektstrukturen genannt werden.
Lediglich die Wertzuweisung unterscheidet sich von der Wertzuweisung normaler Variabler
und muss mittels der Anweisung Set erfolgen:
Set Objektvariable = Objektausdruck
Der Einsatz von Objektvariablen erspart vor allen Dingen viel Schreibarbeit, da sie bedeutend
kürzer gehalten werden können, als die Objekte unter Excel, mit denen sie referieren. Gibt
man ihnen noch Namen, die auf ihre Eigenschaft oder Anwendung schließen, dann wird man
schnell den Nutzen dieses Variablentyps schätzen lernen.
Beispiel:
Dim Datenblatt As Worksheet
Set Datenblatt = ActiveSheet
Bild 1-16
Ein Klassenmodul
einfügen
Das Klassenmodul besitzt einen Namen, der sich im Eigenschaftsfenster ändern lässt.
Natürlich benutzt man Namen, die die Objekte der Klasse beschreiben. Das Klassenmodul hat
außerdem noch das Attribut Instancing und dies ist auf Private gesetzt. Das bedeutet, dass alle
Definitionen in dieser Klasse „nach außen“ nicht zugänglich sind.
Als Beispiel soll der ideale freie Fall dienen, bei dem sich durch die Messung der Fallzeit
eines Gegenstandes, Fallhöhe und Endgeschwindigkeit berechnen lassen. Unter den idealen
Bedingungen, dass kein Luftwiderstand auftritt und die Erdbeschleunigung mit g = 9,81 m/s2
wirkt. Wenn t die Fallzeit ist, so bestimmt sich die Endgeschwindigkeit aus der Formel
𝑣 =𝑔∙𝑡 (1.2)
und die Fallhöhe
∙
ℎ= (1.3)
In VBA hat die Klasse clsFreierFall nach Eingabe der Attribute damit das in Bild 1-17
dargestellte Aussehen.
Bild 1-17
Aufbau der
Klasse
Freier Fall
38 1 Einführung in VBA
Bild 1-18
Modul Freier
Fall
In der Tabelle sollen ein paar zu berechnende Werte stehen (Bild 1-19).
Bild 1-19
Arbeitsblatt mit
Zeitwerten
Innerhalb der Prozedur sollen die vorhandenen Werte gelesen werden. Dazu wird die Anzahl
belegter Zeilen über den Zeilenzähler des UsedRange-Objekts bestimmt und mit Hilfe einer
For-Next-Schleife werden die Werte eingelesen. Um zu kontrollieren, ob diese Prozedur
richtig funktioniert, wird hinter der Wertzuweisung noch eine Ausgabe in das Direktfenster
1.5 Eigene Klassen und Objekte 39
(über Ansicht einstellbar) mit Hilfe von Debug.Print eingegeben. Damit hat die Prozedur die
folgende Form und ein Start zeigt das Ergebnis im Direktfenster (Bild 1-20).
Public Sub FreierFall()
Dim iMax As Integer
Dim iRow As Integer
Dim dZeit As Double
iMax = ActiveSheet.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = Cells(iRow, 1)
Debug.Print dZeit
Next iRow
End Sub
Bild 1-20
Ausgabe der Zeitwerte
im Direktfenster
Zur Instanziierung eines Objekts wird, wie bereits unter 1.5.7 beschrieben, zunächst eine
Objektvariable definiert. Für jede Fallzeit wird dann in der Schleife ein Objekt der Klasse
clsFreierFall instanziiert. Bei der Codeeingabe wird bereits die installierte Klasse
vorgeschlagen (Bild 1-21).
Bild 1-21
Vorgabe der Klasse
wandert die Ausgabe zum Direktbereich in den Konstruktor der Klasse. Der Code im
Arbeitsmodul modFreierFall lautet nun:
Public dZeit As Double
iMax = ActiveSheet.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = Cells(iRow, 1)
Debug.Print dZeit
Set objFall = New clsFreierFall
Next iRow
End Sub
End Sub
XCT-01-02_FreierFall.xlsm
Die Ausgabe im Direktfenster bestätigt die Funktionalität. Nun kann im Konstruktor, dort wo
als Kommentar Auswertung steht, die Berechnung der anderen Attribute erfolgen. Man spricht
auch von abgeleiteten Attributen. Eine erneute Ausgabe im Direktfenster bestätigt die erfolgte
Berechnung (Bild 1-22).
Dim Fallzeit As Double
Dim Fallhöhe As Double
Dim Fallgeschw As Double
Bild 1-22
Ausgabe der
berechneten Werte
Natürlich hätten die Werte auch gleich direkt in der Arbeitsprozedur berechnet werden
können. Doch es soll gezeigt werden, dass die Objekte mit ihren Attributen auch nach
Beendigung der Leseschleife existieren und damit für andere Berechnungen zur Verfügung
stehen. Dazu muss aber auch der Zugriff auf ein einzelnes Objekt möglich sein.
Alle erzeugten Objekte haben den gleichen Namen, obwohl mit jedem New eine neue
Speicheradresse für das Objekt erzielt wird. Es liegt also nahe, eine indizierte Objektvariable
einzusetzen. Dadurch ist jedes Objekt über seinen Index eindeutig adressierbar.
Das einfache Beispiel zeigt auch, dass es in einer Klasse zwei Arten von Methoden gibt. Die
eine Methode dient dazu, den Objekteigenschaften Werte zuzuweisen oder sie abzurufen. Die
andere Methode führt komplizierte Dinge durch, wie die Berechnung eines neuen Wertes. Es
scheint daher sinnvoll, diesen Unterschied in der Implementierung zum Ausdruck zu bringen.
Das wird durch die Verwendung der Property-Funktionen erreicht. Property bedeutet übersetzt
nichts anderes als Eigenschaft.
Sie sind definiert mit
[Public|Private][Static] Property Let Name ([Parameterliste], WERT)
[Anweisungen]
[Exit Property]
[Anweisungen]
End Property
für das Lesen von Attributen. Es bleibt noch festzustellen, dass es sich bei Property Let-
Prozedur um eine Prozedur handelt, während die Property Get-Prozedur eine Funktion
darstellt. Diese Prozeduren sind also für die erste Art von Methoden gedacht, während für die
anderen Methoden alles so bleibt.
Damit alle berechneten Werte in die Tabelle gelangen, hat sich der Code der Klasse
clsFreierFall entsprechend verändert:
42 1 Einführung in VBA
End Sub
Die Tabelle mit den Werten erhält den Namen Liste. Der Code des Moduls modFreierFall
lautet:
Public dZeit As Double
'Ausgabe
For iRow = 2 To iMax
wshListe.Cells(iRow, 2) = objFall(iRow - 1).getFallhöhe
wshListe.Cells(iRow, 3) = objFall(iRow - 1).getFallgeschw
Next
Set wshListe = Nothing
End Sub
XCT-01-03_FreierFall2.xlsm
1.5 Eigene Klassen und Objekte 43
Für das Setzen anderer Werte ist lediglich die Änderung der Fallzeit erforderlich, denn alle
anderen Attribute sind ja abgeleitet und das muss ebenfalls in der Property Let-Prozedur
berücksichtigt werden. Für die Berechnung in zwei Methoden wird modular eine Private-
Prozedur eingesetzt. Außerdem wird die Erdbeschleunigung noch als Konstante installiert. Mit
dem Ende der Nutzung sollten auch die verwendeten Objekte wieder zerstört werden. Dazu
werden diese auf Nothing gesetzt.
Die Klasse clsFreierFall:
Const g As Double = 9.81
Dim Fallzeit As Double
Dim Fallhöhe As Double
Dim Fallgeschw As Double
XCT-01-04_FreierFall3.xlsm
Oft kommt es in Prozeduren vor, dass mehrere Attribute und Methoden einer Klasse
hintereinanderstehen. Dafür gibt es die verkürzte Schreibweise:
With Object
.Attribut1 = Wert
.Attribut2 = Wert
...
.Methode1 ([Parameterliste1])
.Methode2 ([Parameterliste2])
...
End With
Attribute und Methoden eines Objektes werden durch eine With–End With-Anweisung
geklammert. So kann die vor den Punkt gehörende Objektbezeichnung entfallen, wie in der
Prozedur FreierFall angewendet.
1.5.5 Objektlisten
Bereits unter Objekte haben wir Objektlisten kennen gelernt, die zu vorgegebenen VBA-
Objektbibliotheken gehören. Objektlisten lassen sich aber auch für eigene Objekte erstellen.
Dazu bedient man sich der einfachen Klasse Collection (Auflistung).
Collection
Ein Collection-Objekt bietet die Möglichkeit, eine Sammlung von Datenelementen anzulegen,
die nicht zwangsläufig denselben Datentyp haben. Die Klasse Collection bietet Methoden, die
in Tabelle 1-14 aufgelistet sind.
1.5 Eigene Klassen und Objekte 45
Mit einem Collection-Objekt ist nun auch nicht mehr eine indizierte Objektvariable
erforderlich. Auch diese Liste lässt sich mit der For-Each-Next-Anweisung lesen. Zu beachten
ist, dass der Schlüssel für ein Element des Collection-Objekts vom Datentyp String sein muss,
so dass für die Nutzung der Zeilennummer als Key noch eine Umformung mittels der
Funktion Str() zum Text erfolgt. Die Umformung erzeugt an der Stelle des Vorzeichens ein
Leerzeichen (bei positiven Werten), so dass dieses noch mit der Funktion Trim() entfernt
werden muss. Die nachfolgende Arbeitsprozedur liefert dann das gleiche Ergebnis.
Public dZeit As Double
wshListe.Cells(iRow, 3) = .getFallhöhe
wshListe.Cells(iRow, 4) = .getFallgeschw
End With
Next
Set objFall = Nothing
Set objListe = Nothing
Set wshListe = Nothing
End Sub
XCT-01-05_FreierFall4.xlsm
Der neu hinzugefügte Wert wird nicht nach seinem Schlüssel (Key) eingeordnet, sondern der
Liste angehängt. Weiterhin ist zu beachten, dass der Schlüssel vom Datentyp String sein muss.
Sollen die Werte nach ihrem Schlüssel geordnet ausgegeben werden, dann muss die
Ausgabeschleife entsprechend abgewandelt werden.
'Ausgabe aus der Liste nach Key (String) geordnet
'und um eine Spalte versetzt
For iRow = 1 To objListe.Count
Set objFall = objListe.Item(Trim(Str(iRow)))
With objFall
Cells(iRow + 1, 2) = .getFallzeit
Cells(iRow + 1, 3) = .getFallhöhe
Cells(iRow + 1, 4) = .getFallgeschw
End With
Next iRow
Bild 1-23
Objektbibliothek unter
Verweise einbinden
Bei einer Dictionary-Sammlung besteht die Möglichkeit, alle Elemente mit der Anweisung
RemoveAll zu entfernen, ohne das Dictionary-Objekt selbst zu zerstören. Beide
Objektsammlungen unterstützen die For-Each-Next-Anweisung, die bei einer Collection-
Sammlung die Schlüssel auflistet und bei einer Dictionary-Sammlung die Elemente.
Tabelle 1-15 Die Methoden und Attribute der Klasse Dictionary
Add (Key, Item) fügt ein Element hinzu (andere Folge wie Collection)
Key: Beliebiger Schlüssel für den Zugriff
Item: Element beliebigen Datentyps
Exists(Key) erlaubt die Abfrage eines Schlüssels
Wichtig! Liefert true oder false.
Items() liefert alle Elemente im Dictionary
Keys() liefert einen Array-Container mit allen Keys im Dictionary
Remove (Key) entfernt ein Element mit dem Schlüssel
RemoveAll() löscht alle Schlüssel und Items im Dictionary
Item(Key)[=newitem] liefert das Element mit dem Schlüssel
Ein nicht vorhandener Schlüssel wird neu angelegt.
Count liefert die Anzahl Elemente in der Liste
An der Klassendefinition ändert sich nichts. Nur das Arbeitsmodul hat einen anderen Aufbau.
Zu beachten ist, dass beim Lesen der Elemente mit der For-Each-Next-Anweisung das Item
vom Datentyp Variant sein muss. Dennoch wird es mit der Übergabe ein Objekt, das beweist
die Nutzung der Klassen-Methoden.
Public dZeit As Double
XCT-01-06_FreierFall5.xlsm
1.5.6 Vererbung
Ohne es zu wissen, wurde mit der Nutzung einer Collection-Klasse das OOP-Prinzip der
Vererbung verwendet. Mit der Methode der Vererbung können Klassen hierarchisch
strukturiert werden. Dabei werden Attribute und Methoden der Oberklasse an eine oder
mehrere Unterklassen weitergegeben. Man spricht auch oft von Eltern-Klasse und Kind-
Klassen.
Die Einteilung in Ober- und Unterklasse erfolgt über ein Unterscheidungsmerkmal, den
sogenannten Diskriminator. Er definiert den maßgeblichen Aspekt und ist das Ergebnis der
Modellierung. Als Beispiel betrachten wir Fahrzeuge. Mithilfe des Diskriminators Antriebsart
ließe sich eine Einteilung nach Benzinmotor, Dieselmotor, Elektromotor, Gasmotor etc.
vornehmen. Mithilfe des Diskriminators Fortbewegungsmedium ist eine Einteilung nach Luft,
Wasser, Straße und Schiene möglich.
Bevor wir nun die Vererbung in unserem Beispiel an einem Klassendiagramm darstellen, soll
zuvor noch der Begriff des Modifizierers eingeführt werden.
Modifizierer werden vor die Attribute und Methoden gesetzt und beschreiben die
Zugriffsmöglichkeiten auf die Elemente einer Klasse.
1.5 Eigene Klassen und Objekte 49
Der Bauplan für das Beispiel Freier Fall zeigt die Modifizierer (Bild 1-24) und eine
Beziehung (Pfeil).
Bild 1-24 Das Klassendiagramm zeigt eine Vererbung am Beispiel Freier Fall
Der Pfeil wird als erbt von bezeichnet und das bedeutet, dass die Kind-Klasse alle Attribute
und Methoden der Eltern-Klasse erbt. So ist es auch möglich, dass die Collection im Beispiel
als Kind-Klasse die Methode der Eltern-Klasse FreierFall, nämlich letFallzeit nutzt.
Daraus konstruiert sich die Methode der Klasse durch den Klassennamen, gefolgt von einem
Tiefstrich und dem Event. Einige Methoden besitzen auch Parameter, da ein Event auch
Unterobjekte oder Attribute des Objekts berührt. Diese können dann in der Methode
verwendet werden. Das Event-Handling erfolgt ausschließlich innerhalb der Objekt-Module.
Daher besitzt das reine Code-Modul keine Events.
Durch Klicken auf ein Ereignis in der Kopfzeile des Codefensters, wird die Methode, wenn
nicht schon vorhanden, im Codefenster installiert. Wie Bild 1-26 zeigt, ist die Methode dann
eine leere Prozedur. Setzen wir die Ausgabe des Parameter-Attributs über die MsgBox-
Anweisung ein
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub
und lösen das Ereignis aus, dann wird die Adresse des markierten Bereichs angezeigt.
Bild 1-26
Anzeige der Adresse
durch eine Event-
Prozedur
Das übergeordnete Objekt Workbook besitzt ebenfalls eine Event-Methode für dieses Event.
In der Event-Methode Workbook_Open geben wir sicherheitshalber noch einmal an, dass alle
Events wirksam sein sollen.
Private Sub Workbook_SheetChange _
(ByVal sh As Object, ByVal Target As Range)
MsgBox "Book-Event in " & sh.Name & " / " & Target.Address
End Sub
Und letztlich besitzt auch das Application-Objekt eine Event-Methode für das gleiche Event.
Da aber die Applikation keinen Code-Container besitzt, wie beim Worksheet und Workbook,
wird mit der Anweisung WithEvents das Objekt deklariert, dessen Ereignis ausgewertet
werden soll. Dazu ist ein Objekt-Container erforderlich und wir erstellen die Klasse
clsExcelEvents mit nachfolgendem Inhalt.
Dim WithEvents App As Application
Mit der Instanziierung eines Application-Objekts erbt dieses auch das SheetChange-Event der
Applikation. Es bleibt nun nur noch die Aufgabe, ein Application-Objekt zu instanziieren.
Dies übernimmt das Modul modEvents. Die Prozedur Test muss zuvor einmal gestartet
werden, bevor eine Änderung alle Events aufruft. Dann kann die Prozedur die Änderung auch
gleich mit ausführen.
Public App As clsExcelEvents
Sub Test()
Set App = New clsExcelEvents
'Änderung in Zelle A1
Tabelle1.Cells(1, 1) = "X"
End Sub
XCT-01-07_EventMethoden.xlsm
Mit jeder Änderung in Tabelle1 stellt sich der zeitliche Verlauf der Meldungen ein (Bild 1-
27). Dieser Verlauf ist entsprechend der Objekthierarchie aufsteigend. Doch wie konstruiert
man nun Events für eigene Objektklassen? Dazu bedient man sich der RaiseEvent-Anweisung.
Sie löst ein in einer Klasse deklariertes Ereignis aus. Die entsprechende Methode zu diesem
Ereignis wird, wie wir das bereits kennen, durch die Namenskonstruktion Klasse_Ereignis
benannt.
52 1 Einführung in VBA
Betrachten wir auch dazu ein einfaches Beispiel. Das obige Ereignis der Selektion einer Zelle
auf dem Tabellenblatt soll nun für alle Tabellenblätter gelten. Wir erstellen zunächst ein
Klassenmodul mit dem Namen clsAlleTabellen (Bild 1-28).
Mit WithEvents wird wieder das Objekt deklariert, dessen Ereignis ausgewertet werden soll,
mit Event das Ereignis selbst. Hier wird mit dem Ereignis ein Bereich übergeben, nämlich der
Bereich der markierten Zelle(n).
Die Property Set-Anweisung übergibt das Applikation-Objekt an das Klassen-Objekt. Friend
bedeutet in diesem Fall, dass die Methode auch außerhalb der Klasse genutzt werden kann.
Das SheetSelectionChange-Ereignis des Application-Objekts (siehe Objektkatalog) löst mit
jeder Aktivierung einer neuen Zelle oder eines Zellbereichs in einer vorhandenen Tabelle das
Event DieAdresse in der Klasse clsAlleTabellen aus. Im Prinzip haben wir es hier auch mit
einer Vererbung zu tun. Nur wird kein Attribut oder eine Methode vererbt, sondern die Klasse
clsAlleTabellen erbt das Event SheetSelectionChange der Klasse Application.
Es fehlt noch eine UserForm für die Nutzung. Sie hat die in Bild 1-29 dargestellte Form unter
dem Namen frmAdresse und besitzt die Steuerelemente tbxName (Textfeld), tbxAdresse
(Textfeld) und cmdEnde (Commandbutton).
1.5 Eigene Klassen und Objekte 53
Bild 1-29
Anzeige der
Adresse in der
UserForm
frmAdresse
Zunächst wird ein Objekt EineTabelle der Klasse AlleTabellen über WithEvents deklariert.
Damit entsteht der Plan für ein Objekt mit eigenen Ereignissen. Mit der Aktivierung der
UserForm werden dann Objekt und Ereignis instanziiert. Jedes SheetSelectionChange-
Ereignis auf einem Tabellenblatt ruft die EineTabelle_DieAdresse-Methode der Klasse auf.
Diese übergibt Name und Adresse in die Textfelder der Userform.
Gestartet wird die Userform frmAdresse im Modul modStart über die Prozedur Start.
Sub Start()
frmAdresse.Show vbModeless
End Sub
XCT-01-08_SelectEvents.xlsm
54 1 Einführung in VBA
Bild 1-30
Startfenster
einer leeren
Excel-
Anwendung
Bild 1-31
Dialogfenster
zur Speicherung
der Excel-
Anwendungen
1.6 Aktionen unter Excel 55
Bild 1-32
Neues
Tabellenblatt
einfügen
Das Kontextmenü des Tabellen-Registers bietet mit der Methode Einfügen ebenfalls die
Möglichkeit ein neues Arbeitsblatt anzulegen. Das Kontextmenü auf dem Feld der Pfeile
(ganz links neben den Tabellen-Registern) öffnet eine Übersicht aller vorhandenen Sheets und
kann auch zur Auswahl verwendet werden. Das ist besonders bei sehr vielen Arbeitsblättern in
einer Mappe von Vorteil.
Bild 1-33
Projekt-Explorer
beim Neustart
Durch Anklicken von VBAProject und Tabelle1 (nacheinander für beide Objekte ausführen),
lassen sich im Eigenschaftsfenster unter (Name) die Namen ändern. Der Projektname wird zu
Kapitel1 (ohne Leerzeichen!) und das Arbeitsblatt erhält den Namen tblDaten. Das Präfix tbl
dient zur besseren Lesbarkeit im Programmcode (siehe Kapitel 1.3.3).
Bild 1-34
Ein Haltepunkt
im Programmcode
Ein nochmaliger Klick an die gleiche Stelle entfernt diesen Punkt wieder. Eine so
gekennzeichnete Stelle ist ein Haltepunkt. Wird nun diese Prozedur gestartet, z. B. durch einen
Mausklick auf die Prozedur und dann mit der F5-Taste, dann wird an dieser Stelle der
Prozedurablauf gestoppt. Wenn wir jetzt mit der Maus auf die entsprechenden Variablen x
oder i fahren, erscheint deren Inhalt als Anzeige. Mit der F8-Taste können wir nun
schrittweise jede weitere Anweisung auslösen. Die aktuelle Zeile wird dann gelb dargestellt.
Wir können aber auch mit der F5-Taste die Prozedur weiterlaufen lassen bis zum nächsten
Haltepunkt oder bis zum Prozedurende, wenn wir vorher den Haltepunkt entfernen. Es lassen
sich auch mehrere Haltepunkte setzen. Haltepunkte können beim Stopp auch gelöscht oder
neu gesetzt werden. Weitere Informationen zu den Objekten in der Prozedur erhalten wir auch
durch Einblenden des Lokal-Fensters im VBA-Editor unter Register Ansicht/Lokal-Fenster.
1.6 Aktionen unter Excel 57
Bild 1-35
Schaltfläche zur Teilung
des Codefensters
Dazu klicken wir in der oberen rechten Ecke (Bild 1-35) auf eine kleine vorhandene
Schaltfläche. Halten die Maustaste gedrückt und fahren so bis zur Mitte des Codefensters. Das
Fenster wird geteilt. Wenn wir diese Trennlinie wieder anklicken, festhalten und nach oben
aus dem Codefenster schieben, wird diese Teilung wieder aufgehoben. Einfacher kann die
Trennlinie mit einem Doppelklick entfernt werden.
Bild 1-36
Symbolleiste für den
Schnellzugriff anpassen
Als Beispiel soll hier für die Prozedur Kreis ein Symbol für den Schnellzugriff installiert
werden:
Auf die Schaltfläche, die sich rechts an der Symbolleiste für den Schnellzugriff befindet,
mit der Maus klicken
58 1 Einführung in VBA
Es öffnet sich ein Dialogfeld Symbolleiste für den Schnellzugriff anpassen mit einer
Auswahlliste und darin die Auswahl Weitere Befehle … wählen
Damit wird das schon bekannte Dialogfenster Excel-Optionen geöffnet, in dem bereits die
Auswahl Symbolleiste für den Schnellzugriff ausgewählt ist.
Unter Befehle den Eintrag Makros (Bild 1-37) auswählen
Es werden die vorhandenen Befehle angezeigt und in unserem Fall die Prozedur
Tabelle1.Kreis markieren
Durch Markieren des Befehls im linken Feld (Bild 1-38) und durch Hinzufügen gelangt
der Befehl in das rechte Feld, also in die Symbolleiste.
Markierte Einträge in der Symbolleiste können mit Entfernen wieder gelöscht werden.
Wer möchte, kann zusätzlich das Symbol ändern. Mit der Schaltfläche Ändern öffnet sich
ein Fenster mit verschiedenen Symbolen (Bild 1-39). Hier kann ein anderes Symbol
ausgewählt werden.
Ein zweimaliges OK schließt alle Dialogfenster.
1.6 Aktionen unter Excel 59
Bild 1-39
Dialogfenster zur
Symbolauswahl
Die Symbolleiste für den Schnellzugriff kann auch den Aufruf der Entwicklungsumgebung
erhalten (Bild 1-40):
Die Registerkarte Entwicklertools wählen
Mit der rechten Maustaste auf das Symbol Visual Basic klicken und Zu Symbolleiste für
den Schnellzugriff hinzufügen wählen.
Bild 1-40
Zugriff über die
Schnellstartliste
Bild 1-41
Modul für
Menüeinträge
In dieses Modul wird der nachfolgende Code aus der Codeliste 1-1 eingetragen. Er enthält
zwei Prozeduren. InitMenu erstellt den Menüeintrag und RemoveMenu entfernt ihn wieder.
Aufrufen lassen sich diese Prozeduren über Entwicklungstools/Makros.
60 1 Einführung in VBA
Call RemoveMenu
Bei diesem Beispiel befindet sich nach dem Aufruf von InitMenu in der Menüleiste unter der
Registerkarte Add-Ins der Eintrag Kreisberechnung. Dieser Eintrag ist ein Popup-Eintrag, so
dass sich mit dem Pfeil weitere Untereinträge öffnen (Bild 1-42).
Bild 1-42
Menüeinträge
Sie rufen beide die gleiche Prozedur zur Kreisberechnung auf, die wir bereits unter 1.2.2
erarbeitet haben. Allerdings stehen die Prozeduren, sie wurden zur Unterscheidung Kreis1 und
Kreis2 genannt, in unterschiedlichen Bereichen.
Kreis1 in der Tabelle1 wird unter Angabe des Tabellenblattes aufgerufen, während Kreis2 im
zusätzlichen Modul modKreisFläche direkt aufgerufen wird. Obwohl beide Prozeduren als
Private deklariert sind, lassen sie sich auf diese Art aufrufen, ohne dass sie in der Makro-
Übersicht erscheinen. Menüeinträge können über das Kontextmenü (rechte Maustaste) auch
wieder manuell entfernt werden.
Damit der Menüeintrag nicht ständig aus- und eingeschaltet werden muss, können auch die
Ereignisse des Workbooks die Steuerung übernehmen. Mit Workbook_Open kann der
Menüpunkt beim Öffnen der Anwendung installiert und mit Workbook_BeforeClose wieder
deinstalliert werden. Dazu sind die beiden nachfolgenden Prozeduren unter
DieseArbeitsmappe zu installieren.
Codeliste 1-2 Automatische Installation und Deinstallation der Menüprozeduren
Private Sub Workbook_BeforeClose(Cancel As Boolean)
RemoveMenu
End Sub
XCT-01-09_Kreisberechnung2.xlsm
Die Menüprozeduren selbst können dann als Private Sub definiert werden. Wer mag, kann die
Menüeinträge noch mit einem Icon und einem Erklärungstext versehen, der immer dann
erscheint, wenn sich der Mauszeiger auf dem Menüpunkt befindet. Dazu ergänzen wir die
Menüeinträge um die Anweisungen
.TooltipText = "Test!" 'Dieser Text erscheint bei Mouseover
.BeginGroup = True 'Linie zwischen den Menüpunkten
.FaceId = 523 'Icon über Index
Um die ersten 100 Icon-Indizes von über 4000 zu sehen, erstellen wir einfach einen
Menüpunkt nach folgendem Muster:
62 1 Einführung in VBA
Da die Wurzel nicht negativ sein darf, gilt s > a, s > b und s > c.
Auch hier wird zunächst ein neues Modul verwendet, das den Namen modFunktionen
bekommt. In das Codefenster wird die Funktion Heron eingetragen (Bild 1-43).
1.6 Aktionen unter Excel 63
Bild 1-43
Funktion
Heron
Auf diese Art lassen sich viele weitere Funktionen definieren. Angewendet wird eine so
definierte Funktion auf einem Tabellenblatt wie alle Funktionen. Mit =Heron wird der
Funktionsname aufgerufen und die Parameter werden durch Semikolon getrennt aufgeführt,
genau wie bei jeder Standardfunktion auch (Bild 1-44).
Bild 1-44
Funktion Heron
angewendet
Zur Verwendung eigener Funktionen auch in anderen Arbeitsmappen, kann das Modul
modFunktionen, und natürlich auch andere Module, in der Entwicklungsumgebung über
Datei/Datei exportieren gespeichert, mit Datei/Datei importieren in einer anderen
Arbeitsmappe wieder importiert und mit Entfernen … gelöscht werden (Bild 1-45).
Bild 1-45
Modul MeineFunktionen
exportieren, importieren und
entfernen
Wenn die Arbeitsmappe als Dateityp .xlam gespeichert wird, dann kann sie als Add-In unter
Datei / Optionen / Add-Ins als Excel-Add-Ins aufgerufen werden. Ist sie nicht in der Liste
angegeben, lässt sich die Datei mit Durchsuchen am Speicherort der xlam-Datei finden.
Danach kann die Heron-Funktion wie jede andere Excel-Funktion eingesetzt werden.
XCT-01-10_Heron.xlsm
64 1 Einführung in VBA
1.7 Hilfsprozeduren
Bild 1-46
Formular mit Listenfeld
Geladen wird das Formular aus einem CodeModul modFormStart mit der Prozedur Start.
Sub StartFormListe()
Load frmListe
frmListe.Show
End Sub
Zum Ereignis Click der Schaltfläche Übernehme bekommt die Ereignisprozedur den Aufruf
der Aktionsprozedur ListeFüllen. Als Parameter wird das Listenfeld als Objekt übergeben.
Private Sub cmdStep1_Click()
ListeFüllen lbxListe
End Sub
Die Aktionsprozedur schreiben wir in ein weiteres Code-Modul mit dem Namen
modAktionen.
Option Explicit
Option Private Module
Mit dem Aufruf des Formulars und der Schaltfläche Übernehme stehen die Daten aus dem
Arbeitsblatt im Listenfeld.
Im nächsten Schritt sollen die Daten aus dem Listenfeld zurück in das Arbeitsblatt an eine
vorgewählte Stelle kopiert werden. Dazu muss zunächst vor dem Start des Formulars eine
Zelle im Arbeitsblatt markiert werden, an der dann die Kopie erstellt werden soll. Der
Vorgang startet im Formular mit der zweiten Schaltfläche Kopiere Liste.
Private Sub cmdStep2_Click()
ListeKopieren lbxListe
End Sub
Die Handhabung ist etwas umständlich, denn wenn eine andere Zelle als Kopierziel
ausgewählt werden soll, muss das Formular zunächst geschlossen und die neue Zielzelle
markiert werden.
Mit der Eigenschaft MultiSelect des Listenfeldes lassen sich durch Anklicken mehrere Zeilen
im Listenfeld an- und abwählen. Mit der Schaltfläche Kopiere Zeilen (cmdStep3), die die
66 1 Einführung in VBA
auf False und startet eine Programmschleife. Diese wird erst beendet, wenn der Wert der
Booleschen Variablen auf True gesetzt wird. Danach startet eine Do-Loop-Schleife mit
besagtem Abschaltkriterium. Die einzige Anweisung der Schleife ist der Aufruf der DoEvents-
Funktion. Der Rückgabewert ist ein Ganzzahlwert, der die Anzahl geöffneter Formulare in
eigenständigen Versionen von Visual Basic zurückgibt. In VBA jedoch ist dieser Wert immer
eins.
Private Sub cmdStart_Click()
Dim iReturn As Integer
bWarten = False
cmdStart.Caption = "Wait"
Do While Not bWarten
iReturn = DoEvents
Loop
MsgBox "Ende"
End Sub
Die Ende-Schaltfläche cmdEnd setzt die Boolesche Variable auf True und beendet somit die
Endlosschleife.
Private Sub cmdEnd_Click()
bWarten = True
cmdStart.Caption = "Start"
End Sub
Die anderen drei Schaltflächen lösen Aktionen aus. Die erste öffnet eine Notepad-
Anwendung.
Private Sub cmdAktion1_Click()
Shell "Notepad.exe", vbNormalFocus
End Sub
Die zweite Schaltfläche öffnet den Windows-Explorer mit dem Pfad C:\Windows.
Private Sub cmdAktion2_Click()
Shell "Explorer.exe C:\Windows", vbNormalFocus
End Sub
Die dritte Schaltfläche startet das Formular mit dem Listenfeld, diesmal im Modus, so dass
keine anderen Aktionen möglich sind. Erst mit dem Schließen des Formulars kehrt der Focus
zum Arbeitsblatt zurück.
sieht die Angabe des Variant-Parameters Time vor. Dieser kann als Konstante in der Form
HH:MM:SS (Stunden:Minuten:Sekunden) oder als Variablenwert angegeben werden. So
unterbricht die Angabe in einer Prozedur
68 1 Einführung in VBA
Application.Wait 20:15:10
die Durchführung bis zur angegebenen Zeit desselben Tages. Über die aktuelle Systemzeit als
Rückgabewert der Funktion Now, kann eine Wartezeit durch Addition von Wertanteilen
zusammengestellt werden. Eine Wartezeit von 10 Sekunden liefern die Anweisungen:
vHH = Hour(Now())
vMM = Minute(Now())
vSS = Second(Now()) + 10
vWaitTime = TimeSerial(vHH, vMM, vSS)
Application.Wait vWaitTime
Wer lieber eine API-Funktion nutzen möchte, muss die Funktion Sleep deklarieren. Die
nachfolgende Prozedur SleepTest erzeugt im aktuellen Arbeitsblatt in 10 Sekunden je Sekunde
eine aktuelle Zeitausgabe.
Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
Sub SleepTest()
Dim wshTmp As Worksheet
Dim iCount As Integer
Set wshTmp = Worksheets("SleepTest")
wshTmp.Activate
wshTmp.UsedRange.ClearContents
For iCount = 1 To 10
ActiveSheet.Cells(iCount, "A") = Time
Sleep 1000 'sleep 1000 Milliseconds = 1 s
Next iCount
Set wshTmp = Nothing
End Sub
Mit FrühesteZeit wird die Zeit angegeben, zu der die Prozedur ausgeführt werden soll. Die
Angabe SpätesteZeit ist der Zeitraum, den die Steuerung auf die Ausführung der Prozedur
wartet, wenn die Ausführung durch andere Events blockiert ist. Wird diese Zeit nicht
angegeben, wartet die Steuerung bis zur Ausführung der Prozedur. Hat der Zeitplan den Wert
True, dann wird eine neue OnTime-Prozedur ausgeführt. Ist der Wert False, wird die zuvor
festgelegte Prozedur gelöscht.
Schauen wir uns diese Konstruktion in einem Modul modCyclicJob an.
Public bStart As Boolean
Public dStartTime As Date
Die globalen Variablen bStart und dStartTime sind die Steuervariablen des Prozesses. Die
Startprozedur CyclicJobStart setzt die boolesche Variable bStart auf True und startet den
eigentlichen Job; ihn betrachten wir nachfolgend. Mit der Schlussprozedur CyclicJobEnd wird
über die OnTime-Methode der Job gelöscht. Der eigentliche TimeJob befindet sich im
gleichen Modul.
Private Sub CyclicTimeJob()
If bStart = True Then
bStart = False
Else
Load frmTimeJob
frmTimeJob.tbxTime = Time
frmTimeJob.Show vbModal = True
End If
'Hinweis alle 5 Sekunden einblenden
Application.OnTime Now + TimeSerial(0, 0, 5), "CyclicTimeJob"
dStartTime = Now + TimeSerial(0, 0, 5)
End Sub
Die Prozedur ruft sich alle 5 Sekunden selbst auf. Gleichzeit wird das Formular frmTimeJob
(Bild 1-47) aufgerufen.
Bild 1-47
Formular
TimeJob
In deren Aktivierungsprozedur wird die Ausführung für zwei Sekunden angehalten. Doch es
wären nur die Umrisse des Formulars sichtbar, würde die Funktion DoEvents nicht dafür
sorgen, dass auch weitere Ereignisse zum Zuge kommen, wie der Formularaufbau. Nach den 2
Sekunden wird das Formular gelöscht, um dann wieder geladen zu werden.
Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
Private Sub UserForm_Activate()
DoEvents
Sleep 2000
Unload Me
End Sub
Das nachfolgende kleine Testprogramm zeigt die Arbeitsweise der Funktion TypeName. Die
Funktion VarType lässt sich ähnlich anwenden, gibt aber als Rückgabewert einen Schlüssel
zurück. Weitere Informationen darüber finden Sie im Objektkatalog. Die Anwendung der
Funktionen auf eigene Datentypen ist nicht möglich und liefert eine Fehlermeldung.
Sub FindDataType()
Dim vVar1 As Variant
Dim vVar2 As Variant
Dim vVar3 As Variant
vVar1 = 23
vVar2 = "45"
Set vVar3 = ActiveSheet
Debug.Print TypeName(vVar1 + vVar2)
Debug.Print TypeName(vVar1 & vVar2)
Debug.Print TypeName(vVar3)
End Sub
Bild 2-1
Schnittmenge zwischen
Manager und Controller
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_2
72 2 Aufgaben und Ziele
mehr wegzudenken ist, nicht zuletzt wegen der Einfachheit und Bequemlichkeit es zu nutzen.
Und es ist auf fast jedem Rechner installiert. Außerdem ist die Entwicklung von Excel noch
längst nicht abgeschlossen.
Nicht immer muss für den Einsatz von Excel auch gleich VBA eingesetzt werden. In diesem
Buch versuche ich, ein sinnvolles Nebeneinander und auch Miteinander darzustellen.
Stärken-Schwächen-Analyse
GAP-Analyse
Szenario-Analyse
SWOT-Analyse
Wettbewerbs-Analyse
Produktlebenszyklus-Analyse
Portfolio-Analyse
Benchmarking
Target Costing
Balanced Scorecard
Six Sigma
etc.
Bild 2-2
Regelkreis des Controllings
So kann die Zielsetzung im ersten Schritt die Beschaffung von Entscheidungsdaten wie
Marktanalysen, Marktbefragungen, Trendanalysen, Anforderungsanalysen, etc. sein, um
darauf die Zielsetzung der eigentlichen Prozess- oder Projektsteuerung aufzusetzen, die im
Laufe der Zeit durch das Feedback des Controllings verändert oder sogar verworfen werden
kann (Bild 2-3).
Die Planung bestimmt die messbaren Ziele und deren Metriken (Kennzahlen). Sie legt die
Aktivitäten in Bezug auf das Erreichen der Ziele fest (Minimal- und Maximal-Prinzip).
Beispielziele können maximaler Gewinn, minimale Ressourcenverwendung, maximale
Rentabilität, minimaler Produktionsaufwand, etc. sein.
Mit der Durchführung der festgelegten Aktivitäten kommt die Zeit mit ins Spiel und eine
Kontrolle der Annäherung vom Istzustand an das geplante Ziel zu festgelegten Zeitpunkten,
im Projekt auch Meilensteine genannt, oder zu bestimmten Zeitabständen. Die Analysen der
festgelegten Metriken liefern den Beweis und Entscheidungen zur Einflussnahme auf die
geplanten Aktivitäten. Dieser Regelkreis wird bis zur akzeptierten Annährung an das optimale
Ziel oder bis zum Abbruch der Aktivitäten ausgeführt.
74 2 Aufgaben und Ziele
Bild 2-3
Aufgaben des
operativen
Controllings
Das Feedback geschieht in Form aufbereiteter Ergebnisse der Analysen, meist auch in Form
von Diagrammen und wird oft als Report bezeichnet. Beliebt sind auch die sogenannten
Dashboards, die eine Zusammenstellung der wichtigsten Kennzahlen und Diagramme auf
einem Blatt zeigen.
2.2.3 Aufgaben des Prozess-Controllings
Das Prozess-Controlling befasst sich mit der Planung und Kontrolle von Geschäftsprozessen,
einschließlich der Informationsverarbeitung und Koordination. Ziel ist es, die Kosten zu
minimieren und durch Optimierung der Prozesse Ablaufstörungen zu vermeiden. Dabei
werden Methoden des strategischen und operativen Controllings verwendet. Prozess-
Controlling ist also mehr als die Kontrolle von Prozessen (Bild 2-4).
Bild 2-4
Regelkreis des Prozess-
Controllings
Bearbeitungszeit
Durchlaufzeit
Produktivität
Leistungsfaktoren
usw.
2.2.4 Aufgaben des Projekt-Controllings
Den Unterschied zwischen einem Prozess und einem Projekt zeigt anschaulich die Grafik in
Bild 2-5.
Während die Ziele eines Prozesses darin bestehen, die Aufgaben in einem Unternehmen zu
optimieren und damit den Arbeitsplatz zu sichern, sind die Ziele eines Projekts in einer
bestimmten Zeit ein optimales Ergebnis zu erreichen. Die Prozesse werden immer wieder aus
verschiedenen Betrachtungsweisen optimiert, während das Projekt nach einer festgesetzten
Zeit endet oder auch vorzeitig abgebrochen wird.
Das Projekt-Controlling geht über eine reine Betrachtung der finanziellen Belange eines
Projekts weit hinaus und ist verantwortlich für eine stetige und umfassende Erfolgskontrolle.
Es trägt dazu bei
den Kosten- und Zeitrahmen einzuhalten
die Qualität des Projektergebnisses zu sichern
die Projektrisiken zu erkennen und zu minimieren
ein aussagekräftiges Management-Reporting zu erstellen
den Projektfortschritt optimal zu kommunizieren
und vieles andere mehr
Das strategische Projekt-Controlling befasst sich mit der Entscheidung, welche Projekte
durchgeführt werden sollten und sammelt dazu Informationen über Attraktivität,
Abhängigkeit und Ressourceneinsatz. Ebenso ist die Ausrichtung des Projekts, z. B. nach
Gewinnmaximierung oder die Erhöhung der Markanteile von großem Einfluss.
Das operative Projekt-Controlling befasst sich mit der Projektplanung, dem Projektablauf
und greift bei Abweichungen mit erarbeiteten Methoden ein. Das Ziel sind optimale
Arbeitsabläufe und Ressourcennutzung, notfalls mit einer Neuplanung. Die Analysen sind
eine wichtige Hilfe für die Projektleitung.
Neben den bereits beschriebenen Methoden des strategischen und operativen Controllings,
haben sich spezielle Methoden, die auf die Charakteristik des Projekts zugeschnitten sind,
bewährt, wie etwa das V-Modell, PRINCE2 oder agile Methoden.
XCT-02-01_Marktanalyse.xlsm
Zur Vereinfachung sind die Systeme mit Buchstaben benannt. Der Nutzungsanteil wird in die
Klassen intensiv, gelegentlich, selten und nie eingeteilt (Bild 2-6), die auch entsprechende
2.3 Zielbestimmung im Controlling 77
Bereichsnamen erhalten (Tabelle 2-2). Damit bei der Eingabe immer ein Anteil von 100 %
erreicht wird, erhält die Spalte E eine entsprechende Formel.
Bild 2-6
Nutzungseinschätzung
von Systemen
Es ist sehr ratsam, im ersten Schritt aus dem Datenbereich eine Datentabelle mit folgenden
Schritten zu erstellen:
Eine beliebige Zelle im Datenbereich markieren
Unter dem Register Einfügen, in der Gruppe Tabellen die Methode Tabelle wählen
So entsteht ein neues Objekt mit Methoden und Eigenschaften (Bild 2-7).
Bild 2-7
Beispieldaten als
Datentabelle
Erkennbar ist die neue Tabelle auch am neuen Registerblatt Entwurf, das durch Markieren
einer Zelle in der Datentabelle erscheint. Die Datentabelle bekommt automatisch ein
Tabellenformat und die Filterfunktion ist eingeschaltet. Abschließend geben wir der
Datentabelle mit ihrem Register Entwurf in der Gruppe Eigenschaften einen Tabellennamen.
Für dieses Beispiel ist es der Name Daten.
Die Daten werden erst übersichtlich, wenn die Auswertung ein gestapeltes Balkendiagramm
erhält. Dieser Diagrammtyp eignet sich besonders gut zum Vergleich prozentualer Anteile von
Einzelwerten zu deren Summe (Bild 2-8). Wir erstellen es manuell mit folgenden Schritten:
78 2 Aufgaben und Ziele
Bild 2-8
Visualisierung der
Marktanalyse durch ein
gestapeltes
Balkendiagramm
Oft werden Reports auch in Form eine Präsentation vorgestellt. Die nachfolgende Prozedur
erstellt eine neue PowerPoint Präsentation mit zwei neuen Folien, auf denen sich die
Datentabelle und das Diagramm befinden. Sie stammt aus meinem Buch [15], in dem ich auch
Interaktionen per VBA zwischen Office-Applikationen beschreibe.
Die Prozedur ExcelToPowerPoint (Codeliste 2-1) befindet sich in einem Modul und wird im
Excel-Arbeitsblatt Marktanalyse über das Register Ansicht in der Gruppe Makros aufgerufen.
Codeliste 2-1 PowerPoint Präsentation aus Excel erstellen
Sub ExcelToPowerPoint()
Dim exlBook As Excel.Workbook
Dim exlSheet As Excel.Worksheet
Dim pptApp As Object
Dim pptShow As Object
Dim pptSlide As Object
Dim sPath As String
sPath = "C:\Temp\Demo.pptx"
Else
If Dir(sPath) = "" Then
Set pptShow = .Presentations.Add
Else
Set pptShow = .Presentations.Open(sPath, msoFalse)
End If
End If
End With
'Datentabelle übertragen
exlSheet.Range("Daten[#All]").Select
Selection.Copy
pptShow.Application.ActiveWindow.View.Paste
'Chart übertragen
pptSlide.Shapes(1).TextFrame.TextRange = exlSheet.Name
exlSheet.ChartObjects(1).Copy
pptShow.Application.ActiveWindow.View.Paste
Der Name der Präsentation und der Pfad zur Ablage "C:\Temp\Demo.pptx" sind in der
Variablen sPath gespeichert. Nach dem Aufruf der Prozedur befindet sich die Präsentation am
vorgegebenen Ort und kann geändert und erweitert werden. Vor dem Aufruf sollte der Ordner
C:\Temp existieren oder neu angelegt werden.
2.3.2 Die Marktbefragung
Marktbefragungen sind ein wichtiger Teil einer Marktanalyse. Sie variieren in Umfang,
Motivation und Ausrichtung und werden in der Regel in folgenden Schritten durchgeführt:
80 2 Aufgaben und Ziele
XCT-02-02_Marktbefragung.xlsm
Dazu wurden Argumente für oder gegen die Verwendung ausgewählt und die Befragung in
zwei verschiedenen Regionen durchgeführt. Das Ergebnis präsentiert ein Excel-Arbeitsblatt
mit zwei Datentabellen, die die Namen Vorteile und Nachteile erhalten (Bild 2-9).
Zur Visualisierung verwenden wir den Diagrammtyp Linie mit Datenpunkten, der sich
besonders zum Vergleich von zwei und mehr Wertepaaren eignet (Bild 2-10).
Diesmal wollen wir die Übergabe der Analyse zu einem Report in Word betrachten. Dazu
verwenden wir die Prozedur ReportInWord (Codeliste 2-2).
2.3 Zielbestimmung im Controlling 81
Damit die Zuordnung zwischen Datentabelle und Diagramm stimmt, muss zuerst das
Diagramm mit den Vorteilen erstellt werden. Um dies zu gewährleisten, erstellen wir die
Diagramme mit der Prozedur CreateDiagrams (Codeliste 2-3).
Codeliste 2-3 Word Report aus Excel erstellen
Sub CreateDiagrams()
Dim exlBook As Workbook
Dim exlSheet As Worksheet
Dim exlList As ListObject
Dim exlShape As Shape
Dim exlChart As Chart
Dim iCount As Integer
'Diagramme erstellen
iCount = 0
For Each exlList In exlSheet.ListObjects
exlList.Range.Select
Set exlShape = exlSheet.Shapes.AddChart2 _
(342, xlLineMarkers)
Set exlChart = exlShape.Chart
exlChart.SetSourceData Source:=exlList.Range
exlChart.ChartTitle.Select
exlChart.ChartTitle.Text = exlList.Name
exlChart.Axes(xlCategory).Select
Selection.TickLabels.Orientation = xlUpward
iCount = iCount + 1
exlShape.Top = 150
exlShape.Left = 10 + (iCount - 1) * 310
exlShape.Width = 300
Set exlChart = Nothing
Set exlShape = Nothing
Next
2.3.3 Trendanalyse
Eine Trendanalyse spiegelt die Entwicklung des Marktes wieder. Aber auch bei internen
Prozessen kann sie hilfreich sein. Sie funktioniert nach mathematischen Regeln und schließt
von historischen Daten auf zukünftige Ergebnisse unter der Annahme, dass keine
unvorhersehbaren Veränderungen auftreten. Als Anwendungsbeispiel betrachten wir die
Umsätze zweier Produkte und stellen uns die Frage, welche Entwicklung die Produkte
voraussichtlich nehmen werden.
XCT_02-03_Trendberechnung.xlsm
2.3 Zielbestimmung im Controlling 83
Die erwarteten Umsätze für das zweite Halbjahr lassen sich ganz einfach ohne Formeln
bestimmen:
den Bereich Daten markieren
mit dem unteren rechten Ziehpunkt die Markierung auf den Bereich B3:M4
ausweiten
Dadurch ermittelt Excel eine lineare Regressionsgerade nach der Methode der kleinsten
Fehlerquadrate und bestimmt daraus die Werte der restlichen Monate (Bild 2-12).
Zur Visualisierung verwenden wir noch einmal den Diagrammtyp Linie mit Datenpunkten
(Bild 2-13).
Bild 2-13
Visualisierung der
Trendanalyse
Mit einem Klick auf eine Datenlinie und den Aufruf des Kontextmenüs kann die Trendlinie,
die ja Berechnungsgrundlage für die Vorhersagewerte war, eingeblendet werden. Sie wird mit
der Option linear dargestellt und kann auf andere Optionen umgestellt werden. Ebenso kann
die Geradengleichung der Trendlinie angezeigt werden. Zur Unterscheidung habe ich die
Trendlinie punktiert dargestellt (Bild 2-14).
84 2 Aufgaben und Ziele
Bild 2-14
Diagramm mit
Trendlinien
Dass die Werte der realisierten und erwarteten Umsätze hintereinander liegen, ist ein Idealfall,
denn oft liegen die Bereiche getrennt. Auch wenn die Datenlinien unterschiedlich dargestellt
werden sollen, muss eine Trennung vorgenommen werden. Dann können die Trendwerte nicht
mehr durch Ziehen der Markierung bestimmt werden. Hier kommt die Funktion TREND zur
Anwendung.
Syntax zur TREND-Funktion:
=TREND(Y_Werte;X_Werte;Neue_X_Werte;Konstante)
Die Konstante ist ein Wahrheitswert der angibt, ob die Konstante b in Gleichung (2.1) gleich
null gesetzt werden soll.
Die statistische Funktion TREND ermittelt, basierend auf vorhandene Werte, zukünftige
Werte als linearen Trend. Im Gegensatz zur Auffüllfunktion kann mit der Funktion TREND
ein Wert für eine beliebige Periode (z. B. für einen Monat) berechnet werden und nicht nur für
die direkt folgenden Perioden. Um einen linearen Trendwert zu ermitteln, ordnet Excel die
jeweiligen Daten auf einer Geraden (Bild 2-15) an, die sich aus der Gleichung
y=m·x+b (2.1)
ergeben.
Bild 2-15
Lage der linearen
Trendlinie
Eine mögliche Anordnung der Daten zur Trendbestimmung zeigt Bild 2-16.
2.3 Zielbestimmung im Controlling 85
Dort sind die Umsätze von real bis erwartet in Zeilen untereinander angeordnet. Dadurch
lassen sich im nächsten Diagramm die Funktionsverläufe zwischen realen und erwarteten
Umsätzen trennen.
Tabelle 2-3 Bereichsnamen und Formeln für die Trendanalyse
Zur Generierung eines Diagramms vom Typ Linie mit Datenpunkten wird zuerst der Bereich
B3:M6 markiert und dann unter Einfügen der Diagrammtyp ausgewählt. Formatvorlage,
Diagrammtitel und der Name der Datenreihen werden angepasst (Bild 2-17).
Bild 2-17
Trendanalyse mit
zusammengesetzten
Datenreihen
Weil in Planungen stets Aussagen über die Zukunft getroffen werden, können und werden
diese Prognosen ungenau sein. Diese Unsicherheiten lassen sich durch Fehlerindikatoren in
einem Diagramm verdeutlichen. Fehlerindikatoren werden grafisch durch Balken dargestellt.
Sie können den Unsicherheitsgrad oder mögliche Abweichungen in Bezug auf jede
Datenpunktmarkierung in einer Reihe ausdrücken. Die angenommenen Schwankungen
werden zu den Daten hinzugefügt (Bild 2-18).
86 2 Aufgaben und Ziele
Bild 2-19
Trendanalyse mit
Fehlerindikatoren
Neben der TREND-Funktion gibt es noch zwei weitere Funktionen, die sich für eine
Trendanalyse eignen.
Syntax zur SCHÄTZER-Funktion:
=SCHÄTZER(x;Y_Werte;X_Werte)
Diese Funktion bestimmt einen linearen Trend und ist noch aus Kompatibilitätsgründen für
Excel-Versionen 2013 und früher verfügbar.
2.3 Zielbestimmung im Controlling 87
XCT_02-04_Forecast.xlsm
Als Beispiel für eine Anwendung betrachten wir die Umsätze eines Unternehmens (Bild 2-20).
Gegeben sind die Planwerte des aktuellen Jahres und die bekannten Istwerte des Halbjahres.
Zu bestimmen ist der Forecast mit allen bekannten Berechnungsmöglichkeiten.
Bild 2-20
Beispiel zur
Bestimmung
des Forecasts
Die Spalte Übertrag wird durch markieren der bekannten Istwerte (grün) und ziehen der
Markierung gefüllt. In der Zeile Gesamt stehen alle Summenwerte.
Tabelle 2-4 Bereichsnamen und Formeln für die Bestimmung des Forecasts
XCT_02-05_Wertschoepfungskette.xlsm
Als Anwendungsbeispiel dient die Darstellung der Datenvermarktung, die mit Tätigkeiten und
Kosten (Bild 2-21) vorgegeben ist.
Bild 2-21
Beispiel
Datenvermarktung
Zur Visualisierung bietet sich unter dem Register Einfügen in der Gruppe Illustrationen eine
vorgegebene Form, hier das Pentagon, an. Die Prozedur CreateWertkette dazu ist schnell
geschrieben (Codeliste 2-4) und das Ergebnis zeigt Bild 2-22.
Codeliste 2-4 Erstellung eines Wertschöpfungsketten-Diagramms
Sub CreateWertkette()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim iRow As Integer
Dim lLeft As Long
Dim lTop As Long
Dim lWidth As Long
Dim lHeight As Long
Dim lPosX As Long
.Shadow.Type = msoShadow21
End With
Set shpTemp = Nothing
Next iRow
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
2.3.5 Machbarkeitsstudie
Mit einer Machbarkeitsstudie lassen sich verschiedene Lösungswege zur Erreichbarkeit von
Zielen überprüfen. Im Rahmen einer Machbarkeitsstudie werden:
Lösungswege analysiert
Risiken identifiziert
Erfolgsaussichten abgeschätzt
Eine ideale Darstellung von Einflussparametern ist das Blasendiagramm. Dieser Diagrammtyp
kommt besonders bei der Darstellung von Portfolios zum Einsatz. Mit einem Produkt-
Portfolio können beispielsweise Ist- und Trendwerte einer Gruppe von Produkten
übersichtlich gegenübergestellt werden oder im Benchmarking mit anderen Wettbewerbern.
Von Vorteil ist auch, dass sowohl quantitative wie auch qualitative Parameter zugleich
dargestellt werden können.
XCT_02-06_Machbarkeitsstudie.xlsm
Bild 2-23
Erfolgs- und Risiko-
Parameter
verschiedener
Lösungswege
Das Blasendiagramm, eine Variante des XY-Diagramms, eignet sich besonders zur
Darstellung von Zusammenhängen, Wechselwirkungen und Entwicklungen zwischen
Wertepaaren. Im Gegensatz zum XY-Diagramm werden die Datenpunkte durch Blasen
90 2 Aufgaben und Ziele
ersetzt, deren Größe eine zusätzliche Dimension erlauben. Im Beispiel bestimmen die Kosten
die Größe der Blasen (Bild 2-24).
Bild 2-24
Blasendiagramm zur
Machbarkeitsstudie
Ein Blasendiagramm ist in VBA mit einfachen Mittel zu erstellen, wenn zunächst die
manuelle Erstellung mit einem Makro aufgezeichnet wird. Aus diesem Code lässt sich dann
sehr schnell eine solide Prozedur ableiten (Codeliste 2-5).
Codeliste 2-5 Blasendiagramm erstellen
Sub CreateBlasendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
.HasLegend = False
'Datenbeschriftung
.ApplyDataLabels
.FullSeriesCollection(1).DataLabels.Select
Selection.Format.TextFrame2. _
TextRange.InsertChartField msoChartFieldRange, _
"=Machbarkeitsstudie!$A$2:$A$6", 0
Selection.ShowRange = True
Selection.ShowValue = False
Selection.Position = xlLabelPositionCenter
'Style
.ClearToMatchStyle
.ChartStyle = 343
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
2.3.6 Zielgewichtung
Controlling-Ziele decken sich mit Prozess- und Projektzielen. Gibt es mehrere Ziele oder lässt
sich ein Ziel in Teilziele aufteilen, so ist deren Wichtigkeit eine Größe zur Ausrichtung des
Lösungsweges. Eine Methode zur Beurteilung der Wichtigkeit von Zielen ist das
Zielgewichtungsverfahren. Sein Vorteil ist der einfache Aufbau und die Nachvollziehbarkeit
der Gewichtung. Bei vielen Zielen geht die Übersichtlichkeit jedoch verloren.
XCT_02-07_Zielgewichtung.xlsm
Nachfolgend betrachten wir als Anwendungsbeispiel eine einfache Methode. In einer Tabelle
(Bild 2-25) sind die Ziele untereinander aufgeführt. Von den beiden Zielen, die jeweils
untereinanderstehen stehen, wird das als wichtiger eingestufte mit seiner Zielnummer in die
erste Spalte (hier D) der Wichtung eingetragen.
Bild 2-25
Schema einer
Zielgewichtung
Ist so die erste Spalte der Wichtung gefüllt, werden in der nächsten Spalte (hier E) die Ziele
miteinander verglichen. Dann wird wieder das als wichtigeres eingestufte Ziel mit seiner
Zielnummer eingetragen. Dies wird so lange wiederholt, bis nur noch eine Zielnummer in der
92 2 Aufgaben und Ziele
letzten Spalte der Wichtung steht. Anschließend wird die Häufigkeit der Zielnummern mit der
Funktion ZÄHLENWENN bestimmt und in die Spalte Anteil eingetragen. Die Anteile sind
dann ein Maß für die Wichtigkeit der Ziele.
Tabelle 2-5 Bereichsnamen und Formeln für die Zielgewichtung
In diesem Fall verwenden wir ein Kreisdiagramm (Bild 2-26), mit dem sich sehr gut die
Anteile eines Ganzen darstellen lassen. Die Werte werden in Prozent-Anteile ausgedrückt.
Bild 2-26
Kreisdiagramm zur
Zielgewichtung
.SetElement (msoElementDataLabelOutSideEnd)
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Ziele und ihre Bedeutung"
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
'Legende
.SetElement (msoElementLegendRight)
.FullSeriesCollection(1).XValues = _
"=Zielgewichtung!$C$2:$C$10"
.FullSeriesCollection(1).DataLabels.ShowPercentage = True
.FullSeriesCollection(1).DataLabels.ShowValue = False
'Größe
shpTemp.ScaleWidth 1.04, msoFalse, msoScaleFromTopLeft
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Abschließend wollen wir das Formular noch mit ein wenig Funktionalität versehen. Die Idee
ist, dass immer dann, wenn ein Anteil in der Spalte B markiert wird, die entsprechenden
Zellen in der Wichtung eine gelbe Farbe bekommen sollen. Die entsprechende
Ereignisprozedur im Tabellenblatt Zielgewichtung lautet Worksheet_SelectionChange
(Codeliste 2-7).
Codeliste 2-7 Ereignisprozedur Worksheet_SelectionChange
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And _
Target.Row > 1 And _
Target.Row < 11 Then
Cells(1, 12) = Cells(Target.Row, 1)
Else
Cells(1, 12) = ""
End If
End Sub
Immer wenn eine Zelle im Bereich von Anteil markiert wird, dann wird die Zielnummer in die
Zelle L1 geschrieben. Damit der Wert dort nicht zu sehen ist, bekommt die Zelle L1 das
benutzerdefinierte Format ;; (nur zwei Semikolons).
Es fehlt noch die benutzerdefinierte Formatierung (Tabelle 2-6), die den Wert in Zelle L1
nutzt.
Tabelle 2-6 Benutzerdefinierte Formatierung zur Zielgewichtung
Die Markierung einer Zelle wird nun deutlich angezeigt. Gleichzeitig können wir noch eine
Userform frmAnzeige einblenden mit einer Textbox, in der mit großer Schrift (Schriftgrad 36)
der Prozentsatz des ausgewählten Anteils 3 Sekunden lang angezeigt wird. Die Kopfzeile der
UserForm enthält die Zielbeschreibung (Bild 2-27).
94 2 Aufgaben und Ziele
Bild 2-27
Anzeige eines Anteils
in einem Formular
Entsprechend müssen wir die Ereignisprozedur (Codeliste 2-8) anpassen und die Funktio-
nalität der UserForm (Codeliste 2-9) erstellen.
Codeliste 2-8 Ereignisprozedur Worksheet_SelectionChange
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And _
Target.Row > 1 And _
Target.Row < 11 Then
Cells(1, 12) = Cells(Target.Row, 1)
Load frmAnzeige
frmAnzeige.Caption = Cells(Target.Row, 3)
frmAnzeige.tbxAnzeige = _
Format(Target.Value / WorksheetFunction.Sum([Anteil]), _
"#0.0 %")
frmAnzeige.Show
Else
Cells(1, 12) = ""
Unload frmAnzeige
End If
End Sub
2.3.7 Pareto-Prinzip
Mitunter müssen nicht alle Ziele gleichzeitig erreicht werden, sondern entsprechend einem
Kosten-Nutzen-Ranking nacheinander einzeln oder in Gruppen. Bei dieser Betrachtung kann
es auch vorkommen, dass Ziele mit hohen Kosten und geringem Nutzen aufgegeben werden.
Zu dieser Betrachtung wird gerne das Pareto-Prinzip verwendet. Die Methode stammt von
dem italienischen Ingenieur Vilfredo Pareto aus seiner Erfahrung, dass in der Regel 80 % der
Ergebnisse mit 20 % des Gesamtaufwandes erreicht werden können. Im Umkehrschluss
werden für die verbleibenden 20 % der Ergebnisse dann 80 % des Gesamtaufwandes auf-
gebracht. Das Prinzip wird auch oft als 80-20-Regel bezeichnet. Seit der Office Version 2016
gibt es das Pareto-Diagramm.
2.3 Zielbestimmung im Controlling 95
XCT_02-08_ParetoPrinzip.xlsm
Als Anwendungsbeispiel betrachten wir noch einmal eine Tabelle mit Zielen und ihre
Einschätzung von Kosten und Nutzen untereinander (Bild 2-28).
Bild 2-28
Ziele im
Kosten-Nutzen-Vergleich
Bei diesem Beispiel ist von vornherein zu überlegen, ob die Ziele C und G erforderlich sind,
da ihr Kosten/Nutzen-Faktor bei 36/6 liegt. Zur Visualisierung kommt nun das Pareto-
Diagramm zum Einsatz, das sich unter den Statistikdiagrammen befindet (Bild 2-29).
Bild 2-29
Pareto-Diagramm:
Ziele und Kosten
Mit dem Diagramm wird auch gleichzeitig eine Sortierung der Ziele nach Kostenhöhe
durchgeführt. Ein linearer Funktionsverlauf mit einer Sekundärachse zeigt die kumulierten
Kosten in Prozent. Danach erfordern die Ziele C, E und G bis zu 80 % der Kosten. Auch für
diesen Diagrammtyp schreiben wir eine Prozedur (Codeliste 2-10).
Codeliste 2-10 Pareto-Diagramm erstellen
Sub CreateParetodiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngDaten As Range
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim sDaten As String
Dim iCount As Integer
Dim sTitel As String
Unsere Beispieltabelle enthält auch noch eine Nutzen-Spalte. Damit diese zur Auswertung
kommt, müssen die Spalten B und C vertauscht werden. Auch dies bewerkstelligen wir mit
einer VBA-Prozedur mit dem Namen TauscheBmitC (Codeliste 2-11).
Codeliste 2-11 Tausch der Spalten B und C
Sub TauscheBmitC()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Nach dem Tausch der Spalten wird die Prozedur zur Generierung des Pareto-Diagramms
erneut aufgerufen (Bild 2-30).
Bild 2-30
Pareto-Diagramm:
Ziele und Nutzen
Bild 2-31
Gruppiertes
Säulendiagramm:
Ziele mit Nutzen
und Kosten
Bild 2-32
Getrennte
Säulendiagramme:
Ziele mit Nutzen und
Ziele mit Kosten
98 2 Aufgaben und Ziele
Bild 2-33
Das Magische
Dreieck
Unklare Ziele sind der Grund, weshalb Prozesse und Projekte scheitern. Es gibt verschiedene
Verfahren die dabei helfen, erreichbare Ziele zu definieren. Eine davon ist die SMART-
Methode. Sie bietet Hilfestellung bei der Zielbeschreibung. SMART ist ein Akronym für
spezifisch, messbar, akzeptiert, realistisch und terminiert (Bild 2-34).
XCT_02-09_Zieldefinitionen.xlsm
Bild 2-34
SMART-Methode
Nicht alle Ziele sind gleich wichtig, so dass nach der Definition der Ziele eine Priorisierung
erfolgen sollte (Bild 2-35).
2.3 Zielbestimmung im Controlling 99
Bild 2-35
Zielarten
Nutzen Sie die Tabellen, um sie an die Gegebenheiten Ihrer Prozesse und Projekte
anzupassen. Dadurch werden Sie effektiver in der Zielbestimmung.
Betrachten wir nun ein Anwendungsbeispiel zur Zielarten-Klassifizierung (Bild 2-36).
Bild 2-36
Zielarten-
Klassifizierung
Neben der Zielartangabe zu den Zielen, werden die Positionen im Magischen Dreieck
angegeben (Bild 2-33). So bedeutet die Angabe 75 % in der Spalte „Zeit / Kosten“, dass die
Zielausrichtung zu ¾ bei den Kosten liegt.
Zur Visualisierung eignet sich auch hier das gruppierte Säulendiagramm (Bild 2-37).
Bild 2-37
Zielarten-
Klassifizierung
im gruppierten
Säulendiagramm
100 2 Aufgaben und Ziele
An den Säulenhöhen lässt sich direkt ablesen, welche Ausrichtung das jeweilige Ziel hat. Die
entsprechende Prozedur zur Generierung des gruppierten Säulendiagramms (Codeliste 2-12)
besteht aus wenigen Anweisungen, da mit der Instanziierung der Chart der Endzustand bereits
erreicht ist.
Codeliste 2-12 Gruppiertes Säulendiagramm erstellen
Sub CreateGruppendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Wir wollen aber noch einen anderen Diagrammtyp betrachten und verwenden diesmal das
Netzdiagramm (Bild 2-38).
Bild 2-38
Zielparameter
im
Netzdiagramm
2.3 Zielbestimmung im Controlling 101
Es bildet die Beziehungen von Faktoren besonders gut ab. Ein weiteres Anwendungsbeispiel
für Netzdiagramme ist die Erstellung von Profilen, da sich durch die Art der Darstellungen die
Ziele gut vergleichen lassen.
Codeliste 2-13 Netzdiagramm erstellen
Sub CreateNetzdiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Abschließend soll noch die Wechselwirkung von Zielen angesprochen werden. In Bild 2-39
sind die verschiedenen Beziehungen und ihre Auswirkungen aufgeführt.
Bild 2-39
Wechselwirkung von
Zielen
2.3.9 Produkt-Lebenszyklus
Der Lebenszyklus eines Produkts unterteilt sich in fünf Phasen (Bild 2-40). Die Analyse dazu
befasst sich mit den Märkten und Technologien und dient mit zur Zielausrichtung eines
Unternehmens und ist somit auch wichtig für die strategische und operative Planung.
XCT_02-10_Lebenszyklus.xlsm
102 2 Aufgaben und Ziele
Bild 2-40
Lebenszyklus
eines
Produkts
Durch einen Klick auf die Fläche A, B, C, D oder E werden die Daten im Diagramm
dargestellt. Gesteuert wird dies durch die Ereignisprozedur SelectionChange (Codeliste 2-14).
Codeliste 2-14 Ereignisprozedur Worksheet_SelectionChange
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim chrTemp As Chart
Set chrTemp = ActiveSheet.ChartObjects(1).Chart
With chrTemp
Select Case Target.Address
Case "$A$2:$A$3"
.FullSeriesCollection(1).Values = "=Tabelle1!$C$2:$G$2"
.FullSeriesCollection(2).Values = "=Tabelle1!$C$3:$G$3"
.ChartTitle.Text = "Produkt A"
Case "$A$4:$A$5"
.FullSeriesCollection(1).Values = "=Tabelle1!$C$4:$G$4"
.FullSeriesCollection(2).Values = "=Tabelle1!$C$5:$G$5"
.ChartTitle.Text = "Produkt B"
Case "$A$6:$A$7"
.FullSeriesCollection(1).Values = "=Tabelle1!$C$6:$G$6"
.FullSeriesCollection(2).Values = "=Tabelle1!$C$7:$G$7"
.ChartTitle.Text = "Produkt C"
Case "$A$8:$A$9"
.FullSeriesCollection(1).Values = "=Tabelle1!$C$8:$G$8"
.FullSeriesCollection(2).Values = "=Tabelle1!$C$9:$G$9"
.ChartTitle.Text = "Produkt D"
Case "$A$10:$A$11"
.FullSeriesCollection(1).Values = "=Tabelle1!$C$10:$G$10"
.FullSeriesCollection(2).Values = "=Tabelle1!$C$11:$G$11"
.ChartTitle.Text = "Produkt E"
' Case Else
End Select
End With
Set chrTemp = Nothing
End Sub
103
3 Wichtige Funktionen
Viele Anwender machen keinen Unterschied zwischen Formeln und Funktionen. Dabei ist der
Unterschied elementar. Excel bietet dem Anwender keine fertigen Formeln, sondern nur
Funktionen für einen ganz bestimmten Zweck. Funktionen bestehen aus einem Wort und
besitzen immer eine öffnende und danach eine schließende Klammer. In den Klammern
können Parameter aufgeführt werden, die dann durch ein Semikolon getrennt werden,
entsprechend der angegebenen Syntax. Funktionen, auch mehrere, können in einer Formel
angewendet werden. Mitunter führen verschiedene Funktionen zum gleichen Ergebnis.
XCT_03-01_Funktionen.xlsm
Aus der Fülle der Funktionen, die Excel mit der Installation anbietet, betrachten wir
nachfolgend die, die für das Controlling von Bedeutung sind.
3.1 Grundfunktionen
Hier werden die wichtigsten Grundfunktionen beschrieben.
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_3
104 3 Wichtige Funktionen
Bild 3-1
Umsätze
verschiedener
Warengruppen
Als sogenanntes „Helferchen“ steht im Modul modDelete eine Prozedur zur Löschung aller
Bereichsnamen in der aktuellen Arbeitsmappe.
Bild 3-2
Verkaufsumsätze
Bild 3-3
Gebietsumsätze
3.1 Grundfunktionen 107
Hierzu markiert er alle Umsätze in der Spalte Bemerkung mit dem Wort "gefunden". Im
Anschluss wird mit Hilfe der SUMMEWENN-Funktion der Gesamtumsatz errechnet.
Bild 3-4
Warengruppenumsätze
Die Werte für "Monat als Zahl" und "WG-Position" könnten zum Beispiel die Linked Cell
eines Dropdown-Steuerfeldes sein. Um dieses Steuerelement zu nutzen, gehen wir wie folgt
vor:
Im Register Entwicklertools in der Gruppe Steuerelemente die Methode Einfügen
wählen
In der Auswahlliste von ActiveX-Steuerelementen das Drehfeld anklicken
Der Mauszeiger wird ein Fadenkreuz, mit dem wir die Größe des Drehfeldes auf dem
Arbeitsblatt ziehen können (Bild 3-5).
Bild 3-5
Drehfeld im Arbeitsblatt
BEREICH.VERSCHIEBEN
Bild 3-6
Produktmengen mit
MIN
Sub FormelnSchreiben()
Range("B16").FormulaR1C1 = "=MIN(Mengen)"
Range("B17").FormulaR1C1 = "=MIN(Produkt1,Produkt3)"
Range("B18").FormulaArray = "=MIN(IF(Mengen>300,Mengen))"
End Sub
Sub WerteZuweisen()
Range("B16") = Evaluate("=MIN(Mengen)")
Range("B17") = Evaluate("=MIN(Produkt1,Produkt3)")
Range("B18") = Evaluate("=MIN(IF(Mengen > 300,Mengen))")
End Sub
Bild 3-7
Produktmengen
mit MAX
112 3 Wichtige Funktionen
3.2 Summenfunktionen
Tabelle 3-8 Liste der wichtigsten Summenfunktionen
Bild 3-8
Warengruppenumsätze
Sub FormelnSchreiben()
Range("B6").FormulaR1C1 = "=SUM(Januar)"
End Sub
Sub WerteZuweisen()
Range("B6") = Evaluate("=SUM(Januar)")
End Sub
Bild 3-9
Kundenumsätze
Sub FormelnSchreiben()
Range("B10").FormulaR1C1 = "=SUMIF(Auftraggeber,Kunde,Umsatz)"
Range("B11").FormulaR1C1 = "=SUMIF(Umsatz,""<13500"")"
End Sub
Sub WerteZuweisen()
Range("B10") = Evaluate("=SUMIF(Auftraggeber,Kunde,Umsatz)")
Range("B11") = Evaluate("=SUMIF(Umsatz,""<13500"")")
End Sub
Bild 3-10
Kunden-
Jahresumsätze
With ActiveWorkbook.Names
.Add Name:="Kunde", RefersTo:=Range("A2:A9")
.Add Name:="Land", RefersTo:=Range("B2:B9")
.Add Name:="Jahresumsatz", RefersTo:=Range("D2:D9")
.Add Name:="Kunde1", RefersTo:=Range("B13")
.Add Name:="Land1", RefersTo:=Range("B14")
End With
End Sub
Sub FormelnSchreiben()
Range("B15").FormulaR1C1 = _
"=SUMIFS(Jahresumsatz,Kunde,Kunde1,Land,Land1)"
End Sub
Sub WerteZuweisen()
Range("B15") = _
Evaluate("=SUMIFS(Jahresumsatz,Kunde,Kunde1,Land,Land1)")
End Sub
116 3 Wichtige Funktionen
Bild 3-11
Kunden-
Jahresumsätze
3.3 Suchfunktionen
Tabelle 3-13 Liste der wichtigsten Suchfunktionen
Bild 3-12
Umsatz
Warengruppen
118 3 Wichtige Funktionen
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = _
"=LOOKUP(Warengruppe1,Warengruppe,Januar)"
Range("B15").FormulaR1C1 = _
"=LOOKUP(Warengruppe2,Matrix)"
End Sub
Sub WerteZuweisen()
Range("B11") = _
Evaluate("=LOOKUP(Warengruppe1,Warengruppe,Januar)")
Range("B15") = _
Evaluate("=LOOKUP(Warengruppe2,Matrix)")
End Sub
Bild 3-13
Umsatz
Warengruppen
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = _
"=VLOOKUP(Warengruppe,Matrix,Monat+1,FALSE)"
End Sub
Sub WerteZuweisen()
Range("B11") = _
Evaluate("=VLOOKUP(Warengruppe,Matrix,Monat+1,FALSE)")
End Sub
Bild 3-14
Umsatz
Warengruppen
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = _
"=HLOOKUP(Warengruppe,Matrix,Monat+1,FALSE)"
End Sub
Sub WerteZuweisen()
Range("B11") = _
Evaluate("=HLOOKUP(Warengruppe,Matrix,Monat+1,FALSE)")
End Sub
findet, um damit über die INDEX-Funktion den Wert auszulesen, die nachfolgend noch
beschrieben wird.
Bild 3-15
Umsatz
Warengruppen
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=MATCH(Monat,Monate,0)"
Range("B12").FormulaR1C1 = "=MATCH(Warengruppe,Warengruppen,0)"
Range("B13").FormulaR1C1 = "=INDEX(Matrix,ZeileW,SpalteM)"
End Sub
Sub WerteZuweisen()
Range("B11") = Evaluate("=MATCH(Monat,Monate,0)")
Range("B12") = Evaluate("=MATCH(Warengruppe,Warengruppen,0)")
Range("B13") = Evaluate("=INDEX(Matrix,ZeileW,SpalteM)")
End Sub
Bild 3-16
Warengruppenumsatz
3.3 Suchfunktionen 123
In der ersten Aufgabe enthält die Prozedur FormelnSchreiben die Funktion COLUMN. Das
geht, weil in der Ergebnismatrix jede Zelle die Formel und damit auch ihre Auswertung erhält.
Anders ist es in der Prozedur WerteZuweisen, da bekäme jede Zelle den ersten Wert, weil für
eine Matrix immer die Zelle oben-links als Referenzzelle dient (siehe auch bedingte
Formatierung). Daher muss hier eine For-Next-Anweisung aushelfen.
Sub FormelnSchreiben()
Range("A12:D12").FormulaR1C1 = "=INDEX(Matrix,COLUMN(),Monat+1)"
End Sub
Sub WerteZuweisen()
Dim sCell As String
Dim iCol As Integer
For iCol = 1 To 4
sCell = Chr(64 + iCol) & "12"
Range(sCell) = Evaluate("=INDEX(Matrix," _
& Trim(Str(iCol)) & ",Monat+1)")
Next iCol
End Sub
Bei der zweiten Aufgabe liegen zwei Tabellen vor (Bild 3-17). Da es sich um Datentabellen
handelt, können ihnen auch Tabellennamen gegeben werden.
Nach der Erstellung der Datentabellen besitzen diese ein eigenes Register Entwurf, das immer
dann erscheint, wenn eine Tabelle ausgewählt wird. Im Register Entwurf unter der Gruppe
Eigenschaften befindet sich ein bei der Erstellung vom System vergebener Tabellenname. Wir
ändern diese Namen ab in ErlöseTabelle bzw. KostenTabelle.
124 3 Wichtige Funktionen
Bild 3-17
Gewinnanalyse
With ActiveWorkbook.Names
.Add Name:="Monatszahl", RefersTo:=Range("B14")
.Add Name:="Produktnummer", RefersTo:=Range("B15")
.Add Name:="Erlöse", RefersTo:=Range("B17")
.Add Name:="Kosten", RefersTo:=Range("B18")
End With
End Sub
Sub FormelnSchreiben()
Range("B17").FormulaR1C1 = _
"=INDEX(ErlöseTabelle,Produktnummer,Monatszahl+1,1)"
Range("B18").FormulaR1C1 = _
"=INDEX(KostenTabelle,Produktnummer,Monatszahl+1,1)"
Range("B19").FormulaR1C1 = "=Erlöse-Kosten"
End Sub
3.3 Suchfunktionen 125
Sub WerteZuweisen()
Range("B17") = _
Evaluate("=INDEX(ErlöseTabelle,Produktnummer,Monatszahl+1,1)")
Range("B18") = _
Evaluate("=INDEX(KostenTabelle,Produktnummer,Monatszahl+1,1)")
Range("B19") = _
Evaluate("=Erlöse-Kosten")
End Sub
Bild 3-18
Umsatzanalyse
Top3
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=LARGE(Matrix,1)"
Range("B12").FormulaR1C1 = "=LARGE(Matrix,2)"
Range("B13").FormulaR1C1 = "=LARGE(Matrix,3)"
Range("B14").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
End Sub
Sub WerteZuweisen()
Range("B11") = Evaluate("=LARGE(Matrix,1)")
Range("B12") = Evaluate("=LARGE(Matrix,2)")
Range("B13") = Evaluate("=LARGE(Matrix,3)")
Range("B14") = Evaluate("=SUM(B11:B13)")
End Sub
Bild 3-19
Umsatzanalyse
Down3
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=SMALL(Matrix,1)"
Range("B12").FormulaR1C1 = "=SMALL(Matrix,2)"
Range("B13").FormulaR1C1 = "=SMALL(Matrix,3)"
Range("B14").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
End Sub
Sub WerteZuweisen()
Range("B11") = Evaluate("=SMALL(Matrix,1)")
Range("B12") = Evaluate("=SMALL(Matrix,2)")
Range("B13") = Evaluate("=SMALL(Matrix,3)")
Range("B14") = Evaluate("=SUM(B11:B13)")
End Sub
3.4 Datumsfunktionen
Tabelle 3-22 Liste der wichtigsten Datumsfunktionen
Bild 3-20
Umsatzbericht
Sub FormelnSchreiben()
Range("D2:D7").FormulaR1C1 = "=YEAR(Datum)"
Range("E2:E7").FormulaR1C1 = "=MONTH(Datum)"
Range("F2:F7").FormulaR1C1 = "=DAY(Datum)"
Range("G2:G7").FormulaR1C1 = "=Datum"
Range("G2:G7").NumberFormat = "ddd* dd/mm/yyyy"
End Sub
Sub WerteZuweisen()
Range("D2:D7") = Evaluate("=YEAR(Datum)")
Range("E2:E7") = Evaluate("=MONTH(Datum)")
Range("F2:F7") = Evaluate("=DAY(Datum)")
Range("A2:A7").Copy
Range("G2:G7").PasteSpecial (xlPasteValues)
Range("G2:G7").NumberFormat = "ddd* dd/mm/yyyy"
End Sub
3.4 Datumsfunktionen 129
Bild 3-21
Auftragsliste
Sub FormelnSchreiben()
Range("F2:F5").FormulaR1C1 = "=Wert*(1-Skonto)"
Range("G2:G5").FormulaR1C1 = _
"=DATE(YEAR(Datum),MONTH(Datum), DAY(Datum)+Dauer)"
End Sub
Sub WerteZuweisen()
Range("F2:F5") = Evaluate("=Wert*(1-Skonto)")
Range("G2:G5") = _
Evaluate("=DATE(YEAR(Datum),MONTH(Datum), DAY(Datum)+Dauer)")
End Sub
130 3 Wichtige Funktionen
Bild 3-22
Auftragsliste
Sub FormelnSchreiben()
Range("D2:D7").FormulaR1C1 = "=WEEKNUM(TabelleKW[@Datum],2)"
End Sub
Sub WerteZuweisen()
'gibt nur die erste Woche aus!
'Range("D2:D7") = Evaluate("=WEEKNUM(TabelleKW[@Datum],2)")
End Sub
Bild 3-23
ToDo-Liste
Sub FormelnSchreiben()
Dim iTag As Integer
Dim iTage As Integer
Dim sRange As String
Dim sTage As String
Dim sDo As String
sTage = ""
iTage = 4
For iTag = 1 To iTage
sRange = Chr(65 + iTag) & "1"
sDo = "=TODAY()" & sTage
Range(sRange).Select
ActiveCell.FormulaR1C1 = sDo
sTage = "+" & Trim(Str(iTag * 7))
Next iTag
End Sub
Sub WerteZuweisen()
Dim iTag As Integer
Dim iTage As Integer
Dim sRange As String
Dim sTage As String
Dim sDo As String
sTage = ""
iTage = 4
For iTag = 1 To iTage
sRange = Chr(65 + iTag) & "1"
sDo = "=TODAY()" & sTage
Range(sRange).Select
ActiveCell = Evaluate(sDo)
sTage = "+" & Trim(Str(iTag * 7))
Next iTag
End Sub
Darunter ist ebenfalls das Ergebnis der JETZT-Funktion zu sehen, allerdings mit dem
benutzerdefinierten Format: TTT* TT.MM.JJJJ.
Bild 3-24
JETZT-Funktion
Sub FormelnSchreiben()
ActiveCell.FormulaR1C1 = "=NOW()"
End Sub
Sub WerteZuweisen()
Dim rCell As Range
3.5 Zählfunktionen
Tabelle 3-26 Liste der wichtigsten Zählfunktionen
Bild 3-25
Umsatzliste
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=COUNT(Umsatz)"
Range("B12").FormulaR1C1 = "=COUNTA(Umsatz)"
Range("B13").FormulaR1C1 = "=COUNTA(Produkt)"
End Sub
134 3 Wichtige Funktionen
Sub WerteZuweisen()
Range("B11") = Evaluate("=COUNT(Umsatz)")
Range("B12") = Evaluate("=COUNTA(Umsatz)")
Range("B13") = Evaluate("=COUNTA(Produkt)")
End Sub
Bild 3-26
Umsatzliste
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=COUNTIF(Produkt,""P2"")"
Range("B12").FormulaR1C1 = "=COUNTIF(Umsatz,"">32000"")"
End Sub
3.5 Zählfunktionen 135
Sub WerteZuweisen()
Range("B11") = Evaluate("=COUNTIF(Produkt,""P2"")")
Range("B12") = Evaluate("=COUNTIF(Umsatz,"">32000"")")
End Sub
Bild 3-27
Umsatzliste
With ActiveWorkbook.Names
.Add Name:="Umsatz", RefersTo:=Range("B2:B8")
.Add Name:="Produkt", RefersTo:=Range("C2:C8")
End With
End Sub
Sub FormelnSchreiben()
Range("B11").FormulaR1C1 = "=COUNTIF(Produkt,""P2"")"
Range("B12").FormulaR1C1 = "=COUNTIF(Umsatz,"">32000"")"
End Sub
136 3 Wichtige Funktionen
Sub WerteZuweisen()
Range("B11") = Evaluate("=COUNTIF(Produkt,""P2"")")
Range("B12") = Evaluate("=COUNTIF(Umsatz,"">32000"")")
End Sub
Bild 3-28
Produktmengen
Sub FormelnSchreiben()
Dim rCell As Range
Dim lRow As Long
lRow = 15
For Each rCell In Range("Werte").Cells
If rCell.Value = "" Then
lRow = lRow + 1
Cells(lRow, 1) = "=ROW(" & rCell.Address & ")"
Cells(lRow, 2) = "=COLUMN(" & rCell.Address & ")"
End If
Next
End Sub
Sub WerteZuweisen()
Dim rCell As Range
Dim lRow As Long
lRow = 15
For Each rCell In Range("Werte").Cells
If rCell.Value = "" Then
lRow = lRow + 1
Cells(lRow, 1) = Evaluate("=ROW(" & rCell.Address & ")")
Cells(lRow, 2) = Evaluate("=COLUMN(" & rCell.Address & ")")
End If
Next
End Sub
Bild 3-29
Produktmengen
Sub FormelnSchreiben()
Dim rCell As Range
Dim sCell() As String
For Each rCell In Range("Werte").Cells
If rCell.Value = "" Then
sCell = Split(rCell.Address, "$")
rCell.AddComment "Adresse: " & rCell.Address & _
vbCrLf & "Spalte: " & sCell(1) & _
vbCrLf & "Zeile: " & sCell(2)
rCell.Comment.Visible = True
End If
Next
End Sub
3.6 Barwertfunktionen
Tabelle 3-32 Liste der wichtigsten Barwertfunktionen
Bild 3-30
Kreditberechnung
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=PMT(Zinssatz/12,Laufzeit,Kreditbetrag,Restwert,Fälligkeit)"
End Sub
140 3 Wichtige Funktionen
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=PMT(Zinssatz/12,Laufzeit,Kreditbetrag, _
Restwert,Fälligkeit)")
End Sub
Bild 3-31
Kreditberechnung
mit der BW-
Funktion
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=PV(Zinssatz/12,Laufzeit,Zahlung*-1,Zielwert,Fälligkeit)"
End Sub
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=PV(Zinssatz/12,Laufzeit, _
Zahlung*-1,Zielwert,Fälligkeit)")
End Sub
Bild 3-32
Kreditberechnung mit
der ZW-Funktion
End With
End Sub
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=FV(Zinssatz/12,Laufzeit,Zahlung*-1,Kreditbetrag,Fälligkeit)"
End Sub
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=FV(Zinssatz/12,Laufzeit,Zahlung*-1, _
Kreditbetrag,Fälligkeit)")
End Sub
Bild 3-33
Kreditberechnung mit
der ZINS-Funktion
Sub FormelnSchreiben()
Range("B8").FormulaR1C1 = _
"=RATE(Laufzeit,Zahlung*-1, _
Kreditbetrag,Restwert,Fälligkeit,Zins)*12"
End Sub
Sub WerteZuweisen()
Range("B8") = _
Evaluate("=RATE(Laufzeit,Zahlung*-1, _
Kreditbetrag,Restwert,Fälligkeit,Zins)*12")
End Sub
Bild 3-34
Zinsanteil
B4 Zinssatz
B5 Laufzeit
B6 Kreditbetrag
B7 Restwert
B9 Periode
B10 =IPMT(Zinssatz/12,Periode,Laufzeit,Kreditbetrag,Restwert,
Fälligkeit)
Sub FormelnSchreiben()
Range("B10").FormulaR1C1 = _
"=IPMT(Zinssatz/12,Periode,Laufzeit, _
Kreditbetrag,Restwert,Fälligkeit)"
End Sub
Sub WerteZuweisen()
Range("B10") = _
Evaluate("=IPMT(Zinssatz/12,Periode,Laufzeit, _
Kreditbetrag,Restwert,Fälligkeit)")
End Sub
Bild 3-35
Laufzeit
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=NPER(Zinssatz/12, _
Zahlung*-1,Kreditbetrag,Restwert,Fälligkeit)"
End Sub
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=NPER(Zinssatz/12, _
Zahlung*-1,Kreditbetrag,Restwert,Fälligkeit)")
End Sub
146 3 Wichtige Funktionen
Sub FormelnSchreiben()
Range("G2:G6").FormulaR1C1 = "=Einzahlung-Auszahlung"
Range("H2:H6").FormulaR1C1 = "=(1+Zinssatz)^(-Periode)"
Range("I2:I6").FormulaR1C1 = "=Überschuss*Abzins"
Range("I7").FormulaR1C1 = "=SUM(Barwert)"
Range("I9").FormulaR1C1 = "=SuBarwert-AnKosten"
Range("I10").FormulaR1C1 = "=NPV(Zinssatz,Überschuss)-AnKosten"
Range("B4").FormulaR1C1 = "=SUM(Barwert)"
Range("B5").FormulaR1C1 = "=NPV(Zinssatz,Überschuss)-AnKosten"
End Sub
Sub WerteZuweisen()
Range("G2:G6") = _
Evaluate("=Einzahlung-Auszahlung")
Range("H2:H6") = _
Evaluate("=(1+Zinssatz)^(-Periode)")
Range("I2:I6") = _
Evaluate("=Überschuss*Abzins")
Range("I7") = _
Evaluate("=SUM(Barwert)")
Range("I9") = _
Evaluate("=SuBarwert-AnKosten")
Range("I10") = _
Evaluate("=NPV(Zinssatz,Überschuss)-AnKosten")
Range("B4") = _
Evaluate("=SUM(Barwert)")
Range("B5") = _
Evaluate("=NPV(Zinssatz,Überschuss)-AnKosten")
End Sub
3.7 Abschreibungsfunktionen
Tabelle 3-40 Liste der wichtigsten Abschreibungsfunktionen
Bild 3-37
Abschreibung
Sub FormelnSchreiben()
Range("B5").FormulaR1C1 = _
"=SLN(AnKosten,Restwert,Dauer)"
End Sub
Sub WerteZuweisen()
Range("B5") = _
Evaluate("=SLN(AnKosten,Restwert,Dauer)")
End Sub
3.7 Abschreibungsfunktionen 149
Bild 3-38
Abschreibung
Sub FormelnSchreiben()
Range("B6").FormulaR1C1 = _
"=SYD(AnKosten,Restwert,Dauer,Zeitpunkt)"
End Sub
Sub WerteZuweisen()
Range("B6") = _
Evaluate("=SYD(AnKosten,Restwert,Dauer,Zeitpunkt)")
End Sub
150 3 Wichtige Funktionen
Bild 3-39
Abschreibung
Bild 3-40
Abschreibung
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=DB(AnKosten,Restwert,Dauer,Zeitpunkt,Monate)"
End Sub
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=DB(AnKosten,Restwert,Dauer,Zeitpunkt,Monate)")
End Sub
152 3 Wichtige Funktionen
Bild 3-41
Abschreibung
End Sub
Sub FormelnSchreiben()
Range("B9").FormulaR1C1 = _
"=VDB(AnKosten,Restwert,Dauer,Zeitpunkt,Ende,Faktor,Wechsel)"
End Sub
Sub WerteZuweisen()
Range("B9")=Evaluate _
("=VDB(AnKosten,Restwert,Dauer,Zeitpunkt,Ende,Faktor,Wechsel)")
End Sub
3.8 Rundungsfunktionen
Tabelle 3-46 Liste der wichtigsten Rundungsfunktionen
Bild 3-42
Werte runden
Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUND(Wert,-2)"
End Sub
For iRow = 3 To 7
dWert = Cells(iRow, 2)
sDo = "=ROUND(" & Str(dWert)
sDo = Replace(sDo, ",", ".") & ",-2)"
Cells(iRow, 5) = Evaluate(sDo)
Next iRow
End Sub
Bild 3-43
Werte aufrunden
Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUNDUP(Wert,-2)"
End Sub
For iRow = 3 To 7
dWert = Cells(iRow, 2)
sDo = "=ROUNDUP(" & Str(dWert)
sDo = Replace(sDo, ",", ".") & ",-2)"
Cells(iRow, 5) = Evaluate(sDo)
Next iRow
End Sub
Bild 3-44
Werte abrunden
Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUNDDOWN(Wert,-2)"
End Sub
For iRow = 3 To 7
dWert = Cells(iRow, 2)
sDo = "=ROUNDDOWN(" & Str(dWert)
sDo = Replace(sDo, ",", ".") & ",-2)"
Cells(iRow, 5) = Evaluate(sDo)
Next iRow
End Sub
157
4 Datenaufbereitung
Die Speicherung und Analyse von Daten nehmen einen immer größeren Bereich in der
Unternehmenskultur ein. Unter dem Begriff Big Data werden mithilfe von Algorithmen,
Statistiken und Künstlicher Intelligenz große Datenmengen gesammelt und analysiert. Doch
wichtiger als das Sammeln von Daten in Unternehmen ist ihre Verwendung. Data Mining
befasst sich mit der sinnvollen Verwertung gesammelter Informationen. Neben den reinen
Daten geht es um die Erkennung und Erforschung von Mustern und Beziehungen, die Gründe
für Ereignisse liefern. Aus Daten der Vergangenheit werden Vorhersagemethoden entwickelt,
die möglichst zuverlässige Zukunftsprognosen ermöglichen.
Nicht immer liegen die Werte für eine Analyse wohlgeordnet vor. Excel bietet verschiedene
Methoden um Daten zu transformieren.
XCT_04-01_Konsolidieren.xlsm
XCT_04-02_Werk1.xlsm
XCT_04-03_Werk2.xlsm
XCT_04-04_Werk3.xlsm
Als Beispiel dienen die Umsatzzahlen mehrerer Werke (Bild 4-1), die sowohl gleiche als auch
unterschiedliche Produkte herstellen.
Bild 4-1
Auszug aus
einer
Umsatzliste
Befinden sich die Listen in einer Arbeitsmappe, dann können die entsprechenden Arbeitsblätter
aus der Objektliste Worksheets direkt angesprochen werden. Die Prozedur wird in einem
eingefügten Codemodul erstellt.
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_4
158 4 Datenaufbereitung
Codeliste 4-1 Prozedur sucht Arbeitsblätter in einer Mappe, in deren Namen das Wort Werk steht
Sub ListenLesen()
Dim wshTemp As Worksheet
Befinden sich die Listen in unterschiedlichen geöffneten Arbeitsmappen, dann muss die
Objektebene bei den Workbooks angesetzt werden.
Sind die entsprechenden Arbeitsmappen nicht geöffnet, dann muss der Pfad dazukommen.
sPfad = "C:\Temp\*.xlsx"
sFile = Dir(sPfad)
Do While Len(sFile) > 0
Set wbkBook = Workbooks.Open(Filename:=sFile)
For Each wshTemp In wbkBook.Worksheets
If Left(wshTemp.Name, 4) = "Werk" Then
Debug.Print wbkBook.Name & "." & wshTemp.Name
End If
Next wshTemp
wbkBook.Close
Set wbkBook = Nothing
sFile = Dir() 'nächste Mappe
Loop
End Sub
Zur weiteren Betrachtung wählen wir den einfachsten Fall. Für die Summenbildung wird ein
neues Arbeitsblatt angelegt (Bild 4-2).
4.1 Daten konsolidieren 159
Die Prozedur ist so gehalten, dass die Monate in den Listen ein Quartal, ein Halbjahr, ein Jahr
oder beliebige Monate umfassen können. Einzige Voraussetzung: die Anordnung der Monate
ist in allen Listen gleich. Artikel können in einer Liste, in zwei Listen usw. beliebig enthalten
sein. Einzige Voraussetzung: eine Liste darf keine Leerzeilen enthalten.
4.1 Daten konsolidieren 161
Bild 4-3
Dialogfenster
Konsolidieren
162 4 Datenaufbereitung
Entsprechend werden im Diagramm auch nur die gefilterten Werte angezeigt (Bild 4-4).
Bild 4-4
Visualisierung der
gefilterten
Umsätze
Aber Excel verfügt noch über einen erweiterten Filter. Mit dieser Methode können auch
komplexere Filterkriterien erstellt werden. Als Beispiel sind alle Schraubenumsätze über 20
TEuro im Januar und alle Muttern über 10 TEuro im März gesucht. Dazu wird ein Kriterien-
Bereich auf einem neuen Arbeitsblatt per Eintrag vorgegeben, mit Überschriften und Kriterien-
Angaben (Bild 4-5).
Bild 4-5
Kriterienbereich
Der Aufruf der Prozedur (Codeliste 4-6) erfolgt auf dem Worksheet mit dem Kriterienbereich,
der später auch die gefilterten Daten enthält. So lassen sich verschiedene Auswertungen auf
verschiedenen Arbeitsblättern durchführen.
4.3 Teilergebnisse 163
ActiveSheet.Range("A1").Select
Set rngKriterien = ActiveSheet.UsedRange
Set wshSum = Worksheets("Summen")
Set rngSummen = wshSum.UsedRange
Application.CutCopyMode = False
rngSummen.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=rngKriterien, _
CopyToRange:=Range("A10"), _
Unique:=False
Set rngKriterien = Nothing
Set rngSummen = Nothing
Set wshSum = Nothing
End Sub
Nach dem Aufruf der Prozedur stehen die gefilterten Daten von Zeile 10 an abwärts im
gleichen Arbeitsblatt (Bild 4-6).
Bild 4-6
Kriterienbereich
und gefilterte Daten
4.3 Teilergebnisse
Mit der Methode Teilergebnisse liefert Excel eine schnelle Möglichkeit, vorhandene Werte in
Bezug auf ihre Gesamtsumme, ihren Mittelwert, ihrer Extremwerte etc. auszuwerten.
Gleichzeitig mit einer Gruppierung und Sortierung.
XCT_04-05_Teilergebnisse.xlsm
Als Beispiel betrachten wir eine Auftragsliste (Bild 4-7). Die nachfolgende Prozedur erstellt
eine Kopie, auf der dann die Teilsummen gebildet werden. Voraussetzung ist diesmal, dass es
sich bei der Tabelle nicht um eine Datentabelle (Kap. 2.3.1) handelt.
164 4 Datenaufbereitung
Codeliste 4-7 Prozedur wertet eine Liste (keine Datentabelle) mit Teilergebnissen aus
Sub SetTeilsummen()
Dim wshListe As Worksheet
Dim wshTeilsummen As Worksheet
Dim rngListe As Range
Dim lRowMax As Long
Dim lColMax As Long
Dim lCol As Long
Bild 4-8
Teilergebnisse
nach Regionen
Über das Attribut Key der Methode Sort.SortFields.Add wird die Spalte bestimmt, für die die
Teilergebnisse erstellt werden sollen. In diesem Fall Key:=Range("A2"). Über das Attribut
Function der Methode Subtotal wird die Funktion zum Teilergebnis bestimmt (Bild 4-8).
Funktions-
Erläuterung
Konstante
xlAverage Mittelwert
clCount Anzahl
xlCountNums Anzahl Zahlen
xlDistinctCount Keine Duplikate
xlMax Maximum
xlMin Minimum
xlProduct Produkt
xlStDevP Standardabweichung Grundgesamtheit
xlSum Summe
xlUnknown
xlVar Varianz
xlVarP Varianz Grundgesamtheit
4.4 Datenschnitte
Datenschnitte sind zusätzliche Schaltflächen auf dem Arbeitsblatt, die eine Auswahl ähnlich
einem Filter erlauben. Durch die Anzeige des aktuellen Filterstatus ist die Darstellung der
Daten verständlicher. Voraussetzung ist, dass die Daten als Datentabelle vorliegen. Wir
166 4 Datenaufbereitung
verwenden noch einmal die Auftragsliste aus Teilergebnisse in 4.3 und erstellen eine Kopie mit
dem Namen Datenschnitte.
XCT_04-06_Datenschnitte.xlsm
Oberhalb der Tabelle fügen wir zwei Leerzeilen ein und formen die Daten (ohne die
Leerzeilen) zu einer Datentabelle um (Bild 4-9).
Die Datentabelle bekommt den Namen Auftragsliste. Im Register Entwurf der Datentabelle
unter Tabellenformatoptionen wählen wir Schaltfläche „Filter“ ab, denn wir wollen ja die
Filterung über Datenschnitte ausführen. Mit der Schaltfläche Datenschnitt einfügen in der
Gruppe Tools öffnet sich ein Auswahlfenster (Bild 4-10).
Bild 4-10
Auswahl der
Datenschnitte
Nach Auswahl und Bestätigung mit OK erhalten wir vier Datenschnitte, die wir neben der
Datentabelle anordnen (Bild 4-11). Beim Start sind alle Kriterien angewählt.
4.4 Datenschnitte 167
Mit einem Klick auf eine Schaltfläche erfolgt die Filterung und das ausgewählte Kriterium
wird aus der Liste entfernt, auch in mehreren Datenschnitten. Mit einem nochmaligen Klick
wird die Filterung wieder aufgehoben. Auch ein Klick auf das Filtersymbol in der Kopfzeile
einer Datenschnitte löscht die Filterung. Das Symbol neben der Filterung in der Kopfzeile steht
für eine Mehrfachauswahl. Ein Klick darauf und es können mehrere Schaltflächen in einem
Datenschnitt ausgewählt werden. Ein erneuter Klick löscht auch diese Einstellung. Auch
Datenschnitte haben ein eigenes Registerblatt Optionen, in dem weitere Einstellungen zur
Funktionalität und zum Design vorgenommen werden können.
Eine Datentabelle besitzt eine Ergebniszeile, die unter dem Tabellentool-Register Entwurf
unter Tabellenformatoptionen ausgewählt wird. In der Ergebniszeile unter Umsatz wählen wir
aus der Auswahliste die SUMME-Funktion aus. In der Befehlsleiste sehen wir, dass es in
Wirklichkeit aber die TEILERGEBNIS-Funktion ist. Diese Auswahl kann für jede Spalte in
der Ergebniszeile getroffen werden.
Etwas unschön ist, dass wir nach jeder Filtereinstellung an das Ende der Datentabelle schauen
müssen. Jetzt kommen die Leerzeilen vor der Tabelle zum Einsatz. Wir gestalten die
gewünschten Ergebnisszellen (Bild 4-12) und geben ihnen die Formeln nach Tabelle 4-2.
Bild 4-12
Auswahl der
Datenschnitte
168 4 Datenaufbereitung
Bereich Formel
E1 =Auftragsliste[[#Ergebnisse];[Umsatz]]
G1 =Auftragsliste[[#Ergebnisse];[Auftragseingang]]
Mit jeder neuen Filterung werden nur die gefilterten Zeilen ausgewertet. Die Prozedur
SetDatenschnitte (Codeliste 4-8) erstellt die Datenschnitte zum Beispiel (Bild 4-12).
4.5 Pivot-Tabellen
Der Name Pivot kommt aus dem Französischen und bedeutet so viel wie Dreh- oder
Angelpunkt. Pivot-Tabellen in Excel bieten viele Möglichkeiten, Daten in verschiedener Art
darzustellen und auszuwerten.
Zur Erstellung von Auswertungen in einer Pivot-Tabelle bietet Excel einen Pivot-Assistenten
an. Doch dieser setzt voraus, dass die Form des Ergebnisses bekannt ist. Dabei genügt es, eine
beliebige Auswertung zu erstellen, die später meistens sowieso umgestellt wird. Diese
4.5 Pivot-Tabellen 169
Umstellungen lassen sich im Pivot-Schema sehr leicht durchführen, also warum nicht direkt
mit dem Pivot-Schema starten?
Die Quelldaten sollten am besten in einer Datentabelle mit Überschriften vorliegen. Durch
Hinzufügen von neuen Spalten werden diese dann in der Pivot-Tabelle berücksichtigt. Bei der
Erstellung einer Pivot-Tabelle wird eine als Cache bezeichnete Momentaufnahme der Daten
verwendet, so dass die Quelldaten nicht geändert werden.
Eine Tabelle der Quelldaten hat den in Bild 4-13 dargestellten Aufbau. Jede Spalte verfügt
über eine Überschrift, die wir hier als Namen bezeichnen. In einer Spalte sollten die
Datentypen identisch sein, also nur Werte, Texte, Datumswerte, etc. Mit dem Aufruf der Pivot-
Tabelle entsteht eine Feldliste, in der die Spaltennamen als Felder eingetragen sind. Durch
Ziehen der Felder in das Zeilen-, Spalten- oder Seitenfeld werden gleichnamige Texte,
Begriffe, etc. zu Feldelementen zusammengefasst, ähnlich wie bei der Funktion Teilergebnis.
Zusätzlich besitzt jedes Zeilen-, Spalten- und Seitenfeld einen Filter, angepasst auf den
Datentyp im Feld. Und durch Ziehen von Werten in das Ergebnisfeld werden die zugehörigen
Summen, Mittelwerte, Maximalwerte, etc. je nach Wahl als Ergebnis gebildet.
XCT_04-07_PivotTabellen.xlsm
Beginnen wir mit der Erstellung unserer ersten Pivot-Tabelle. Als Tabelle dient noch einmal
eine Auftragsliste (Bild 4-7), diesmal aber als Datentabelle mit dem Namen Quelldaten (Bild
4-14).
Bild 4-15
Dialogfenster
PivotTable erstellen
Im neuen Tabellenblatt wird die Pivot-Tabelle durch einen Hinweis (Bild 4-16)
angedeutet.
Bild 4-16
Hinweis
PivotTable
Auf diesem Hinweis rufen wir das Kontextmenü (rechte Maustaste) auf und wählen in der
Auswahl PivotTable-Optionen
Im Dialogfeld PivotTable-Optionen wählen wir (Haken) unter dem Register Anzeige die
Auswahl Klassisches PivotTable-Layout (ermöglicht das Ziehen von Feldern im Raster)
Nun erkennen wir im neuen Arbeitsblatt das klassische PivotTable-Schema (Bild 4-17).
4.5 Pivot-Tabellen 171
Bild 4-17
Das klassische
PivotTable-Schema
Mit VBA wird alles etwas leichter, so erstellt die Prozedur CreatePivotTabelle (Codeliste 4-9)
ebenfalls ein leeres Pivot-Schema mit Feldliste.
Codeliste 4-9 Prozedur erstellt zur Tabelle ein Pivot-Schema mit Feldliste
Sub CreatePivotTabelle()
Dim wbkBook As Workbook
Dim wshData As Worksheet
Dim wshPivot As Worksheet
Dim pvcTemp As PivotCache
Dim pvtTemp As PivotTable
Dim sTable As String
'Excel Objekte
Set wbkBook = ThisWorkbook
Set wshData = wbkBook.Worksheets("Auftragsliste")
'Chache erstellen
Set pvcTemp = wbkBook.PivotCaches.Create( _
SourceType:=xlDatabase, SourceData:="Quelldaten")
'Pivot Arbeitsblatt und Pivot Tabelle erstellen
Set wshPivot = wbkBook.Worksheets.Add
Set pvtTemp = pvcTemp.CreatePivotTable( _
TableDestination:=wshPivot.Cells(3, 1))
pvtTemp.InGridDropZones = True
pvtTemp.RowAxisLayout xlTabularRow
'Pivot-Schema
sTable = pvtTemp.Name
wshPivot.PivotTables(sTable).InGridDropZones = True
wshPivot.Cells(4, 2).Select
'Aufräumen
Set wbkBook = Nothing
Set wshData = Nothing
Set pvcTemp = Nothing
Set wshPivot = Nothing
Set pvtTemp = Nothing
End Sub
Ziehen wir nun mit der Maus das Feld Produktkategorie aus der Feldliste in das Zeilenfeld und
das Feld Umsatz in das Ergebnisfeld, welches standardmäßig auf Summe eingestellt ist, dann
bekommen wir die erste Auswertung, ähnlich wie bei den Teilergebnissen (Bild 4-18). Die
Werte müssen dann nur noch in Währung formatiert werden, natürlich wieder über das
Kontextmenü der markierten Daten und der Auswahl Zellen formatieren.
172 4 Datenaufbereitung
Bild 4-18
Die Umsätze der
Produktkategorien
Das Ergebnis zeigt noch einmal deutlich die Aufgabe des Zeilenfeldes. Alle doppelt
vorhandenen Begriffe, hier in der Produktkategorie, werden zusammengefasst. Dies gilt auch
für die Verwendung des Spalten- und Seitenfeldes.
Wie die Zuordnung eines Feldes aus der Feldliste ins Zeilenfeld per VBA funktioniert, zeigt
die Funktion FieldToRowField (Codeliste 4-10) mit den Parametern Position und Feldname.
Die Position hat zunächst den Wert 1, denn es können mehrere Felder dem Zeilenfeld
hinzugefügt werden.
Die nächste Funktion (Codeliste 4-11) überträgt ein Feld in das Ergebnisfeld, auch Datenfeld
genannt.
'neues Datenfeld
Set pvt = ActiveSheet.PivotTables(1)
Set pvf = pvt.PivotFields(sName)
vReturn = pvt.AddDataField(pvf, Function:=xlSum)
'aufräumen
Set pvt = Nothing
Set pvf = Nothing
End Function
Mit einer Testprozedur (Codeliste 4-12) erzeugen wir eine Pivot-Tabelle, in der sich die
Produktkategorie im Zeilenfeld und viermal Umsatz im Ergebnisfeld (Bild 4-19) befinden. In
Pivot-Tabellen ist es also möglich, ein Feld mehrfach einem Zeilen-, Spalten- und Seitenfeld
zuzuweisen.
Codeliste 4-12 Testprozedur für eine Pivot-Tabelle mit Umsätzen der Produktkategorien
Sub Test1()
Dim vReturn As Variant
Call CreatePivotTable
vReturn = FieldToRowField(1, "Produktkategorie")
vReturn = FieldToDataField("Umsatz")
vReturn = FieldToDataField("Umsatz")
vReturn = FieldToDataField("Umsatz")
vReturn = FieldToDataField("Umsatz")
End Sub
Natürlich wollen wir nicht viermal die gleichen Werte sehen und beginnen mit der Anpassung:
In der ersten Wertspalte ändern wir die Überschrift Summe von Umsatz durch Anklicken in
der Befehlszeile ab in Umsatzsumme. Die Werte bekommen über das Kontextmenü unter
Zellen formatieren das Standardformat Währung.
Die zweite Wertspalte bekommt die Überschrift Umsatzanzahl. Um diese zu bestimmen,
markieren wir eine Zelle der zweiten Wertspalte und rufen über das Kontextmenü
Wertfeldeinstellungen (Bild 4-20) auf.
174 4 Datenaufbereitung
Bild 4-20
Dialogfeld zu
Wertfeldeinstellungen
Das Dialogfeld zeigt uns, dass es neben der Funktion Summe für das Ereignisfeld auch
noch andere Funktionen gibt und wir wählen daraus Anzahl. Das Ergebnis zeigt uns, aus
wie vielen Positionen sich die Umsatzsumme zusammensetzt.
Die dritte Wertspalte erhält die Überschrift Umsatzanteil und in den Wertfeldeinstellungen
(Bild 4-20) wählen wir zunächst das Register Werte anzeigen als und in der Auswahlliste
Werte anzeigen als die Wahl % des Gesamtergebnisses.
Die vierte Wertspalte erhält die Überschrift Umsatzanteil von GB (GB für Gelenkbolzen)
und in den Wertfeldeinstellungen wählen wir zunächst wieder das Register Werte anzeigen
als und in der Auswahlliste Werte anzeigen als die Wahl % von. Weiter wählen wir als
Basisfeld Produktkategorie und als Basiselement Gelenkbolzen.
Diese Übung hat gezeigt, dass gleiche Werte in einem Wertefeld auf unterschiedliche Weise,
ob nun entsprechend formatiert oder durch Funktionswahl in Wertfeldeinstellungen, dargestellt
werden können (Bild 4-21).
Die Pivot-Tabelle hält noch eine weitere Überraschung bereit. Wir wollen wissen, wie z. B. die
Umsatzsumme für die Gelenkbolzen zustande gekommen ist. Dazu genügt ein Doppelklick auf
den Wert und Excel erstellt eine neue Tabelle, in der nur die Zeilen aus den Quelldaten zu
finden sind, die zur Umsatzsumme beigetragen haben (Bild 4-22).
Im nächsten Schritt bekommt auch das Spaltenfeld eine Feldzuweisung. Dies kann natürlich
manuell geschehen, aber mit einer VBA-Funktion (Codeliste 4-14) ist es einfacher.
'neues Datenfeld
Set pvt = ActiveSheet.PivotTables(1)
Set pvf = pvt.PivotFields(sName)
With pvf
.Orientation = xlColumnField
.Position = iPos
End With
'aufräumen
Set pvt = Nothing
Set pvf = Nothing
End Function
Eine neue Testprozedur (Codeliste 4-15) erstellt eine neue Pivot-Tabelle (Bild 4-23).
Der Einsatz von Filtern per VBA lässt sich durch Aufzeichnung von Makros leicht erlernen. Im
nächsten Schritt wollen wir uns eine Mehrfachbelegung im Zeilenfeld ansehen. Unsere
Testprozedur (Codeliste 4-16) nutzt den Positionswert zur Spaltenposition im Zeilenfeld.
4.5 Pivot-Tabellen 177
Das Ergebnis (Bild 4-24) ist zunächst eine Gruppierung der Umsätze nach Regionen und
danach nach Verkäufern.
Bild 4-24
Pivot-Tabelle
Verkäuferumsätze
Durch diese Doppelbelegung im Zeilenfeld kommt es auch zur Ausgabe eines Teilergebnisses
nach Regionen. Über das Kontextmenü können diese aus- oder eingeblendet werden. Aber
auch durch Setzen der PivotField-Eigenschaft Subtotals mit VBA.
Die Testprozedur (Codeliste 4-17) schaltet die Teilergebnisse ein und wieder aus.
Neben einer geographischen Gruppierung ist auch oft eine zeitliche Gruppierung von Interesse.
Eine Testprozedur (Übungsaufgabe für den Leser) liefert die Verkäuferumsätze bezogen auf
den Auftragseingang (Bild 4-25).
Bild 4-25
Pivot-Tabelle mit
Datumswerten
Die Darstellung der Datumswerte lässt sich über das Kontextmenü mit der Methode
Gruppierung klassifizieren. Im Dialogfenster wählen wir dazu die Gruppierung nach Jahren.
Die standardmäßige Einstellung nach Monaten muss abgewählt werden. Auch hier werden
wieder Teilergebnisse zu den Verkäufern angezeigt. Durch Ausblenden der Teilergebnisse über
das Kontextmenü wird die Darstellung übersichtlicher (Bild 4-26).
Bild 4-26
Verkäuferumsätze
nach Jahren
Noch übersichtlicher wird die Darstellung, wenn wir den Feldnamen Auftragseingang ins
Spaltenfeld ziehen (Bild 4-27).
Bild 4-27
Auszug
Verkäuferumsätze
nach Jahren
Auch ein Spaltenfeld kann mehrere Einteilungen aufnehmen. Wählen wir zum Ergebnis
zusätzlich in Gruppierung noch die Quartale aus (hier ist eine Mehrfachwahl möglich), dann
werden die Jahre noch in Quartale unterteilt (Bild 4-28).
4.5 Pivot-Tabellen 179
In einer Pivot-Tabelle sind auch benutzerdefinierte Gruppierungen möglich. Dazu ein Beispiel:
Erneut erstellen wir eine Pivot-Tabelle mit den Umsatzdaten der Produktkategorien und
formatieren sie in Währung.
Nun wollen wir alle Federarten in einer Gruppe zusammenfassen. Dazu markieren wir
zuerst die Druckfedern, halten dann die STRG-Taste gedrückt und markieren noch
nacheinander die Tellerfedern und die Zugfedern. Danach geben wir die STRG-Taste frei.
Zu den markierten Zellen rufen wir im Kontextmenü die Methode Gruppieren auf.
Dadurch bildet sich eine neue Spalte Produktkategorie2 die wir in Produktgruppe
umbenennen.
Die neu entstandene Gruppe1 bekommt den Namen Federn.
Durch erneute Auswahl von Kegelräder, Stirnräder und Zahnräder in der
Produktkategorie bilden wir mit Gruppieren eine weitere Gruppe Zahnräder.
Gleitlager, Kettenglieder, Kupplungen und Wälzlager bilden die neue Gruppe Antrieb.
Der Rest gehört zur neuen Gruppe Elemente.
Die neue Spalte Produktgruppe im Zeilenfeld steht damit auch in der Feldliste. Jede
Produktgruppe erhält auch ein Teilergebnis (Bild 4-29), das sich auch ausblenden lässt.
Bild 4-29
Benutzerdefinierte
Gruppe
180 4 Datenaufbereitung
Die nächste Pivot-Tabelle bringt auch das Seitenfeld ins Ziel. Die Prozedur FieldToPageField
(Codeliste 4-18) ist uns dabei behilflich.
Bild 4-30
Auszug
Pivot-
Tabelle
mit
Feldern
im
Seitenfeld
In dieser Pivot-Tabelle lassen sich die Umsätze von Produktkategorien nach Jahr, Kunde (auch
mehrere) und Region (auch mehrere) filtern.
In Pivot-Tabellen lassen sich auch neue Felder aus vorhandenen berechnen. Der Editor dazu ist
so umständlich, dass ich den Bereichsnamen den Vorzug gebe. Dazu folgende Aufgabe:
Einem Controller liegen die Umsätze der Produktkategorien von der letzten Periode vor.
Ebenso zu jeder Produktkategorie eine Prognose zur Umsatzänderung in Prozent für die
nächste Periode. Er soll nun bestimmen, welche Umsätze einschließlich Gesamtumsatz zu
erwarten sind.
Er erstellt eine Pivot-Tabelle der Umsätze und trägt dazu die Prognosen ein (Bild 4-31).
4.5 Pivot-Tabellen 181
Bild 4-31
Umsatzprognosen
für die nächste
Periode
Dann markiert er Umsätze und Prognosen ohne Summe, aber mit den Überschriften, hier
der Bereich B4:C19.
Unter dem Register Formeln in der Gruppe Definierte Namen wählt er Aus Auswahl
erstellen. Damit besitzen die Umsätze den Bereichsnamen Ergebnis und die
Prognosewerte den Bereichsnamen Prognosen, mit denen er nun rechnen kann.
In der Zelle D5 schreibt er die Formel =Ergebnis*(1+Prognosen) und überträgt sie auf die
weiteren Zellen D6:D19.
Im letzten Schritt formatiert er das Ergebnis (Bild 4-32), benennt die Spalte und bildet die
Summe.
Bild 4-32
Umsatzprognose
Der Aufruf des Kontextmenüs auf dem Registerauswahlfeld (links am Rand neben den
Arbeitsblatt-Registern) zeigt (Bild 4-33), dass wir schon einige Pivot-Tabellen erstellt haben.
Mit einem Doppelklick auf ein Listenelement wird auch das entsprechende Arbeitsblatt
gewählt.
182 4 Datenaufbereitung
Bild 4-33
Auswahlliste
Arbeitsblätter
4.6 Pivot-Diagramme
In Kapitel 2 habe ich bereits einige Diagrammformen gezeigt. Zu den Pivot-Tabellen gehören
natürlich die PivotCharts, auch wenn ich sie so gut wie nie direkt aufrufe. Viel einfacher ist es,
die Daten in einer Pivot-Tabelle zu markieren und dann das gewünschte Diagramm über die
Registerkarte Einfügen aus der Gruppe der Diagramme auszuwählen, wie wir es bereits in
Kapitel 2 durchgeführt haben, nur waren es dort Datentabellen. Auch Bereichsnamen sind hier
sehr hilfreich.
XCT_04-08_PivotCharts.xlsm
4.6.1 Fächerdiagramm
Der Vorteil, ein Diagramm aus einer Pivot-Tabelle zu generieren ist, dass die Filter mit
übernommen werden, so dass eine Auswahl auch im nachherein möglich ist. Als Vorlage dient
noch einmal die Auftragsliste, aus der wir eine Pivot-Tabelle über die Produktkategorie-
Umsätze erstellen und danach die Zuweisungen und Auswertungen (Tabelle 4-3) vornehmen.
Daraus entsteht die Pivot-Tabelle mit den berechneten Anteilen (Bild 4-34).
Bild 4-34
Produktumsätze
und Anteile
Ein Fächerdiagramm (Bild 4-35) wird aus einem Kreisdiagramm wie folgt ableitet:
Der Trick zu diesem Diagramm besteht darin, dass wir zu den einzelnen Anteilen auch die
100 % dazunehmen und den Bereich C5:C20 markieren und Anteile benennen.
Dann wählen wir unter Register Einfügen in der Gruppe Diagramme das 2D-
Kreisdiagramm.
Im Kontextmenü auf der Datenreihe wählen wir Datenreihen formatieren.
Unter Reihenoptionen stellen wir den Winkel des ersten Segments auf 270 Grad.
Danach klicken wir zweimal auf das Datensegment 100 %, so dass nur dies markiert ist.
Im Kontextmenü von Datenpunkt formatieren wählen wir unter Füllung nicht sichtbar.
Im Register Entwurf des Diagramms in der Gruppe Diagrammlayouts unter
Diagrammelement hinzufügen wählen wir für die Legende die rechte Position.
Hier werden noch weitere Anpassungen durchgeführt. Ebenso im Kontextmenü zu den
einzelnen Diagramm-Objekten.
Bild 4-35
Produktanteile als
Fächerdiagramm
184 4 Datenaufbereitung
4.6.2 Cockpit-Tachometer
Das Tachometer entsteht nach dem gleichen Trick wie das Fächerdiagramm, verwendet wird
diesmal aber ein Kreisringdiagramm. Die manuelle Erstellung ist sehr aufwendig, so dass wir
dazu eine Prozedur in mehreren Schritten entwickeln. Ein Hilfsfeld (Bild 4-36) sorgt für eine
gleichmäßige Einteilung der Skala.
4.6 Pivot-Diagramme 185
Bild 4-36
Hilfsfeld zur Skala
Der Bereich E5:E15 erhält den Bereichsnamen Teilung. Wie vorher blenden wir den 100-
Anteil wieder aus: Die Prozedur Skala (Codeliste 4-20) ist ausreichend kommentiert.
End With
'Position
With shpTemp
.Top = 130
.Left = 360
.Height = 250
.Width = 250
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Damit ist die Skala des Tachometers (Bild 4-37) erstellt. Wer mag, kann die Farbwerte
verändern. Das gilt auch für die Abmessungen.
Bild 4-37
Kreisringdiagramm als
Skala zum
Tachometer
Das nächste Diagramm soll den Zeiger zum Tacho wiedergeben. Auch dazu benötigen wir ein
Hilfsfeld (Bild 4-38).
Bild 4-38
Hilfsfeld zum
Zeiger
Die Zelle H5 dient zur Eingabe des Wertes, den der Zeiger darstellen soll. Das ActiveX-
Steuerelement Scrollleiste wird über die Eigenschaft LinkedCell mit der Zelle H5 verbunden.
Weitere Eigenschaftswerte sind Max = 100, Min = 0 und SmallChange = 1.
Der Trick hierbei ist, dass der Bereich H5:H8 in einem Kreisdiagramm dargestellt wird und
dann bis auf den Anteil 0,001 alle anderen ausgeblendet werden. Dadurch erhalten wir eine
dünne Linie, den Zeiger. Die Prozedur Zeiger (Codeliste 4-21) ist ebenfalls ausreichend
kommentiert.
4.6 Pivot-Diagramme 187
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 112, 192)
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Die Ausführung beider Prozeduren ergibt zwei sich überlagernde Diagramme (Bild 4-39).
Veränderungen in Zelle H5 werden direkt vom Zeiger wiedergegeben.
Bild 4-39
Tachometer aus zwei
Kreisdiagrammen
Kommen wir nun zur eigentlichen Anwendung. Aus der Auftragsliste erstellen wir eine Pivot-
Tabelle mit zweimal den Umsatz im Wertefeld für die Produkte. Die zweite Umsatzspalte
stellen wir über Wertfeldeinstellungen um auf % von Gelenkbolzen (Bild 4-40). Mithilfe der
Hilfsfelder erstellen wir erneut ein Tachometer.
Bild 4-40
Pivot-
Tabelle mit
Hilfsfeldern
Die Prozedur schreibt zunächst den Text aus dem Kombinationsfeld in die Zelle Produkt.
Danach sucht sie mittels der SVERWEIS-Funktion das Produkt in der Matrix und schreibt den
gefundenen Wert aus der dritten Spalte in das Zeigerfeld H5, der ja als Vorgabe für den Zeiger
dient. Design und Funktionalität dieses Beispiels können beliebig verändert werden. Mit
diesem Beispiel sind wir ein wenig vom Thema PivotChart abgekommen.
4.6.3 Treemap
Der Diagrammtyp Treemap eignet sich zur Darstellung von Proportionen innerhalb einer
Hierarchie durch Rechtecke. Nach der Auswahl der Daten in der Pivot-Tabelle und dem
anschließenden Einfügeversuch eines Treemap wird eine Fehlermeldung (Bild 4-41)
ausgegeben, wie bei einigen anderen Diagrammen auch.
Bild 4-41
Fehlermeldung beim Einfügen
eines Treemap-Diagramms
Das Problem lässt sich durch eine VBA-Prozedur (Codeliste 4-23) leicht umgehen (Bild 4-42).
'Kreisdiagramm erstellen
wshTemp.Range("A5:B24").Select
Set shpTemp = wshTemp.Shapes.AddChart2(410, xlTreemap)
Set chrTemp = shpTemp.Chart
With chrTemp
.Legend.Position = xlRight
.HasTitle = True
.ChartTitle.Text = "Verkäuferumsätze"
End With
'Position und Größe
With shpTemp
.Top = 20
.Left = 200
.Height = 450
.Width = 300
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Bild 4-42
Treemap-Diagramm
zum Verkäuferumsatz
4.6.4 3D-Oberfläche
Dieser Diagrammtyp eignet sich besonders gut dazu, die Abhängigkeit von zwei Parametern zu
visualisieren. Ein zweidimensionales Spannungsfeld liegt in einer Pivot-Tabelle dann vor,
wenn Zeilen- und Spaltenfeld besetzt sind.
4.6 Pivot-Diagramme 191
Als Beispiel verwenden wir noch einmal die Auftragsliste und erstellen daraus eine Pivot-
Tabelle der Umsätze, von Produkten im Zeilenfeld und Regionen im Spaltenfeld (Bild 4-43).
4.7 Relationen
Mitunter bestehen zwischen Feldelementen in Tabellen Relationen (Beziehungen). Sie zu
definieren und daraus Berechnungen durchzuführen, ist das Ziel der nächsten Übung.
XCT_04-09_Produktionsdaten.xlsm
XCT_04-10_Relationen.xlsm
In einer Arbeitsmappe Produktionsdaten befinden sich auf zwei Arbeitsblättern die Tabellen
Produktion und Maschinen. In der Tabelle Produktion ist aufgeführt, welcher Zeitaufwand
nötig war, um die Bauteile eines Produkts mit der angegebenen Anzahl herzustellen. Die
Zeitangaben beziehen sich auf eine Person mit dem aufgeführten Stundenlohn. Die Person
bedient dazu in der Zeit eine Maschine, deren Nummer ebenfalls angegeben ist. In der Tabelle
Maschinen sind neben der Maschinennummer auch der Stundensatz der Maschine aufgeführt.
Wir müssen also zwischen der Maschinennummer in Tabelle Produktion und
Maschinennummer in Tabelle Maschinen eine Relation herstellen, damit neben den
Lohnkosten auch die Maschinenkosten errechnet werden können. Eine Relation lässt sich in
Excel durch eine Abfrage gestalten:
Neue Excelmappe öffnen
Im Register Daten unter Externe Daten abrufen die Auswahl Aus anderen Quellen wählen
Danach die Auswahl Aus Microsoft Query treffen
Im Dialogfenster Datenquelle auswählen die Auswahl Excel Files* wählen und mit OK
bestätigen (Bild 4-44)
Bild 4-44
Datenquelle
auswählen
Bild 4-45
Abfrage-
Assistent
Nachdem wir Produkt, Bauteil, Anzahl und Stunden eingetragen haben, bestätigen wir die
Schaltfläche Weiter >.
Bild 4-46
Spalten
auswählen
Im nächsten Dialogfenster Daten filtern (Bild 4-47) treffen wir eine Auswahl für die
Produkte A, B und C. Alle anderen Produkte bleiben unberücksichtigt.
Bild 4-47
Spalten
auswählen
194 4 Datenaufbereitung
Bild 4-48
Sortierung
auswählen
Im letzten Dialogfenster wählen wir noch Daten in MS Query bearbeiten und ansehen und
wählen dann Fertigstellen.
Da wir nur Spalten aus der Tabelle Produktion auf dem Arbeitsblatt Personalkosten
ausgewählt haben, ist im Assistenten auch nur die Tabelle Personalkosten sichtbar. Mit der
Schaltfläche Tabellen hinzufügen fügen wir die Tabelle Maschinenkosten dazu.
Der wichtigste Schritt ist die Erstellung der Relation. Dazu klicken wir mit der linken
Maustaste auf das Element MNr in Personalkosten, halten die Maustaste weiter gedrückt
und ziehen das Element auf MNr in Maschinenkosten. Dann geben wir die Maustaste frei
und eine Relation wird zwischen beiden Elementen als Linie eingetragen (Bild 4-49).
Bild 4-49
Relation
zwischen
den Tabellen
4.7 Relationen 195
Im nächsten Schritt tragen wir in das leere Kopfzeilenfeld, rechts neben die bereits
belegten Kopfzeilenfelder, die Formeln Std*Lohn, Std*Stundensatz und
Std*(Lohn+Stundensatz) ohne ein Gleichheitszeichen ein und klicken auf die Schaltfläche
Jetzt abfragen, um die Berechnungen durchzuführen (Bild 4-50).
Bild 4-50
Berechnungen
in der
Abfrage
Mit der Schaltfläche Speichern wird die Abfrage als Datei unter Abfrage von Kosten.dqy
im gewählten Ordner gespeichert. Damit steht sie für spätere Veränderungen zur
Verfügung.
Der letzte Schritt ist die Übergabe der Abfrage in eine Datentabelle (Bild 4-51). Die
Formeln in der Kopfzeile werden nicht übertragen. Die berechneten Spalten werden
entsprechend ihrem Inhalt benannt.
Bild 4-51
Tabelle aus
der Abfrage
Die Zusammenstellung der Kosten als Pivot-Tabelle liefert zusätzlich die Teilergebnisse
der Produkte und Bauteile. Die Teilergebnisse der Bauteile sind uninteressant und werden
ausgeblendet (Bild 4-52).
Abschließend enthält die Pivot-Tabelle auch das Gesamtergebnis der drei Produkte.
196 4 Datenaufbereitung
Bild 4-52
Pivot-Tabelle
aus der Abfrage
4.8 Verweise
XCT_4-11_SVERWEIS.xlsm
Wie heißt es doch so schön, es führen viele Wege nach Rom. Also muss man nicht unbedingt
ein Relationen-Modell erstellen, um in unserem vorangegangenen Beispiel Personalkosten und
Maschinenkosten zusammen zu bringen. Es genügt dazu die SVERWEIS-Funktion und eine
Erweiterung der Datentabelle Produktion (Bild 4-53).
4.8 Verweise 197
Bereich Formel
G2 =SVERWEIS([@MNr];Maschinenkosten;2)
H2 =[Std]*[Lohn]
I2 =[Std]*[MSatz]
J2 =[LKosten]+[MKosten]
Eine Pivot-Tabelle aus der erweiterten Datentabelle führt zum gleichen Ergebnis (Bild 4-52).
Nun wird häufig argumentiert, dass SVERWEIS nur ein Suchkriterium zulässt. Nachfolgend
werden wir sehen, dass die SVERWEIS-Funktion auch bei mehreren Suchkriterien verwendet
werden kann.
Bild 4-54
Beispiel-
Matrix
Die dritte, weniger bekannte Schreibform einer Matrix, beinhaltet gleichzeitig deren Struktur.
Spalten werden durch einen Punkt und Zeilen durch ein Semikolon getrennt, von links nach
rechts in geschweiften Klammern geschrieben. Die Form {1.2} ist demnach eine Matrix mit
einer Zeile, zwei Spalten und den Werten 1 und 2.
XCT_4-12_SVERWEISundWAHL.xlsm
Doch nun zum SVERWEIS für zwei Kriterien. Dazu erweitern wir die Produktionsdaten um
eine Werkzeugnummer. Nun wird zur Herstellung eines Bauteils eine Maschine und eins von
zwei Werkzeugen, Nr. 1 oder Nr. 2, benötigt, natürlich mit unterschiedlichen Stundensätzen.
Die Datentabelle Produktion erhält eine weitere Spalte WNr für Werkzeugnummer (Bild 4-55).
Bild 4-55
Personalkosten
Die Datentabelle Maschinen erhält ebenfalls eine Spalte WNr für Werkzeugnummer, so dass es
für jede Maschine zwei Zeilen gibt (Bild 4-56), eine mit WNr = 1 und eine mit WNr = 2.
Bild 4-56
Maschinenkosten
Bild 4-57
Ergebnis der
Kostenbestimmung
Bereich Formel
=SVERWEIS(Personalkosten!$F2&Personalkosten!$G2;WAHL({1.2};
Maschinen[MNr]&Maschinen[WNr];Maschinen[Stundensatz]);2;0)
H2
Achtung! Die Eingabe der Formel in der Befehlszeile muss mit den Tasten
STRG+SCHIFT+ENTER abgeschlossen werden (Matrixformel).
I2 =[Std]*[Lohn]
J2 =[Std]*[MSatz]
K2 =[LKosten]+[MKosten]
In dieser Form lassen sich auch mehr als zwei Kriterien anwenden, die nicht unbedingt
nebeneinander angeordnet werden müssen. Entsprechend komplex werden die Formeln.
XCT_04-13_SUMMEWENNund.xlsm
Das Beispiel aus den Relationen mit zwei Datentabellen Produktion und Maschinen wandeln
wir so ab, dass es unter Maschinen mehrere gleiche Einträge zu einer Maschinennummer gibt
(Bild 4-58). Es könnten Stundensätze der gleichen Maschine aus unterschiedlichen
200 4 Datenaufbereitung
Produktionen sein, die aus Nachkalkulationen bestimmt wurden und wir wollen deren
Mittelwert für eine neue Berechnung nutzen.
Dazu verwenden wir die SUMMEWENN-Funktion und die ZÄHLENWENN-Funktion, die
entsprechend einem Kriterium die Summe und die Anzahl gefundener Einträge bilden. Wie wir
zuvor gesehen haben, können es auch mehrere Kriterien sein.
Bild 4-58
Mehrfacheinträge in der
Datentabelle Maschinen
Der Quotient aus SUMME / ANZAHL ergibt den Mittelwert. Da die Anzahl mindestens 1 ist,
kann keine Division durch null auftreten. Die neue Spalte MSatz in Datentabelle Produktion
enthält den Mittelwert der gefundenen Stundensätze aus Datentabelle Maschinen (Bild 4-59).
Bild 4-59
Mittelwerte der
Stundensätze
Bereich Formel
=SUMMEWENN(Maschinen[MNr];[@MNr];Maschinen[Stundensatz])/
G2:G52
ZÄHLENWENN(Maschinen[MNr];[@MNr])
Die Kostenspalten bestimmen sich wie im vorherigen Beispiel. Ebenso die Pivot-
H2:J52
Tabelle.
Wenn wir sehen wollen, welche Datensätze genau gefunden wurden, dann verwenden wir die
KGRÖSSTE-Funktion in der Datentabelle Maschinen (Bild 4-60). Zur Erinnerung noch einmal
die Syntax der Funktion:
=KGRÖSSTE(Matrix;k).
Der Faktor k bestimmt den Rang des Wertes. Größter Wert k = 1, zweitgrößter Wert k = 2,
drittgrößter Wert k = 3, usw.
4.8 Verweise 201
Bild 4-60
Gefundene
Maschinensätze
Tabelle 4-9 Formeln zur Anzeige der gefundenen Stundensätze und Mittelwertbildung
Bereich Formel
=KGRÖSSTE(($A$2:$A$50=$A2)*($B$2:$B$50);SPALTE(A$1))
C2
Achtung! Eingabe mit STRG+SHIFT+ENTER abschließen.
D2:E2 C2 übertragen
C3:E50 C2:E2 übertragen
=SUMME(Maschinen[@[1. Satz]:[3. Satz]])/ZÄHLENWENN(Maschinen[@[1.
F2
Satz]:[3. Satz]];">0")
F3:F50 F2 übertragen
Hier sollte jetzt der Mittelwert mit dem in der Datentabelle Produktion bestimmten Mittelwert
übereinstimmen. Damit die Nullwerte ausgeblendet werden, wird für den Bereich C2:E50 das
benutzerdefinierte Format #.##0,00 €;;““ verwendet, d.h. bei Dezimalzahlen ist die dritte
Formatangabe (nach zwei ; ) ausschließlich für den Nullwert bestimmt, der hier mit ″″ auf
leeren Text gesetzt wird.
XCT_04-14_SVERWEISundINDEX.xlsm
Als Beispiel betrachten wir einen Auszug aus einer Auftragsliste (Bild 4-61). Unter Vorgabe
der Auftragsnummer, soll der zugehörige Auftragswert gefunden werden. Dazu gibt es zwei
Lösungen:
Mit der WAHL-Funktion erstellen wir uns eine Matrix aus Auftragswert und
Auftragsnummer mit vertauschter Reihenfolge, auf der wir dann mit SVERWEIS suchen.
Mit der VERGLEICH-Funktion finden wir die Zeilennummer, in der das Suchkriterium
steht und lesen dann mit der INDEX-Funktion das Ergebnis in der Ergebnisspalte.
202 4 Datenaufbereitung
5 Integrierte Analyse-Methoden
Mit der Installation von Excel gibt es neben den bereits beschriebenen Datenaufbereitungs-
Methoden auch einige Analyse-Methoden und -Möglichkeiten. Sie sind im Register Daten
unter der Gruppe Prognose mit dem Eintrag Was-wäre-wenn-Analyse zu finden.
Analyse-Methode Anwendung
Szenario-Manager Erlaubt die Darstellung verschiedener, auch sehr komplexer Szenarien
mit festgelegten Werten
Zielwertsuche Erlaubt die Variation von Parametern, die in Abhängigkeit eines
Zielwertes stehen
Datentabelle Zeigt gleichzeitig die Ergebnisse unterschiedlicher Eingaben
Prognoseblatt Erstellt Datentrends auf einem zusätzlichen Arbeitsblatt
5.1 Szenarien
Ein Unternehmen möchte ein neues Produkt auf den Markt bringen und bestimmt durch eine
vereinfachte Kalkulation (Bild 5-1) den Verkaufspreis. Nach der Festlegung, mit welchen
Kosten die einzelnen Bereiche beteiligt sind, wird im zweiten Schritt aus der zu fertigenden
Stückzahl unter Beachtung von Gewinn und Steuern der Preis des einzelnen Produkts
bestimmt.
XCT_05-01_Szenarien.xlsm
Bild 5-1
Beispiel einer
vereinfachten
Preiskalkulation
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_5
204 5 Integrierte Analyse-Methoden
Den größten Anteil am Verkaufspreis tragen die Einzelkosten der Abteilungen. Es ist also
denkbar, dass die genannten Kosten unter Annahme von diversen Einflüssen größer oder
kleiner werden könnten. Neben den vorgegebenen Kosten werden daher in weiteren Spalten
Kosten für ein Worst-Case-Szenario bzw. für ein Best-Case-Szenario aufgeführt.
Beim ersten Worst-Case nehmen Materialkosten einen steigenden Einfluss auf die Kalkulation.
Beim zweiten Worst-Case sind es steigende Löhne. Die Kosten für die Best-Case-Szenarien
stehen für einen gegenläufigen Trend.
Zellen current worst case 1 worst case 2 best case 1 best case 2
B2 12.400 12.400 15.200 12.400 9.900
B3 10.200 13.400 10.200 6.900 10.200
B4 11.500 12.600 13.800 10.700 7.900
B5 5.400 5.400 6.200 5.400 4.600
B6 9.400 9.400 11.000 9.400 6.300
B7 10.400 12.100 13.400 9.300 8.900
Im Register Daten, in der Gruppe Prognose gibt es eine Auswahlliste unter Was-wäre-wenn-
Analyse. Darin befindet sich der Szenario-Manager, in dem die unterschiedlichen Szenarien
durch Hinzufügen und Bearbeiten erstellt werden können (Bild 5-2).
Bild 5-2
Szenario-
Manager
Mit der Schaltfläche Hinzufügen öffnet sich das Dialogfenster Szenario hinzufügen. Nach der
Eingabe eines Szenario Namens, werden die veränderbaren Zellen angegeben. Dann folgt die
Eingabe der Szenario Werte.
Nach der Erstellung aller Szenarien wird mit der Schaltfläche Zusammenfassung ein
Dialogfenster (Bild 5-3) gezeigt. Es erlaubt die Wahl zwischen einem Arbeitsblatt-Bericht und
einer Pivot-Tabelle. Wichtig ist die Angabe der Ergebniszelle(n).
5.1 Szenarien 205
Bild 5-3
Szenario Bericht
bestimmen
Mit der Bestätigung wird ein Szenario Bericht auf einem gesonderten Blatt erstellt (Bild 5-4).
Eine Marktanalyse mit den Szenarien Werten kann wieder einen erheblichen Einfluss auf das
Vorhaben ausüben.
Die Erstellung von Szenarien unter VBA ist um ein Vielfaches leichter.
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Szenarien Einzelkosten")
'alte Szenarien löschen
For Each scnTemp In wshTemp.Scenarios
scnTemp.Delete
Next scnTemp
206 5 Integrierte Analyse-Methoden
'Zwischenablage leeren
Application.CutCopyMode = False
'neue Szenarien anlegen
For iCount = 1 To 4
sName = Cells(1, 4 + iCount)
vTemp = Range(sName)
ActiveSheet.Scenarios.Add _
Name:=sName, _
ChangingCells:="Einzelkosten", _
Values:=vTemp, _
Comment:="", _
Locked:=True, _
Hidden:=False
Next iCount
'Report erstellen
ActiveSheet.Scenarios.CreateSummary _
ReportType:=xlStandardSummary, _
ResultCells:=Range("B16")
End Sub
Zur Visualisierung hätte ich gerne das Verbunddiagramm genommen. Leider können dort nur
maximal fünf Säulen erstellt werden. Meine Wahl (Codeliste 5-2) fiel daher auf das
Liniendiagramm. Es kann deutlich mehr Datenreihen aufnehmen und die Darstellung des
Verkaufspreises auf der Sekundärachse ist auch möglich (Bild 5-5).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Szenariobericht")
'Diagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(227, xlLine)
Set chrTemp = shpTemp.Chart
With chrTemp
'Diagramm und Beschriftung
.SetSourceData Source:=Range("D6:H6")
.FullSeriesCollection(1).XValues = "=Szenariobericht!D3:H3"
.FullSeriesCollection(1).AxisGroup = 1
.HasTitle = True
.ChartTitle.Text = "Szenarien"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Kosten / Abteilung"
'weitere Datenreihen
For iCount = 2 To 6
5.1 Szenarien 207
5.2 Zielwertsuche
Im Gegensatz zu den üblichen Analyse-Methoden, die aus bekannten Parameterwerten ein
unbekanntes Ergebnis liefern, ist die Zielwertsuche eine Methode, die ausgehend vom Ergebnis
nach den erforderlichen Parameterwerten fragt.
XCT_05-02_Zielwertsuche.xlsm
Als Beispiel liegt eine Kreditberechnung mit Ratentilgung vor (Bild 5-6). Mit dem
vorgesehenen Tilgungsbetrag von 12.000 € wird nicht das optimale Ergebnis erreicht, da am
Ende der Laufzeit noch ein Restbetrag von 8.000 € bleibt.
Bild 5-6
Kredit mit
vorgegebenem
Tilgungsbetrag
Bild 5-7
Zielwertsuche
Als Zielwert für die Zielzelle den Wert Null und als veränderbare Zelle den
Tilgungsbetrag C5 eintragen
Das Ergebnis ist ein Tilgungsbetrag (Bild 5-8), der nach sechs Jahren Laufzeit als
Endkapitalwert den Wert Null liefert.
Bild 5-8
Tilgung mit
Endkapital
Null
Die Zielwertsuche in VBA besteht nur aus einer Anweisung (Codeliste 5-3).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Tilgungsplan")
'Zielwertsuche
210 5 Integrierte Analyse-Methoden
With wshTemp
.Range("F13").Select
.Range("F13").GoalSeek Goal:=0, _
ChangingCell:=Range("C5")
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Zinsen- und Tilgungsbeträge lassen sich sehr anschaulich (Bild 5-9) in einem Säulendiagramm
darstellen. Sie werden markiert und ein gestapeltes Säulendiagramm aufgerufen.
Bild 5-9
Tilgung mit
Endkapital Null
Der Vorgang ist auch mit einer VBA-Prozedur (Codeliste 5-4) leicht auszuführen.
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Tilgungsplan")
'Diagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(297, xlColumnStacked)
Set chrTemp = shpTemp.Chart
With chrTemp
'Diagramm und Beschriftung
.SetSourceData Source:=Range("C8:D13")
.HasTitle = True
.ChartTitle.Text = "Zins- und Tilgungsbeträge"
.FullSeriesCollection(1).Name = Range("C7")
.FullSeriesCollection(2).Name = Range("D7")
5.3 Datentabelle mit einer Variablen 211
.SetElement (msoElementLegendTop)
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
XCT_05-03_Datentabelle.xlsm
Als Anwendungsbeispiel betrachten wir noch einmal einen Kredit mit gleichbleibenden
Zahlungen (Annuitätentilgung) (Bild 5-10).
Bild 5-10
Kreditparameter zur
Annuitätentilgung
Die Zahlung habe ich bewusst etwas abseits eingestellt (Bild 5-11), damit wir darum herum
eine Datentabelle erstellen können. Denn uns interessieren verschiedene Zinssätze und die sich
daraus ergebenden Zahlungen.
212 5 Integrierte Analyse-Methoden
Bild 5-11
Berechnung
der
Zahlung
Natürlich könnten wir die entsprechenden Zinssätze jeweils eintragen und das Ergebnis
notieren, doch einfacher wird es mit der Datentabelle (Bild 5-12). Dort tragen wir alle
Zinssätze ein und markieren den Bereich D2:E10, alle Zinssätze zusammen mit der Formel und
dem Ergebnisbereich.
Bild 5-12
Anlegen
einer
Datentabelle
Unter dem Register Daten wird in der Gruppe Prognose die Was-wäre-wenn-Analyse
aufgerufen und darunter Datentabelle gewählt. Damit erscheint ein Dialogfeld (Bild 5-12), in
dem das Eingabefeld Werte aus Spalte: den Bereichsnamen Zinssatz erhält. Die Ergebnisse
bekommen abschließend das Währungsformat zugeordnet (Bild 5-13).
Bild 5-13
Ergebnisse in der
Datentabelle
Durch den Aufruf der Methode hält sich der Programmieraufwand in VBA (Codeliste 5-5) in
Grenzen.
Bild 5-14
Datentabelle für
zwei Variable
Das Dialogfeld zur Datentabelle erhält die erforderlichen Angaben zum Zeilen- und
Spaltenwert. Nach der Eingabebestätigung mit OK werden die Ergebnisse angezeigt, die
ebenfalls noch das Währungsformat erhalten (Bild 5-15).
Bild 5-15
Ergebnisse
im Datenfeld
=ZEICHEN(Codezahl)
erstellt aus einer ASCII-Codezahl das zugehörige Zeichen. In der ASCII-Tabelle befinden sich
auch Steuerzeichen, die eine Funktionalität besitzen, aber nicht sichtbar sind.
Von besonderem Charme ist die Nutzung des LineFeeds (Tasten ALT + ENTER) mit dem
ASCI-Codewert 10. Als Beispiel haben wir zwei Werte ″123,45″ und ″34,21″ vorliegen. Wenn
wir sie mit diesem Steuerzeichen verbinden und in eine Zelle als Formel schreiben, dann
werden sie untereinander dargestellt (Bild 5-16). Vorausgesetzt, die Zelle hat über ihr
Kontextmenü unter Zellen formatieren und der Option Zeilenumbruch im Register Ausrichtung
die Freigabe zum Zeilenumbruch.
Bild 5-16
Zwei Werte als
Text in einer Zelle
Als Anwendungsbeispiel betrachten wir einen Investitionsplan (Bild 5-17), bei dem der
Investitionswert über einen bestimmten Zeitraum durch Beträge zurückfließt. Das Besondere
an dem Plan ist, dass sich Investition und Rückfluss eine Zelle teilen.
Bild 5-17
Investitionsplan
Bild 5-18
Bestimmung
der
Rückflüsse
5.5 Datentabelle mit mehr als zwei Variablen 215
In einer Datentabelle sollen nun zu den Variablen Investition, Rückfluss und Laufzeit, der
interne Zinsfuß und der Nettobarwert bestimmt werden (Bild 5-19).
5.6 Prognoseblatt
Die Methode Prognoseblatt erlaubt eine schnelle Prognose über zukünftige Werte auf der Basis
vorhandener Werte und ihre zeitliche Entwicklung. Im Gegensatz zur TREND-Funktion
können auf der vorhandenen Zeitachse auch einige Werte (max. 30 %) fehlen (Bild 5-21).
Wenn eine Prognose aufgerufen wird, dann erstellt Excel sie auf einem neuen Arbeitsblatt in
einer Tabelle mit vorhandenen und vorhergesagten Werten, einschließlich einem Diagramm.
XCT_05-04_Prognose.xlsm
5.6 Prognoseblatt 217
Bild 5-21
Beispiel
vorhandener
Umsatzdaten
Durch Markieren einer beliebigen Zelle in der Tabelle und dem Aufruf der Methode
Prognoseblatt unter dem Register Daten in der Gruppe Prognose wird ein Dialogfeld
Prognosearbeitsblatt erstellen eingeblendet (Bild 5-22).
Bild 5-22
Prognoseblatt
erstellen
Bild 5-23
Prognose
zum
Beispiel
Vor dem Erstellen der Prognose kann im Dialogfenster unter Optionen eine Anpassung der
Prognose erfolgen. Ebenso kann im Dialogfeld (oben rechts) statt eines Liniendiagramms auch
ein Säulendiagramm ausgewählt werden. Die Erstellung einer Prognose per VBA (Codeliste 5-
7) ist ebenfalls durch eine Anweisung mit vielen Parametern möglich. Die Bedeutung der
Parameter lässt sich im Objektkatalog finden.
Alternativ lässt sich mit dem Charttyp xlForecastChartTypeColumn auch ein Säulendiagramm
(Bild 5-24) erstellen.
Bild 5-24
Säulendiagram
m zur Prognose
Produkt M1 M2 Gewinn
P1 (A) 6 2 3
P2 (B) 4 4 5
160 h/Woche 120 h/Woche
220 5 Integrierte Analyse-Methoden
Wenn A die wöchentliche Produktion von P1 und B die wöchentliche Produktion von P2 ist,
dann ist
3𝐴 + 5𝐵 => 𝑀𝑎𝑥𝑖𝑚𝑢𝑚 (5.3)
gesucht, mit den Restriktionen:
6𝐴 + 4𝐵 ≤ 160
2𝐴 + 4𝐵 ≤ 120 (5.4)
𝑚𝑖𝑡 𝐴, 𝐵 ≥ 0.
Grafisch ist dieses Problem direkt lösbar (Bild 5-25), wenn man die Ungleichungen (5.4) als
Gleichungen betrachtet und sie in einem Koordinatensystem als Funktionen zeichnet.
Bild 5-25
Grafische Lösung
Da Excel auch die Matrizenrechnung beherrscht, gibt es eine elegante rechnerische Lösung.
Die Lösung eines linearen Gleichungssystems
𝐴𝑥 = 𝑏 (5.5)
kann bei regulären Matrizen durch
𝑥=𝐴 𝑏 (5.6)
angegeben werden. Eine quadratische Matrix wird als regulär bezeichnet, wenn die
Determinante der Matrix ungleich Null ist. Die Determinante zum Beispiel hat den Wert 16
(Bild 5-26). Die Multiplikation der inversen Matrix A-1 mit dem Vektor b liefert den
Lösungsvektor ist. Die Lösung für ein Maximum an Gewinn lautet:
3 ∙ 10 + 5 ∙ 25 = 155 €.
Bild 5-26
Matrizenrechnung
5.8 Deterministische Simulation 221
XCT_05-05_DeterministischeSimulation.xlsm
Um den Sachverhalt deutlich darzustellen, benutze ich ein sehr einfaches Beispiel mit der
Differentialgleichung für beschränktes Wachstum
𝑓 (𝑡) = 𝑘(𝐺 − 𝑓(𝑡)) (5.8)
und wir betrachten die Grenzen des Wachstums am Beispiel Kundenbeziehung. Ein
Unternehmen hat 200 Kunden und möchte durch eine intensive Aktion die Anzahl auf 400
erhöhen. Ein Problem ist die Serviceabteilung, denn bei starker Auslastung kommt es auch
wieder zu Kundenverlusten. Mithilfe der Sollkurve für beschränktes Wachstum soll ein
Abgleich mit dem tatsächlichen Wachstum stattfinden. Betrachtet wird ein Zeitintervall von
einer Woche (sehr groß) und man rechnet in der ersten Woche mit fünf neuen Kunden. Damit
bestimmt sich der Wachstumsfaktor aus
𝑘=( )∙
=0,00357143 (5.9)
Bild 5-27
Kundenwachstum
Die Visualisierung im Liniendiagramm (Bild 5-28) zeigt eine langsame Annäherung an die
Zielgröße.
Bild 5-28
Kundenwachstum
das Intervall (0,1) aufgeteilt wird, sich immer die gleiche Anzahl Pseudozufallszahlen pro
Teilintervall ergeben.
Unter dem Register Daten, in den Gruppe Analyse gibt es zur Datenanalyse die Methode
Zufallszahlengenerierung (Bild 5-29).
Bild 5-29
Zufallszahlengenerierung
Ein Histogramm (Bild 5-30) zeigt die Gleichverteilung der erzeugten Pseudozufallszahlen mit
einer Anomalie am Intervallende.
Bild 5-30
Zufallszahlenhäufigkeit
Zum Thema Zufall stellt Excel zwei (drei) Funktionen (Tabelle 5-10) bereit.
XCT_05-06_ProbabilistischeSimulation.xlsm
Sehr beliebt sind Simulationen von Warteschlangen- und Lebensdauer-Problemen. Auch dazu
wieder ein einfaches Problem. In einem Unternehmen erzielt eine Fertigungsstraße einen
Umsatz von 12.000 € pro Woche und 40 Stunden Laufzeit (Bild 5-31). Die
Ausfallwahrscheinlichkeit der Anlage liegt aus Erfahrungswerten bei 0,2/Stunde. Die
erforderliche Reparaturzeit liegt im Mittelwert bei zwei Stunden. Es stellt sich die Frage,
welcher Umsatz in einem Monat (mit 160 h) zu erwarten ist.
In der Spalte Ereignis wird die Reparaturzeit eingetragen, sobald die Pseudozufallszahl unter
der Wahrscheinlichkeit liegt. In der Spalte Status wird die anstehende Reparaturzeit summiert,
da während der Reparatur durch Probelauf eine weitere Reparatur anstehen kann.
Bild 5-31
Ausfallsimulation
5.9 Probabilistische Simulation 225
Die Visualisierung der Umsatzzunahme (Bild 5-32) ändert sich mit jeder Auswertung. Die
Prozedur UmsatzSimulation (Codeliste 5-8) erzeugt mit jedem Aufruf eine neue Simulation.
Bild 5-32
Umsatzsimulation
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Probabilistische Simulation")
With wshTemp
226 5 Integrierte Analyse-Methoden
Randomize
dx = Time
For lRow = 3 To 162
dx = Rnd(dx)
If dx <= Range("Ausfallwahrscheinlichkeit") Then
.Cells(lRow, 5) = Range("Reparaturzeit")
Else
.Cells(lRow, 5) = 0
End If
If .Cells(lRow - 1, 6) > 0 Then
.Cells(lRow, 6) = .Cells(lRow - 1, 6) - 1 + _
.Cells(lRow, 5)
Else
.Cells(lRow, 6) = .Cells(lRow - 1, 6) + _
.Cells(lRow, 5)
End If
If .Cells(lRow, 6) = 0 Then
.Cells(lRow, 7) = .Cells(lRow - 1, 7) + _
Range("Umsatz") / Range("Produktionszeit")
Else
.Cells(lRow, 7) = .Cells(lRow - 1, 7)
End If
Next lRow
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
227
6 Ergänzende Analyse-Methoden
Excel stellt mit einem Analyse-Add-In Methoden bereit, die durch den Einsatz kombinierter
Funktionen viel Aufwand und Zeit einsparen. Es handelt sich dabei sowohl um statische wie
auch technische Methoden. Neben Ergebnissen und Tabellen liefern sie teilweise auch
Diagramme. Durchführbar sind sie jeweils immer nur auf einem Arbeitsblatt, doch es gibt ja
noch VBA.
Analyse-Methode Anwendung
Anova enthält verschiedene Formen von Varianzanalysen:
Einfaktorielle Varianzanalyse und zweifaktorielle
Varianzanalyse mit und ohne Messwiederholung
Korrelation bestimmt den Korrelationskoeffizienten und erstellt eine
Korrelationsmatrix
Kovarianz bestimmt Korrelation und Kovarianz
Populationskenngrößen bestimmt Tendenz und Streuung
Exponentielles Glätten erstellt eine Prognose aus vorherigen Perioden
Zwei-Stichproben F-Test vergleicht die Varianzen zweier Grundgesamtheiten
Fourieranalyse löst Probleme in linearen Systemen
Histogramm bestimmt Häufigkeiten in Datenmengen
Gleitender Durchschnitt erstellt eine Prognose aus Mittelwerten vorheriger Perioden
Zufallszahlengenerierung erzeugt gleichverteilte Pseudozufallszahlen
Rang und Quantil bestimmt Rang und Quantilsrang vorliegender Werte
Regression erstellt eine Regressionsanalyse nach der Methode kleinster
Fehlerquadrate
Stichprobenbeziehung erstellt eine Stichprobe aus einer Grundgesamtheit
t-Test erstellt einen Test auf der Gleichheit von Stichproben
Gaußtest erstellt Zwei-Stichproben-Test mit bekannten Varianzen
In den nachfolgenden Unterkapiteln betrachten wir den Einsatz einer Auswahl dieser
Methoden im strategischen Controlling anhand einfacher Beispiele.
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_6
228 6 Ergänzende Analyse-Methoden
Im Fußbereich der Übersicht kann unter Verwalten eine Übersicht der Excel-Add-Ins
aufgerufen werden (Bild 6-2).
Bild 6-2
Aufruf des
Analyse-Add-
Ins
Jedes installierte Add-In kann durch Auswahl freigeschaltet werden (Bild 6-3).
Bild 6-3
Auswahl von
Add-Ins
6.2 Histogramm 229
6.2 Histogramm
Bereits durch die Einteilung von Werten lassen sich Informationen gewinnen. Das verwendete
Beispiel von Messwerten (Bild 6-4) ist atypisch, denn in der Praxis liegen oft tausende von
Messwerten vor. Für unsere Betrachtung zum Histogramm ist die Anzahl jedoch unerheblich.
XCT_06-01_Histogramm.xlsm
Bild 6-4
Messdaten und
gewünschte Klassen
Aus der Matrix (Tabelle1) wird nicht ersichtlich, in welchem Wertebereich sich die Daten wie
häufig befinden. Eine Einteilung des Wertebereichs (Tabelle2) von 80 bis 120 in neun Klassen
gibt einen ersten Eindruck. Im Register Daten, in der Gruppe Analyse rufen wir die Methode
Datenanalyse auf. Im sich öffnenden Dialogfenster Analyse-Funktionen wählen wir die
Methode Histogramm (Bild 6-5).
Bild 6-5
Dialogfenster
Analysemethoden
Im Dialogfenster Histogramm (Bild 6-6) habe ich auf Bereichsnamen verzichtet, da sich
ebenso gut die bereits vorhandenen Tabellennamen eignen. Das neue Tabellenblatt erhält den
Namen Histogramm. Als Diagrammform habe ich die Pareto Form gewählt.
230 6 Ergänzende Analyse-Methoden
Bild 6-6
Dialogfenster
Histogramm
Die Methode gibt das Ergebnis auf einem gesonderten Blatt (Bild 6-7), wie eingestellt, aus.
Bild 6-7
Ergebnis der
Auswertung
Die Behandlung der Methode in VBA (Codeliste 6-1) ist ebenfalls recht übersichtlich,
einschließlich eines Pareto-Diagramms (Bild 6-8).
With chrTemp
.HasTitle = True
.ChartTitle.Text = "Histogramm der Messwerte"
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Bild 6-8
Pareto-Diagramm
zum Histogramm
Excel verfügt auch über eine HÄUFIGKEIT-Funktion, mir der sich das Problem ebenfalls
leicht lösen lässt.
Syntax der HÄUFIGKEIT-Funktion:
=HÄUFIGKEIT(Daten.Klassen)
Die Funktion liefert eine Häufigkeitsverteilung als einspaltige Matrix (Bild 6-9). Entsprechend
wird der Ausgabebereich H2:H10 markiert und die Formel in der Befehlszeile als Matrix-
Formel (STRG+SCIFT*ENTER) eingegeben.
Bild 6-9
Anwendung der
HÄUFIGKEIT-
Funktion
232 6 Ergänzende Analyse-Methoden
6.3 Populationskenngrößen
Diese Methode liefert Kennwerte über die zentrale Tendenz und die Streuung der vorliegenden
Daten.
XCT_06-02_Population.xlsm
Wir verwenden noch einmal das Beispiel mit den Messwerten und rufen unter Datenanalyse
diesmal die Methode Populationskenngrößen auf. Im Dialogfenster Populationskenngrößen
(Bild 6-10) bekommt der Eingabebereich wieder den Tabellennamen.
Bild 6-10
Dialogfenster
Populationskenngrößen
Durch Ausblenden mehrfacher Beschriftungsspalten ergibt sich das Ergebnisblatt (Bild 6-11).
6.3 Populationskenngrößen 233
Bild 6-11
Populationskenngrößen
der Messwerte
XCT_06-03_RegressionKorrelation.xlsm
Bild 6-12
Einflussfaktoren
Bereich Bereichsname
B2:B6 Erfolg
C2:C6 Risiko
B2:C6 Daten
Zur Betrachtung von zwei Wertepaaren eignet sich besonders gut das Punktdiagramm. Dazu
wird der reine Datenbereich (B2:C6) markiert und das Punktdiagramm eingefügt (Bild 6-13).
Bild 6-13
Punktdiagramm
Risiko / Erfolg
Bei der Betrachtung des Diagramms lässt sich ein linearer Zusammenhang derart vermuten,
dass bei den vorliegenden Daten mit steigender Erfolgsaussicht auch das Risiko steigt.
6.4 Regression und Korrelation 235
'Excel Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Daten")
Set shptemp = wshTemp.Shapes.AddChart2(240, xlXYScatter)
Set chrTemp = shptemp.Chart
With chrTemp
.SetSourceData Source:=Sheets("Daten").Range("B2:C6")
.FullSeriesCollection(1).Trendlines.Add
.FullSeriesCollection(1).Trendlines(1).DisplayEquation = True
' .ChartArea.Select
.HasTitle = True
.ChartTitle.Characters.Text = "Risiko / Erfolg"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Erfolgsaussicht [%]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Risikowahrscheinlichkeit [%]"
End With
'aufräumen
Set rngTemp = Nothing
Set shptemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
Auch in der Datenanalyse gibt es die Methode Regression, die Zusammenhänge wiedergibt.
Sie erstellt ein neues Tabellenblatt, in dem wir die Parameter der Geradengleichung
wiederfinden (rotes Quadrat). Zunächst aber öffnet sich ein Dialogfenster (Bild 6-14), in dem
Bereichsnamen für die x-Achse (hier Erfolg) und für die y-Achse (hier Risiko) angegeben
236 6 Ergänzende Analyse-Methoden
werden. Für das Arbeitsblatt mit dem Report kann auch der Registername (hier Regression)
eingetragen werden.
Bild 6-14
Dialogfenster
Regression
Im Report finden wir die Parameter der Geradengleichung wieder (Bild 6-15 rotes Rechteck).
Ob es sich dabei wirklich um einen funktionalen Zusammenhang handelt, sagt die Trendlinie
nicht, denn schließlich lässt sie sich durch beliebige Datenpunkte legen.
6.5 VBA-Funktion Korrelationsmatrix. 237
Mit der Methode Korrelation bestimmen wir im nächsten Schritt (Bild 6-16) den
Korrelationskoeffizienten. Er kann uns sagen, ob in dem Beispiel die Risikowahrscheinlichkeit
in Beziehung zur Erfolgsaussicht steht.
Bild 6-16
Dialogfenster
Korrelation
Grundsätzlich kann der Korrelationskoeffizient nur Werte im Intervall [1;-1] annehmen. Bei
einem Wert nahe 1 besteht ein positiver linearer Zusammenhang. Bei einem Wert nahe -1 ein
entsprechend negativer. Liegt der Wert nahe Null, dann besteht kein linearer Zusammenhang,
so wie in unserem Beispiel mit 0,306 (Bild 6-17).
Bild 6-17
Korrelationskoeffizient
XCT_06-04_Korrelationsmatrix.xlsm
238 6 Ergänzende Analyse-Methoden
Bild 6-18
Beispiel einer
Merkmalstabelle
Bereich Bereichsname
B2:D16 Daten
Die nachfolgende Funktion erwartet als Parameter den auszuwertenden Bereich. Die Matrix r
vom Typ Double speichert zunächst die berechneten Korrelationen mithilfe der Worksheet-
Funktion Correl, bevor die Matrix dann an den markierten Bereich übergeben wird. Eine
Merkmalstabelle mit n Merkmalen liefert eine n x n Korrelationsmatrix.
n = Rng.Columns.Count
Dim r() As Double
ReDim r(1 To n, 1 To n)
For i = 1 To n
For j = 1 To n
Set c1 = Rng.Columns(i)
Set c2 = Rng.Columns(j)
r(i, j) = Application.WorksheetFunction.Correl(c1, c2)
Next j
Next i
KorMat = r
End Function
Zur Anwendung der Funktion wird ein n x n Zellbereich markiert, der die Korrelationsmatrix
aufnehmen soll. Die Befehlszeile erhält die Matrixformel
=KorMat(Daten),
die mit den Tasten STRG+UMSCH+RETURN bestätigt wird und dann die Matrixschreibweise
{=KorMat(Daten)}
6.6 Solver 239
zeigt. Die Werte in der Korrelationsmatrix (Bild 6-19) zeigen, dass p1 und p3 positiv, p1 und
p2 schwach negativ sind und p2 und p3 nicht korrelieren.
Bild 6-19
Korrelationsmatrix
6.6 Solver
Excel verfügt mit dem Add-In Solver über eine Methode zur Lösung von Gleichungen.
Voraussetzung dabei ist, dass der funktionale Zusammenhang zwischen den gesuchten
Parametern bekannt ist.
XCT_06-05_Solver.xlsm
Als Anwendungsbeispiel liegen die Werte von zwei Parametern vor (Bild 6-20). Der in einer
Stunde erwirtschaftete Gewinn steht in funktionalem Zusammenhang mit den in dieser Zeit
gefertigten Stückzahlen.
Bild 6-20
Parameterliste
Bekannt ist außerdem, dass der Zusammenhang einem Polynom dritten Grades (6.1) folgt.
𝑦 =𝑎∙𝑥 +𝑏∙𝑥 +𝑐∙𝑥+𝑑 (6.1)
Ausgang für den Solver ist das nachfolgende Schema (Bild 6-21).
Bild 6-21
Funktionsschema
240 6 Ergänzende Analyse-Methoden
Als Ausgangswerte werden alle Koeffizienten a, b, c und d des Polynoms auf Null gesetzt. Die
Visualisierung erfolgt mit einem Diagramm vom Typ Punkte mit interpolierenden Linien und
Datenpunkten. Zuerst durch Markierung der Parameter und dann über das Kontextmenü Daten
auswählen mit Hinzufügen die Funktionswerte (Bild 6-22).
Bild 6-22
Messwerte (blau)
und Funktionswerte
(rot)
Nun gilt es, die Summe der Quadrate der Abweichungen (u bzw. u2) auf ein Minimum zu
reduzieren. Diese Aufgabe übernimmt der Solver. Unter dem Register Daten in der Gruppe
Analyse steht die Methode Solver. Der Aufruf öffnet das Dialogfenster Solver-Parameter (Bild
6-23). Unter Ziel festlegen wird Ergebnis eingetragen und unter Bis das Min(imum) gewählt.
Als Lösungsmethode wählen wir GRG-Nichtlinear. Weitere Einstellungen müssen mit der
Schaltfläche Optionen aufgerufen werden.
6.6 Solver 241
Mit dem Aufruf Lösen startet die erste Iteration. Nach kurzer Berechnung folgt ein Stopp, um
ein gefundenes Ergebnis anzuzeigen (Bild 6-24).
242 6 Ergänzende Analyse-Methoden
Nach fünf Iterationen ist das Ergebnis gefunden (Bild 6-25). Beide Funktionen sind nahezu
deckungsgleich.
Bild 6-25
Ergebnis
vom Solver
XCT_04-09_Produktionsdaten.xlsm
Als Beispiel verwenden wir noch einmal die Produktionsdaten, mit denen wir in Kapitel 4.6
mit MS Query eine Relation aufgebaut und ausgewertet haben. Waren diese Schritte dort noch
Einzelaktionen, so sind sie hier vereint lösbar.
Im ersten Schritt wird unter dem Register Start, in der Gruppe Externe Daten, die Methode
Daten abrufen gewählt. Es erscheint eine Auswahlliste für verschiedene Quellen, in der wir
Excel wählen und dann direkt im Dateieditor die Arbeitsmappe wählen. Mit der Wahl öffnet
sich ein weiteres Fenster, der Navigator (Bild 7-1). Er zeigt alle vorhandenen Strukturen mit
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_7
244 7 Excel Power Plattform
Symbolart und Bezeichnung. Außerdem verfügt der Navigator über eine Vorschau, die den
Inhalt der markierten Elemente wiedergibt.
Bereits im Navigator können ausgewählte Elemente bearbeitet werden. Sie können hier
Teilmengen auswählen oder durch Filtern gewinnen. Nach der Auswahl erfolgt mit der
Schaltfläche Laden das Einlesen der markierten Elemente, in diesem Fall die Arbeitsblätter
Maschinenkosten und Personalkosten.
Der Power BI Desktop verfügt über mehrere Oberflächen, steuerbar über eine linke schmale
Spalte mit Symbolen:
Die Berichtsansicht, angedeutet durch ein Diagramm, dient zur Erstellung von Berichten.
Die Datenansicht, angedeutet durch eine Tabelle, gibt die Inhalte der ausgewählten
Tabellen wieder, wählbar über eine rechte Spalte, ähnlich einer Pivot-Feldliste. Hier
können Umformungen und Berechnungen durchgeführt werden.
Die Beziehungsansicht, angedeutet durch Tabellen mit Relationen, verwaltet Beziehungen
der Daten untereinander. Die Darstellung ist ähnlich einem UML Klassendiagramm, in das
bereits eine Beziehung eingetragen ist (Bild 7-2).
Bild 7-2
Klassendiagramm
der Arbeitsblätter
7.1 Power BI Desktop 245
In Beziehungsansicht interessiert uns nur die Beziehung zwischen den Arbeitsblättern. Alle
anderen Elemente löschen wir in der Ansicht. Die Beziehung lässt sich aber auch genauso mit
den Tabellen durchführen. Unter dem Register Beziehungen verwalten, wird die bestehende
Beziehung angezeigt (Bild 7-3), sie kann hier aber auch neu eingetragen werden.
Nachdem die Beziehungen erstellt wurden, können in der Datenansicht die erforderlichen
Berechnungen ausgeführt werden (Bild 7-4).
Im Kontextmenü der Tabelle rufen wir die Methode Neue Spalte auf. Es entsteht rechts von der
Tabelle eine neue Spalte mit der Überschrift Spalte 1. In der Befehlszeile wird mit dem
Formelstart Spalte = eine Formel erwartet. Durch Eingabe der Formel:
LKosten = Personalkosten[Std]*Personalkosten[Lohn] (7.1)
wird mit den Feldelementen auch gleichzeitig eine neue Spaltenüberschrift erstellt. In eine
weitere neue Spalte geben wird die Formel:
MKosten = Personalkosten[Std]*RELATED(Maschinenkosten[Stundensatz]) (7.2)
ein und formatieren die Werte ebenfalls mit Währung. Die Funktion RELATED erlaubt den
Zugriff auf Elemente in verknüpften Tabellen. Als letzte Spalte berechnen wir:
GKosten = Personalkosten[LKosten] + Personalkosten[MKosten]. (7.3)
Im nächsten Schritt soll eine neue Tabelle erstellt werden. In der Oberfläche Daten unter
Modellierung wählen wir Neue Tabelle. Die erste Spalte soll die Produkte enthalten (Bild 7-5).
Wir erreichen dies mit der Formel:
Tabelle = VALUES(Personalkosten[Produkt]). (7.4)
Bild 7-5
Neue Tabelle mit
Werten füllen
In der Beziehungsansicht erstellen wir durch Ziehen des Elements Produkt in den
Personalkosten auf das Element Produkt in Tabelle Produkte eine neue Beziehung (Bild 7-6).
Mit dem Kontextmenü der Tabelle Produkte erstellen wir eine neue Spalte und tragen als
Formel:
GKosten = SUMX(RELATEDTABLE(Personalkosten);Personalkosten[GKosten]) (7.5)
ein. Die Ergebniswerte müssen anschließend noch formatiert werden (Bild 7-7).
Bild 7-7
Neue Tabelle
mit
Produkten
und ihren
Gesamtkosten
Bild 7-8
Felder in der
Berichtsansicht
248 7 Excel Power Plattform
Unter Visualisierungen sind zunächst Diagramme und andere grafische Elemente zu finden
(Bild 7-9). Darunter gibt es zwei Symbole für Werte und Format. Über Werte werden den
Grafiken Feldelemente zugeordnet, je nach dem Typ der Grafik. Über Format sind
Einstellungen zum Design möglich, wie Schriftgröße, Farben, etc. Im nächsten Abschnitt Filter
werden Filter-Einstellungen zur Seitenebene und den Berichtsstufen vorgegeben.
Bild 7-9
Grafische
Elemente in der
Berichtsansicht
Zu unserem Beispiel (Bild 7-10) habe ich einige Elemente in der Berichtsansicht eingestellt.
Nachfolgend werde ich ihre Entstehung beschreiben:
Oben links befindet sich eine Art Tabelle, die ich durch Ziehen der Feldelemente aus der
Feldliste auf die Arbeitsfläche erzeugt habe. Summenbildung und Gesamtergebnis werden
automatisch eingestellt.
Oben in der Mitte und rechts befinden sich zwei Säulendiagramme, die durch Anklicken
des Symbols Säulendiagramm gruppiert entstanden sind. Die Zuordnung der Feldelemente
entsteht durch Ziehen von Feldelement Produkt ins Achsenfeld und Feldelement LKosten
ins Wertefeld (Bild 7-11).
Links in der Mitte und unten befinden sich zwei Maßstab-Diagramme. Die Skala in der
Mitte gibt die Anzahl Einträge wieder und die Skala unten die Anzahl Bauteile. Dazu
werden die Feldelemente Anzahl und Bauteil auf das jeweilige Wertefeld gezogen.
7.1 Power BI Desktop 249
Bild 7-10
Beispiel einer
Berichtsansicht
Bild 7-11
Grafische
Elemente in der
Berichtsansicht
Unten in der Mitte befindet sich eine Treemap, die die Anzahl Stunden für die einzelnen
Produkte wiedergibt. Dazu wird das Feldelement ins Gruppenfeld und das Feldelement Std
ins Wertefeld gezogen.
Rechts unten befindet sich ein gestapeltes Säulendiagramm. Das Feldelement Produkt
wird ins Achsenfeld und die Feldelemente LKosten und MKosten zusammen ins Wertefeld
gezogen.
Über allem befindet sich ein Textfeld, das aus dem Register Start in der Gruppe Einfügen
stammt.
Durch Anklicken eines Datenelements in der Liste oder in einem Diagramm wird automatisch
eine Filterung durchgeführt (Bild 7-12).
XCT_07-01_Produktion.pbix
250 7 Excel Power Plattform
Bild 7-12
Auswahl in der
Berichtsansicht
Eine Mehrfachauswahl ist durch Anklicken aller Datenelemente bei gedrückter STRG-Taste
möglich.
Bild 7-13
Power Map
als Add-In
Die Aufgabe von Power Map war ursprünglich eine Visualisierung von Daten mit
geographischer Zuordnung. Über eine Zeitschiene lassen sich Veränderungen per Videoclip
zeigen. Dazu ein einfaches Beispiel, mit zwei Tabellen (Bild 7-14) als Ausgangspunkt.
XCT_07-02_PowerMap.xlsm
7.2 Power Map 251
Tabelle1 enthält die anfallenden Kosten für ein Projekt und Tabelle2 die Aufgabenverteilung
der Standorte.
Bild 7-14
Projektkosten
Unter Register Einfügen, in der Gruppe Touren wählen wir 3D-Karten. Es öffnet sich ein
Arbeitsfenster mit einer Landkarte im Hintergrund, auf der die gefundenen Orte in Tabelle1
bereits markiert sind (Bild 7-15).
Bild 7-15
Power Map
Arbeitsfenster
Als Diagrammform wählen wir die gestapelte Säule und treffen durch Ziehen der Feldelemente
aus der Feldliste, Kosten zu Höhe und Datum zu Zeit, weitere Zuordnungen. Um noch die
Tabelle2 ins Spiel zu bringen, benötigen wir eine Beziehung dazu. Im Register Daten des
Excel-Arbeitsblatts unter Datentools gibt es die Methode Beziehungen, in der noch kein
Eintrag existiert. Hier erstellen wir die erforderliche Beziehung (Bild 7-16).
Bild 7-16
Beziehung
zwischen den
Tabellen
252 7 Excel Power Plattform
Danach existiert auch Tabelle2 in unserer Feldliste und wir können das Feldelement Bereich
ins Kategoriefeld ziehen. Das Ergebnis sind farblich nach Bereichen gruppierte Säulen über
den jeweiligen Standorten (Bild 7-17).
Bild 7-17
Visualisierte
Projektkosten
Zum Vergleich löst Power BI Desktop die Aufgabe mit einer Map und Blasen (Bild 7-18).
Bild 7-18
Visualisierte
Projektkosten
in Power BI
Desktop
Mit der Belegung des Zeitfeldes wird auch eine Zeitleiste angezeigt. Sie lässt sich starten und
zeigt den zeitlichen Verlauf der Kostenzunahme in den Standorten.
XCT_07-03_PowerMap.mp4
7.2 Power Map 253
XCT_07-04_PowerMap.xlsm
Eine Dreherei verfügt über sechs Maschinen, deren Aufstellung in der Produktionshalle in
einem Grundriss (Bild 7-19) (Pixel 300 x 200) vorliegen.
Bild 7-19
Grundriss der
Produktionshalle
Tabelle1 verwaltet die Positionen der Maschinen (Bild 7-20) und Tabelle2 zeigt die
Produktionsdaten eines Arbeitstages. Jeder gefertigte Auftrag wird mit Stückzahl und Uhrzeit
vermerkt.
Bild 7-20
Produktionsdaten
Natürlich müssen wir auch diesmal eine Beziehung zwischen den Tabellen über die Maschinen
herstellen. Danach folgt die Visualisierung:
Aufruf der Methode 3D-Karte und eine neue Tour wählen
Unter Start im Arbeitsfeld, in der Gruppe Szene die Methode Neue Szene aufrufen
Benutzerdefinierte Karte wählen und die Daten im Dialogfenster (Bild 7-21) anpassen
Mit der Schaltfläche Fertig übernehmen
254 7 Excel Power Plattform
Die x- und y-Feldelemente dem Ort zuordnen und als X- bzw. Y-Koordinate
definieren
Unter Höhe die Menge eingetragen
Unter Zeit die Uhrzeit eingetragen
Bild 7-21
Benutzerdefinierte
Karte einstellen
Die zeitliche Zunahme der Stückzahlen lässt sich wieder per Zeitachse betrachten (Bild 7-22).
Bild 7-22
Visualisierte
Fertigungsmengen
XCT_07-05_PowerMap.mp4
Power Query ist ebenfalls ein Add-In in Excel. Nach der Installation kann es als Befehl ins
Menüband gestellt werden. Dazu habe ich im Menüband eine benutzerdefinierte Gruppe
Power-Tools installiert und den Befehl Power Query-Editor starten hinzugefügt (Bild 7-23).
Die Methode 3D-Karte habe ich ebenfalls hier angesiedelt. Damit sind wir für ein
Anwendungsbeispiel bereit.
Bild 7-23
Benutzerdefinierte
Gruppe Power Tools
In einem ersten Schritt wollen wir eine csv-Datei einlesen und anpassen.
XCT_07-06.Umsatz Jan-Jul.csv
XCT_07-07_PowerQuery.xlsm
In einer leeren Excel-Mappe starten wir dem Power Query-Editor. Unter Start in der Gruppe
Neue Abfrage wählen wir Neue Quelle und darunter Datei mit Text/CSV. Ein Vorschaufenster
zeigt den Inhalt und wird mit OK bestätigt. Danach wird die Tabelle (Bild 7-24) geladen.
Etwas umständlich ist im Editor das breite Menüband
Bild 7-24
Eingelesene
Daten aus der
CSV-Datei
Ein zweiter Schritt ist dann oft eine Transformation und in diesem Beispiel die Umwandlung
der Zahlenwerte in der Spalte Umsatz in Währungsformat. Dazu wird die Spalte markiert und
im Register Transformieren in der Gruppe Beliebige Spalte stehen die entsprechenden
Methoden. Unter diesem Register gibt auch Funktionen, die sich auf den Datentype wie Text
oder Zahl beziehen.
Mit vorhandenen Werten können auch Auswertungen in neuen Spalten durchgeführt werden.
Wir wollen den Anteil aller Einzelumsätze zum größten Umsatz bestimmen:
256 7 Excel Power Plattform
Dazu wählen wir im Register Spalte hinzufügen in der Gruppe Aus Zahl unter Standard die
Auswahl Prozent von.
Im Dialogfenster geben wir den höchsten Wert aus dem Monat Mai vor, also 1.080.000
und bestätigen mit OK. Die Spalte Prozent von ergänzen wir mit Mai und transformieren
die Daten in den Datentyp Prozent.
Dabei werden die Daten um 100 erhöht (Fehler des Systems) und wir müssen noch einmal
die Werte durch 100 teilen (Bild 7-25).
Bild 7-25
Formierte Tabelle
Abschließend wird unter Register Start mit Schließen & laden die Tabelle aus der Abfrage
an das Excel Arbeitsblatt übergeben (Bild 7-26). Dabei verlieren wir noch einmal die
Formatierung der Daten, das Tool ist eben noch nicht perfekt. Es lohnt also nicht, schon in
der Abfrage eine Formatierung durchzuführen.
Bild 7-26
Datentabelle mit
Diagramm im
Arbeitsblatt
Will man die ganze Funktionalität von Power Query ausschöpfen, dann muss man sich mit der
Formelsprache M befassen. In Excel gibt es die IntelliSense Funktion, die Hilfe bei Eingaben
leistet. Weitere Hindernisse sind, dass in M Funktionen oft einen anderen Namen haben und
auch zwischen Groß- und Kleinschreibung unterschieden wird.
Auch hier müssen externe Daten hinzugeladen werden. Die Möglichkeiten, die sich hier
ergeben, sind vielfältiger als alle anderen Tools. Wir begnügen uns wieder mit dem Beispiel
aus den Produktionsdaten.
XCT_04-09_Produktionsdaten
Unter Externe Daten aufrufen unter aus anderen Quellen gibt es auch hier Excel-Datei zur
Auswahl. Nach der Auswahl der Datei ist es wichtig, dass die Option Erste Zeile als
Spaltenüberschrift verwenden ausgewählt wird. Mit Weiter gibt es wieder die Auswahl an
Tabellennamen und Registernamen (Bild 7-27). Wir wählen die Datentabellen und betrachten
die Vorschau (Bild 7-28). Hier können nicht verwendbare Spalten bereits ausgeblendet werden.
Wir übernehmen alle Spalten der beiden Datentabellen Personalkosten und Maschinenkosten.
Wir öffnen das PowerPivot-Fenster und können zwischen den beiden Datentabellen eine
Beziehung herstellen. Im Register Entwurf des PowerPivot-Fensters, in der Gruppe
Beziehungen wählen wir Beziehungen erstellen (Bild 7-29).
258 7 Excel Power Plattform
Bild 7-29
Beziehung
erstellen
In der Tabelle der Personalkosten ist jetzt in der Kopfzelle der Spalte MNr ein
Beziehungszeichen sichtbar (Bild 7-30). Mit der Beziehung können wir wieder unsere
Kostenberechnungen durchführen.
Mit dem Kontextmenü auf neue Spalte kann der Name geändert werden. Dann markieren wir
die erste Zelle der jeweils neuen Spalte und geben in der Befehlszeile (fx) die entsprechenden
Formeln in Tabelle 7-1) ein.
Spalte Formel
LKosten =[Std]*[Lohn]
MSatz =RELATED(Maschinenkosten[Stundensatz])
MKosten =[Std]*[MSatz]
GKosten =[LKosten]+[MKosten]
Im PowerPivot-Fenster unter dem Register Home gibt es die Methode PivotTable, deren
Auswahlfenster PivotTable, PivotChart und diverse Diagramme ausweist (Bild 7-31).
7.4 Power Pivot 259
Bild 7-31
Auswahl
PivotTable
Wir wählen ein PivotTable und damit erscheint wieder das bekannte Pivot-Schema mit der
Feldliste (Bild 7-32).
Bild 7-32
PivotTable
und
Feldliste
Nach der Zuordnung der Feldelemente erhalten wir wieder die schon bekannte Pivot-Tabelle
(Bild 7-33) mit der Kostenübersicht zu den Produkten.
Bild 7-33
PivotTable
Kosten
260 7 Excel Power Plattform
Mit der Zuordnung der Feldelemente Produkt und Bauteil in das Feld Slicer vertikal
bekommen wir Filterelemente (Bild 7-34).
Bild 7-34
Slicer
Um Slicer (Datenschnitte) anzulegen, bietet PowerPivot zwei Bereiche, den horizontalen und
den vertikalen Slicer. Der horizontale Slicer ordnet die Filterelemente oberhalb der Pivot-
Tabelle an und der vertikale links davon. Durch Auswahl eines Filterelements werden nur die
ausgewählten Werte in der zugehörigen Pivot-Tabelle dargestellt. Mehrere Filterelemente
können mit gedrückter STRG-Taste ausgewählt werden. Ein Klick auf das Filtersymbol (rechts
oben) löscht den Filter. Es können auch gleichzeitig mehrere Filter gesetzt werden. Ebenfalls
können noch nach wie vor auch Datenschnitte in einer Pivot-Tabelle erstellt werden.
Aus einer Tabelle im PowerPivot-Fenster (Bild 7-31) kann auch ein Diagramm direkt
aufgerufen werden (Bild 7-35).
Bild 7-35
Pivot-Chart
Wie schon beim Excel Pivot-Chart werden auch die Filter im Diagramm gesetzt.
Bisher haben wir neue Spalten durch einfache Berechnungen auf Zeilenebene erstellt. Dabei
konnten wir uns nur auf Werte in der aktuellen Zeile beziehen. Die Bestimmung der Summe
einer Datenmenge funktioniert auf Zeileneben nicht mehr. Um komplexere Berechnungen
auszuführen, bedarf es Measures (berechnete Felder).
7.4 Power Pivot 261
Measures und berechnete Feldelemente basieren gleichermaßen auf einer Formel, sie
unterscheiden sich aber in der Anwendung. Während berechnete Feldelemente in Zeilen- und
Spaltenfeldern platziert werden, werden Measures am häufigsten für das Wertefeld verwendet.
Ein Measure kann an zwei verschiedenen Stellen definiert werden, im PowerPivot-Fenster oder
in der PowerPivot-Feldliste. In der PowerPivot-Feldliste kann im Register Home unter Ansicht
mit der Schaltfläche Berechnungsbereich die Tabellenfläche geteilt werden. Die Trennung
markiert eine graue Linie (Bild 7-36).
Bild 7-36
Measure berechnet die
Summe der Lohnkosten
Bild 7-37
Neues
Feldelement
SumLKosten
262 7 Excel Power Plattform
Zur zweiten Möglichkeit gelangen wir über das Kontextmenü eines Tabellennamens in der
Feldliste (Bild 7-38). Unter neues Measure hinzufügen, öffnet sich ein Formeleditor und hier
kann die neue Formel eingegeben werden.
Bild 7-38
Neues Measure über
das Kontextmenü
hinzufügen
Im Dialogfenster des Formeleditors (Bild 7-39) werden bei der Formeleingabe die schon
vorhandenen Measures und Feldnamen vorgegeben. Dabei stellt sich heraus, dass es bereits
mehrere Summen als Measures gibt. Wir hätten uns also die Summenbildung im PowerPivot-
Fenster sparen können.
Bild 7-39
Neues Measure
über das
Kontextmenü
Dieses Beispiel hat deutlich gezeigt, wie Measures arbeiten. Bei Measures handelt es sich um
Regeln, die auch als solche gespeichert werden. Die Ergebnisse werden immer danach
bestimmt und belegen keinen Speicherplatz. Die bisherigen Berechnungen ließen sich auch mit
einfachen Funktionen bestimmen, doch Measures können viel mehr.
263
8 Strategisches Prozess-Controlling
Die Ausrichtung des Strategischen-Controllings ist besonders bei Prozessen sehr langlebig
angelegt. Gilt es doch, die definierten Visionen eines Unternehmens durch strategische
Frühaufklärung zu einer Strategie umzuformen.
XCT_08-01_Reifegrad.xlsm
Bild 8-1
Reifegrad-
Tabelle
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_8
264 8 Strategisches Prozess-Controlling
Die Erstellung einer solchen Tabelle ist reine Fleißarbeit, aber sie muss ja nur einmal
durchgeführt werden. Da macht es auch keinen Sinn, Bereichsnamen zu verwenden.
Betrachten wir einmal Level 1 zur Erstellung einer Gruppierung (Bild 8-2).
Bild 8-2
Gruppierung
Die Zeilen 3 bis 7 werden markiert und unter Register Daten, in der Gruppe Gliederung
die Methode Gliederung gewählt.
Danach endet die Gliederung in Zeile 8 und kann mit dem Symbol – zugeklappt, bzw. mit
Symbol + aufgeklappt werden.
Oben links von der Tabelle befinden sich die Schaltflächen 1 und 2.
1 bewirkt, dass alle Gliederungen zugeklappt werden.
2 bewirkt, dass alle Gliederungen aufgeklappt werden.
Ganz ohne Formeln kommt die Tabelle allerdings nicht aus (Tabelle 8-1). Dazu betrachten wir
den Bereich von Level 1 (Bild 8-3), dessen Formeln auch für die anderen Level gelten,
allerdings mit angepassten Zelladressen.
Bild 8-3
Auswertungsbereich
Die benutzerdefinierte Formatierung im Bereich C8:G8 durch nur zwei Semikolon sorgt dafür,
dass die Werte nicht zu sehen sind. Die bedingte Formatierung für Zelle H2 (Bild 8-4) ist
abhängig vom Wert des Reifegrades.
Bild 8-4
Bedingte
Formatierung
zum
Reifegrad
Mit einer Ereignis-Prozedur (Codeliste 8-1) müssen wir dafür sorgen, dass nicht mehr als ein
Kreuz pro Zeile eingegeben wird.
Die Anweisung Application.EnableEvents ist besonders wichtig. Mit der Abschaltung auf
False wird dafür gesorgt, dass durch Änderungen in der Zeile die Prozedur sich nicht wieder
selbst aufruft und so in eine unendliche Schleife, den sogenannten Death Loop, verfällt. Nach
der Änderung ist es genauso wichtig, dass das System wieder auf Ereignisse reagiert und
Application.EnableEvents wieder auf True gesetzt wird.
Wer mag, kann noch eine weitere Dimension in die Matrix bringen und statt eines einfachen x
Buchstaben auch Zahlen mit Bedeutung einbringen, wie etwa:
d11: dokumentiert mit Dokument Nr. 11
pu34: Prozess-Unterlage 34
ng: nach Gespräch
p24: Präsentation Nr. 24
usw.
Das dazugehörige Säulendiagramm muss ebenfalls nur einmal erstellt werden und bekommt
ein eigenes Arbeitsblatt (Bild 8-5).
266 8 Strategisches Prozess-Controlling
XCT_08-02_VMIMatrix.xlsm
Zur Erstellung einer VMI-Matrix werden alle Teilprozesse in der ersten senkrechten Spalte
eingetragen. In der obersten waagrechten Zeile stehen alle am Prozess beteiligten Mitarbeiter
und Stakeholder, z. B. auch Kunden (Bild 8-6). Eine zusätzliche Auswertung liefert dann die
Anzahl der Einträge, bezogen auf die Anzahl aller Zellen in Prozent.
Zuerst müssen wir aber die Eingaben kontrollieren und steuern. Die Ereignisprozedur
Worksheet_Change reagiert auf jede Änderung einer Zelle im aktiven Arbeitsblatt (Codeliste
8-2). Folglich prüfen wir hier, ob die Zelle im Bereich der Mitarbeiter und auch der
8.1 Grundlegende Methoden 267
Teilprozesse liegt. Wenn dies der Fall ist, dann reagieren wir auf die Buchstaben V, M und I
durch einen farbigen Hintergrund. Alle anderen Eingaben bekommen keine Farbe.
Bild 8-6
VMI-
Matrix
Sind alle Zuordnungen getroffen, dann liefert die Prozedur Zählung (Codeliste 8-3) ein
Säulendiagramm mit Prozentangaben (Bild 8-7).
Bei einer ersten Betrachtung der VMI-Matrix ergeben sich Fragen zu den Personal-
Ressourcen:
Sind zu viele Personen am Prozess involviert?
Wenn kein V angegeben wird, wer trägt dann die Verantwortung?
Wenn zu viele V bei einer Person liegen, ist diese überlastet?
8.1 Grundlegende Methoden 269
Bild 8-7
Auszählung der
Verteilung
Bei einer zweiten Betrachtung der VMI-Matrix ergeben sich Fragen zu den Arbeitspaketen:
Was wäre, wenn das Arbeitspaket nicht ausgeführt würde?
Wird das Arbeitspaket mehrfach ausgeführt, auch an anderer Stelle?
Dient das Arbeitspaket einem oder mehreren Kunden?
Dient das Arbeitspaket zur Fehlervermeidung?
Dient das Arbeitspaket zur Kommunikation und/oder Koordination?
Lässt sich das Arbeitspaket auf eine andere Weise effizienter erbringen?
Eine VMI-Matrix lässt sich nicht nur fürs Personal, sondern allgemeiner auch für andere
Ressourcen erstellen.
8.1.3 SWOT-Analyse
Die Grundidee ist eine gleichzeitige Betrachtung von Stärken, Schwächen, Möglichkeiten und
Risiken eines Vorhabens (Bild 8-8), die z. B. die Marktposition eines Unternehmens
bestimmen. Hierbei hilft auch ein Brainstorming.
Bild 8-8
Schema zur
SWOT-Analyse
Das Synonym SWOT leitet sich aus einem Schema ab (Tabelle 8-2).
Begriff Erläuterung
S für Strengths Stärken, wie eine führende Marktposition, ein hoher Bekanntheitsgrad, die
Beherrschung innovativer Techniken etc.
270 8 Strategisches Prozess-Controlling
XCT_08-03_SWOTAnalyse.xlsm
Zur Realisierung der SWOT-Analyse in einem Arbeitsblatt betrachten wir ein Beispiel mit
einigen Kriterien (Bild 8-10). Die Visualisierung erfolgt durch ein Netzdiagramm mit
Datenpunkten (Bild 8-11 und Bild 8-12).
Zuvor werden zwei Bereichsnamen vergeben (Tabelle 8-3) und eine einfache Prozedur
(Codeliste 8-4) erzeugt die entsprechenden Netzdiagramme.
Bereich Bereichsname
A3:B12 Intern
A14:B23 Extern
'Chart Extern
With ActiveSheet
.Range("Extern").Select
.Shapes.AddChart2(317, xlRadarMarkers).Select
End With
ActiveChart.ChartTitle.Caption = "Extern"
End Sub
Bild 8-10
Analysedaten
Bild 8-11
SWOT-Analyse
interner Kriterien
272 8 Strategisches Prozess-Controlling
Bild 8-12
SWOT-Analyse
externer Kriterien
8.1.4 Wettbewerbsanalyse
Bei dieser Art einer Analyse werden verschiedene Vergleichskriterien zwischen Unternehmen
betrachtet. Im Beispiel sind es relativ wenige Kriterien und ihre Bewertung reicht von 1 bis 9
(1 bis 4 = schlecht, 5 = normal, 6-9 = gut). Es können auch andere Einteilungen Verwendung
finden. Die Kriterien werden in Spalten nebeneinander bewertet. Es können beliebig viele
Spalten genutzt werden, doch mit steigender Anzahl verliert die Darstellung an
Übersichtlichkeit.
XCT_08-04_WettbewerbsAnalyse.xlsm
Das Beispiel (Bild 8-13) betrachtet neun Kriterien, doch es können hier ebenfalls beliebige
Einträge erfolgen.
Bild 8-13
Beispiel einer
Wettbewerbsanalyse
Neben den Beurteilungen in den Spalten D und E werden noch zwei Hilfsspalten zur
Generierung eines vertikalen Liniendiagramms benötigt. Das Diagramm händisch zu erstellen,
erfordert einiges an „Bastelaufwand“, denn als Vorlage ist es nicht vorhanden.
Ich mache gleich den Schritt hin zu einer VBA-Prozedur (Codeliste 8-5). Zu deren Verständnis
habe ich sie reichlich auskommentiert. Wer dann den Vorgang verstanden hat, kann die
Kommentare ja wieder entfernen.
8.1 Grundlegende Methoden 273
Grob beschrieben gehen wir von einem gestapelten Balkendiagramm aus. Es bringt bereits die
senkrechte Anordnung der Daten mit. Die betrachteten Werte werden mittels einer
Sekundärachse und der Diagrammtypänderung zu einem XY-Liniendiagramm umgeformt. So
entsteht ein Verbunddiagramm und mit einigen Einstellungen gewinnt man die dargestellte
Form (Bild 8-14). Das Ergebnis lässt sich jedenfalls sehen.
274 8 Strategisches Prozess-Controlling
Bild 8-14
Wettbewerbsanalyse
als vertikales
Liniendiagramm
Dieses Diagramm lässt sich auch für andere Analysen gut verwenden.
8.2 Kennzahlen
Prozesse lassen sich mithilfe von Kennzahlen danach bewerten, wie effizient sie sind und wie
effektiv die gelieferten Ergebnisse (Bild 8-15).
Bild 8-15
Kennzahlengruppen
eines Prozesses
Fertigung
Gefertigte Stückzahl pro Tag in der Produktion
Anzahl der Nachbearbeitungen pro Tag
Schulungsmaßnahmen für Mitarbeiter in Stunden pro Jahr
Zeit zwischen Auftragseingang und Warenausgang
Marketing
Kosten des Marketings pro Kundenkontakt
Anzahl der Follower in sozialen Netzwerken
Anzahl Fachberichte zu den Unternehmens-Produkten
Anzahl Informationsfragen zu Firmen-Produkten
Vertrieb
Anzahl Kundenbesuche pro Monat
Umsatzanteil der Erstkunden im Jahr
Durchschnittlicher Kundenumsatz pro Monat
Durchschnittliche Materialkosten pro Monat
Service
Anzahl Kundenanrufe pro Tag
Durchschnittliche Gesprächsdauer mit Kunden
Anteil notwendiger Weitervermittlungen in Prozent zu den Kundenanrufen
Anzahl bearbeiteter Kundenbeschwerden pro Woche
Personal
Anzahl der Weiterbildungsmaßnahmen pro Monat
Summe der Mitarbeiterstunden zum Prozess
Anteil der Prozesse ohne Kostenüberschreitung im Jahr
Durchschnittliche Anzahl Mitarbeiter an Prozessen
XCT_08-05_KPIReportingMatrix.xlsm
276 8 Strategisches Prozess-Controlling
Als Beispiel verwenden wir eine einfache KPI Reporting Matrix (Bild 8-16).
8.2.2 Kennzahlensysteme
Es gibt mehrere Kennzahlensysteme. Eines der ältesten ist das von DuPont entwickelte und
stammt aus dem Jahre 1919 (Bild 8-17). Es dient auch als Prototyp zur Entwicklung weiterer
Kennzahlensysteme und wird daher als Inbegriff der Kennzahlensysteme angesehen.
XCT_08-06_DuPontROI.xlsm
Hier bietet es sich an, das Schema in Excel als Formular zu gestalten, d. h. bestimmte Zellen
(grün) sind für die Eingabe von Werten gedacht (Bild 8-18). In alle anderen Zellen darf keine
Eingabe erfolgen. Berechnete Werte stehen in gelben Zellen.
Nach dem Aufbau des Schemas sind folgende Schritte für ein Formular erforderlich:
Unter dem Register Ansicht, in der Gruppe Anzeigen die Gitternetzlinien ausschalten
alle grünen Zellen markieren
im Register Überprüfen, in der Gruppe Schützen die Methode Bearbeiten von Bereichen
zulassen wählen
im Dialogfenster Benutzerberechtigungen … die Schaltfläche Neu anklicken
im Dialogfenster Neuer Bereich einen Titel eingeben, hier habe ich Eingaben gewählt
keinen Kennwert eingeben
mit OK alle Fenster schließen
im Register Überprüfen, in der Gruppe Schützen die Methode Blatt schützen wählen
zweimal das gleiche Kennwort eingeben. In meiner Vorlage ist es Controlling.
Weitere häufig angewandte Systeme sind das ZVEI-Kennzahlensystem vom Zentralverband der
Elektroindustrie e.V. und die RL-Kennzahlen von Reichmann und Lachnit, speziell entwickelt
fürs Controlling und auf Erfolg und Liquidität ausgerichtet.
8.2.3 Benchmarking
Anhand von Kennzahlen wie Zeitdauer, Liefertreue, Erfüllungsgrad, etc. können Prozesse
einem Ranking unterzogen werden. Unternehmen nutzen das Benchmarking zum Vergleich der
eigenen Leistungen mit den Leistungen der Konkurrenzunternehmen. Dabei werden Prozesse,
Produkte und Services mit den stärksten Mitbewerbern kontinuierlich verglichen (Bild 8-19).
Bild 8-19
Formen des Benchmarking
Quelle:
IGC-Controller
Wörterbuch
XCT_08-07_Benchmarking.xlsm
Bild 8-20
Beispiel einer
gewichteten
Benchmarking-
Matrix
Bild 8-21
Gewichtetes
Firmenranking
Bild 8-22
Ungewichtetes
Prozessranking
Bild 8-23
Gewichtetes
Prozessranking
XCT_08-08_BalancedScoreCard.xlsm
Werden die Kennzahlen umfangreicher, dann bietet sich eine Aufteilung der Perspektiven auf
einzelne Arbeitsblätter an (Bild 8-26).
Damit alle Mitarbeiter schnell erkennen, ob und in welchem Maße sie zur Zielerreichung
beitragen, werden die Messwerte zu den Kennzahlen (Ist-Werte) übersichtlich abgebildet.
282 8 Strategisches Prozess-Controlling
Zudem werden sie im Vergleich zu den Soll-Vorgaben dargestellt. Dazu hat sich die Ampel-
Darstellung für die Kennzahlen bewährt.
Rot: Es gibt erhebliche Abweichungen von der Ziel- oder Soll-Vorgabe. Es sind dringend
Maßnahmen erforderlich, um die Leistungen zu verbessern.
Gelb: Es gibt Abweichungen von der Ziel- oder Soll-Vorgabe, die aber noch nicht kritisch sind.
Es sollte geprüft werden, was geändert oder verbessert werden könnte, um die Leistungen zu
verbessern.
Grün: Es gibt keine nennenswerten Abweichungen der Ist-Werte zu den Soll-Vorgaben zum
entsprechenden Ziel. Die Leistung ist so, wie sie erwartet wird, oder besser.
Ausgeführt wird die Ampeldarstellung durch eine bedingte Formatierung (Tabelle 8-8). Diese
Regeln gelten für alle Zeilen mit Auswertung auf allen vier Arbeitsblättern und den
entsprechenden Zelladressen.
8.2 Kennzahlen 283
sTable(1) = "Finanzen"
sTable(2) = "Kunden"
sTable(3) = "Prozesse"
sTable(4) = "Lernen & Entwicklung"
Set wbkTemp = ThisWorkbook
'Auswertung
For iCount = 1 To 4
Set wshTemp = wbkTemp.Worksheets(sTable(iCount))
With wshTemp
iRowMax = .UsedRange.Rows.Count
For iCol = 6 To 9
dSum = 0
For iRow = 3 To iRowMax
dDiv1 = CDbl(.Cells(iRow, iCol))
dDiv2 = CDbl(.Cells(iRow, 5))
dSum = dSum + dDiv1 / dDiv2
Next iRow
dAll(iCount, iCol - 5) = dSum / (iRowMax - 2)
Next iCol
End With
Set wshTemp = Nothing
Next iCount
'Neues Arbeitsblatt
Set wshTemp = wbkTemp.Worksheets.Add
'zum Testen besser ohne Namen
' wshTemp.Name = "Gesamt"
For iCol = 1 To 4
For iRow = 1 To 4
284 8 Strategisches Prozess-Controlling
Bild 8-27
Auswertung der
Balanced Scorecards
8.2.5 Prozess-Reporting
Die Anforderungen des Managements an das Controlling haben sich im Laufe der Jahre sehr
verändert. Schneller wachsende Märkte erfordern schnellere zielgerichtete Entscheidungen.
Über den Wandel vom Datenlieferanten zum Berater habe ich schon in der Einführung
geschrieben.
8.2 Kennzahlen 285
Dies schlägt sich auch im Reporting des Controllings an das Management nieder. Ein Report
soll nicht nur fundierte Analysewerte enthalten, sondern auch Daten zur zukünftigen
Unternehmensstrategie liefern. Somit unterteilt sich das Reporting in zwei Phasen:
Datenaufbereitung und Visualisierung
Analyse und Interpretation
Datenaufbereitung und Visualisierung lassen sich mit den in diesem Buch beschriebenen
Methoden relativ leicht standardisieren. Aber auch die Analyse und Interpretation kann
mithilfe von Kennzahlen optimiert werden. Da gibt es zum einen die Kennzahlen, die eine
schnelle Analyse der betrachteten Prozesse erlauben und zum anderen Kennzahlen, die die
Effektivität des Controllings selbst bewerten.
Das Controlling-Prozessmodell der International Group of Controlling (IGC) beschreibt zehn
Controlling-Hauptprozesse, für die finanzielle und nichtfinanzielle Kennzahlen erarbeitet
wurden. Sie liefern ein Maß für Qualität, Zeit und Kosten. Dies ist wieder das
Spannungsdreieck, das ich bereits unter Ziele beschrieben habe. Zwei Beispiele:
Die Wichtigkeit ständiger Berichte ist nicht hoch genug anzusetzen. Eine Reporting-Liste
(Tabelle 8-11) ist sehr hilfreich und sorgt für Klarheit, bei wem liegt die Bringschuld und bei
wem die Holschuld.
286 8 Strategisches Prozess-Controlling
XCT_08-09_ReportingListe.xlsm
Viele Unternehmen sind inzwischen weit über das Reporting hinaus in der Welt des BI
angekommen.
XCT_08-10_Prozesskostenrechnung.xlsm
8.3 Kostenrechnerische Analysen 287
In einem Beispiel sollen Gemeinkosten von 25 TEUR auf drei Produkte A, B und C umgelegt
werden. Die Einzelkosten pro Stück sind vorgegeben und ebenso die Anzahl der Prozesse, die
an der Herstellung beteiligt sind. Bei der Zuschlagskalkulation (Bild 8-28) wird der
Zuschlagssatz aus Stückzahl und Einzelkosten bestimmt.
Bild 8-28
Verteilung der
Gemeinkosten in der
Zuschlagskalkulation
Bild 8-29
Verteilung der
Gemeinkosten in der
Prozesskostenrechnung
288 8 Strategisches Prozess-Controlling
Codeliste 8-7 Prozedur erzeugt einen Zuschlagsvergleich mit einem gruppierten Säulendiagramm
Sub ZuschlagsVergleich()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim rngTemp1 As Range
Dim rngTemp2 As Range
Bild 8-30
Zuschlags-
Vergleich
XCT_08-11_GuV.xlsm
Die Kontoform (Bild 8-31) unterscheidet zwischen Soll (Aufwendungen) und Haben (Erträge).
Bild 8-31
Gliederung
einer GuV nach
Kontenform
Bei der Gliederung der GuV nach Staffelform (Bild 8-32) werden alle Positionen untereinander
aufgeführt. Das Ergebnis wird durch fortlaufende Rechnung in verschiedenen Schritten erzielt.
290 8 Strategisches Prozess-Controlling
Bild 8-32
Gliederung einer
GuV nach
Staffelform
In Kapitel 8.2.2 habe ich bereits gezeigt, wie ein Formular gestaltet wird. Für beide Formen
werden die grünen Zellen freigeschaltet. Auch hier verwende ich als Passwort Controlling.
In der Staffelform habe ich die Werte mit einem benutzerdefinierten Format dargestellt.
Dezimalzahlen können nämlich drei Formate gleichzeitig berücksichtigen. Werden für eine
Dezimalzahl drei Formate, getrennt durch ein Semikolon dargestellt, dann gilt das erste Format
für positive Zahlen, das zweite Format für negative Zahlen und das dritte Format ausschließlich
für Nullwerte. Vor jedes Format kann in eckigen Klammern eine Farbe angegeben werde.
Um das Format einzugeben, werden zunächst alle in Frage kommenden Zellen markiert, hier
also C2:C13. Über das Kontextmenü wird Zellen formatieren gewählt und unter
Benutzerdefiniert in das Eingabefeld Typ
[Blau]#.##0,00 €;[Rot]- #.##0,00 €;[Grün]#.##0,00 €
eingegeben.
Den visuellen Vergleich zwischen Soll und Haben in der Kontoform lässt sich mit einem
Verbunddiagramm (Bild 8-33) und zwei vertikalen Achsen durchführen, dass die Prozedur
GuVKontoform (Codeliste 8-8) erzeugt.
.FullSeriesCollection(1).ChartType = xlColumnClustered
.FullSeriesCollection(1).AxisGroup = 1
.FullSeriesCollection(2).ChartType = xlLine
.FullSeriesCollection(2).AxisGroup = 1
.FullSeriesCollection(2).AxisGroup = 2
.FullSeriesCollection(1).Name = "=""Soll"""
.FullSeriesCollection(2).Name = "=""Haben"""
.HasTitle = True
.ChartTitle.Text = "GuV in Kontoform"
.ChartArea.Select
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Soll"
.Axes(xlValue, xlSecondary).HasTitle = True
.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = "Haben"
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set rngTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 8-33
Beträge im
Verbunddiagramm
Für die Staffelform bietet sich das Wasserfalldiagramm (Bild 8-34) an, dass die Prozedur
GuVStaffelform (Codeliste 8-9) erzeugt.
Bild 8-34
Beträge im
Wasserfalldiagramm
und erzeugnisbezogenen
DB = Gesamterlös – variable Kosten (8.2)
Deckungsbeiträgen unterschieden.
Mit der Stückzahl n besteht zwischen beiden Deckungsbeiträgen die Beziehung
DB = n · db. (8.3)
Im folgenden Anwendungsbeispiel werden drei Produkte betrachtet, deren DBR auf einem
Arbeitsblatt zusammengefasst wird. Variable Kosten sind alle Kosten, die direkt bei der
Herstellung des Produktes anfallen, also Kosten für Material, Rohstoffe, Produktion und
Vertrieb, ebenso die direkt zuordnenbaren Verwaltungskosten.
XCT_08-12_DBReinstufig.xlsm
In der Deckungsbeitragsrechnung (Bild 8-35) werden die Gesamtkosten in fixe und variable
Kosten unterteilt und nur die variablen Kosten auf die Kostenträger umgelegt. Andere
Bezeichnungen für dieses Kalkulationsschema lauten Grenzkostenrechnung oder
Direktkostenrechnung (Direct Costing).
Codeliste 8-10 Prozedur aktualisiert einstufigen DBR und erzeugt ein Wasserfalldiagramm
Sub EinDBR()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
With chrTemp
.ChartStyle = 389
.ChartGroups(1).GapWidth = 0
'Summenbildung
With .FullSeriesCollection(1)
.Points(3).IsTotal = True
.Points(5).IsTotal = True
.Points(7).IsTotal = True
.Points(9).IsTotal = True
End With
.HasTitle = True
.ChartTitle.Caption = "Einstufige DBR"
End With
Set chrTemp = Nothing
Set shpTemp = Nothing
Set wshTemp = Nothing
Set wbkTemp = Nothing
End Sub
Bild 8-36
Einstufige DBR im
Wasserfalldiagramm
Die mehrstufige Deckungsbeitragsrechnung (Bild 8-37 und Bild 8-38) liefert weitere
Erkenntnisse zur Erfolgsstruktur des Unternehmens. Darin wird eine Aufspaltung des zuvor
benutzten Fixkostenblocks in verschiedene Fixkostenschichten vorgenommen. Man
unterscheidet:
produktfixe Kosten (Produktart)
produktgruppenfixe Kosten (Produktgruppe)
bereichsfixe Kosten (Bereich)
unternehmensfixe Kosten (Unternehmen)
Die Konsolidierung wird hier ebenso durchgeführt wie bei der einstufigen DBR. Wer mag,
kann die Prozedur selbst entwickeln, bevor er in den Download schaut.
XCT_08-13_DBRmehrstufig.xlsm
8.3.4 Break-Even-Analyse
Eine weitere, oft angewandte Berechnung ist die Break-Even-Analyse. Diese Methode ermittelt
die Absatzmenge, bei der die Umsatzerlöse die fixen und variablen Kosten decken. Die Break-
Even-Methode zeigt die Wirkung von Umsatz- und Kostenänderungen auf den Gewinn. Die
Stückzahl, ab der der Erlös positiv wird, wird als Break-Even-Point (BEP) bezeichnet
(Bild 8-39).
8.3 Kostenrechnerische Analysen 297
Bild 8-39
Break-Even-Point
XCT_08-14_BreakEvenAnalyse.xlsm
Als Beispiel betrachten wir das Produkt1 mit seinen Kostenparametern für Produktionsmengen
von Null bis 1000 (Bild 8-40).
298 8 Strategisches Prozess-Controlling
Bild 8-40
Beispiel zur
Bestimmung des BEP
Mit der Prozedur BreakEvenDiagramm (Codeliste 8-11) wird ein Diagramm vom Typ Punkte
mit geraden Linien erzeugt.
Amount:=0
.ErrorBars.EndStyle = xlNoCap
.ErrorBar Direction:=xlY, _
Include:=xlMinusValues, _
Type:=xlErrorBarTypeFixedValue, _
Amount:=Sheets("Break-Even-Analyse").Range("B18").Value
End With
End With
Set chrTemp = Nothing
Set shpTemp = Nothing
Set wshTemp = Nothing
Set wbkTemp = Nothing
End Sub
Bild 8-41
Break-Even-
Point
Leider muss händisch eine Korrektur (Bild 8-41) erfolgen, die bei älteren Versionen
funktioniert:
Den Break-Even-Point markieren
Register Entwurf wählen
Gruppe Diagrammelemente hinzufügen wählen
Auswahl Fehlerindikatoren
Weitere Fehlerindikatorenoptionen … wählen
Reihe Break-Even-Point auswählen und mit OK bestätigen
vertikaler Fehlerindikator Richtung Minus wählen
Linienende Ohne Abschluss wählen
Fehlerbetrag Benutzerdefiniert und auf Wert angeben klicken
unter Negativer Fehlerwert Zelle B12 anklicken
Bild 8-42
Verfahren der KER
Beim Gesamtkostenverfahren (Bild 8-43) werden von den Erlösen des betrachteten Zeitraums
die unfertigen und fertigen Erzeugnisse subtrahiert, da sie zwar in den Erlösen enthalten sind,
ihre Herstellung aber dem vergangenen Zeitraum zuzurechnen ist.
XCT_08-15_KurtfristigeErfolgsrechnung.xlsm
Bild 8-43
Schema des
Gesamtkostenverfahrens
Beim Gesamtkostenverfahren stehen dem Vorteil des einfachen Aufbaus die hohen Kosten der
Bestandsbestimmung der Erzeugnisse gegenüber.
Beim Umsatzkostenverfahren auf Vollkostenbasis (Bild 8-44) werden den Umsätzen des
betrachteten Zeitraums die Kosten gegenübergestellt, die diese Umsätze erbringen.
Mit diesem Schema werden die Selbstkosten einzelner Erzeugnisse bestimmt, so dass auch der
Erfolgsanteil jedes Kostenträgers bestimmt werden kann.
Beim Umsatzkostenverfahren auf Teilkostenbasis (Bild 8-45) werden den Umsätzen des
betrachteten Zeitraums die variablen Kosten gegenübergestellt. Von dem sich daraus
ergebenden Deckungsbeitrag werden die Fixkosten subtrahiert, um so zum Betriebsergebnis zu
302 8 Strategisches Prozess-Controlling
gelangen. Das Umsatzkostenverfahren macht eine Trennung in fixe und variable Kosten
erforderlich.
Bild 8-44
Schema des
Umsatzkostenverfahrens
auf Vollkostenbasis
Bild 8-45
Schema des
Umsatzkostenverfahrens
auf Teilkostenbasis
8.3 Kostenrechnerische Analysen 303
Bild 8-46
Beispieldaten eines
Unternehmens
Bild 8-47
Bestimmung der
Herstellkosten pro Stück
Bild 8-48
Betriebsergebnis nach dem
Gesamtkostenverfahren
Und auch die Betriebsergebnisse nach den Umsatzkostenverfahren (Bild 8-49) und (Bild 8-50).
Bild 8-49
Betriebsergebnis nach dem
Umsatzkostenverfahren auf
Vollkostenbasis
Bild 8-50
Betriebsergebnis nach dem
Umsatzkostenverfahren auf
Teilkostenbasis
XCT_08-16_Abschreibungsverfahren.xlsm
Die Berechnung der linearen Abschreibungsbeträge (Bild 8-52) erfolgt nach den Formeln:
Abschreibungsbetrag = Anschaffungskosten / Nutzungsdauer (8.12)
Abschreibungssatz = 100 % / Nutzungsdauer (8.13)
Werden die Anschaffungs- oder Herstellungskosten nach der linearen Methode verteilt, so
ergeben sich für jedes Jahr der Nutzung oder Verwendung beweglicher Wirtschaftsgüter immer
gleich hohe Jahresabschreibungsbeträge.
Es wird eine gleichmäßige Nutzung und Wertminderung unterstellt.
Die Abschreibung erfolgt über die gesamte Nutzungsdauer mit einem
gleichbleibenden Prozentsatz von den Anschaffungs- bzw. Herstellungskosten.
Das Anlagegut ist bei linearer Abschreibung am Ende der Nutzungsdauer voll
abgeschrieben.
Wird ein Restwert erwartet, sind die Anschaffungs- und Herstellungskosten um diesen
zu reduzieren.
Bild 8-52
Berechnung der
linearen Abschreibung
8.4.2 Cashflow
Der Cashflow ist eine wichtige Maßgröße für das Finanzierungspotential eines Unternehmens.
Er gewährt Ihnen Einblick in die Liquidität (den Zuwachs an flüssigen Geldmitteln) und ist
somit eine Kennzahl für die finanzielle Entwicklung eines Unternehmens. Aus
steuerrechtlichen Gründen vermindert ein Unternehmen die Jahresergebnisse, z. B. durch
Abschreibungen (zahlungsungleiche Größen).
Da beispielsweise den Abschreibungen keine Auszahlungen gegenüberstehen, also die dafür
berechneten finanziellen Mittel weiterhin dem Unternehmen zur Verfügung stehen, werden
diese finanziellen Mittel bei der Ermittlung des Cashflows berücksichtigt (Bild 8-53).
Insbesondere bei maschinenintensiven Unternehmen ist der Cashflow weitaus höher als das
durch hohe Abschreibungen verminderte Gewinn- und Verlust-Ergebnis (GUV-Ergebnis).
XCT_08-17_Cashflow.xlsm
Bild 8-53
Ermittlung von
Deckungsbeitrag
und Gewinn vor
Steuern
Bild 8-54
Steuersatz mit
benutzerdefiniertem
Zellformat
Bild 8-55
Ermittlung des
Cashflows
8.5 Kreditberechnungen
8.5.1 Zinsrechnung
Folgende Begriffe sind im Rahmen der Kreditberechnung wichtig:
Anfangskapital: Entspricht dem aufgenommenen Kredit
Endkapital: Ist der Wert, welcher am Ende der Laufzeit zurückzuzahlen ist
Zinsen: Sind ein Entgelt für das auf Zeit überlassene Kapital
Tilgung: Betrag, der von einem ausgezahlten Kredit zurückgezahlt wird
8.5 Kreditberechnungen 309
Annuität: Kredite werden in der Regel in konstanten Raten zurückgezahlt, welche die
Tilgung des Kredites sowie die Zinsen enthalten
Barwert: Ist der heutige Wert einer Reihe zukünftiger Zahlungen
Fälligkeit: Beschreibt, ob eine Zahlung am Anfang oder am Ende einer Periode fällig
ist
Der Zeitwert eines Kredites ist der Wert eines Betrages zu einem bestimmten Zeitpunkt in der
Vergangenheit oder der Zukunft. Die Berechnung erfolgt über die Aufzinsung oder Abzinsung.
Eine Aufzinsung erfolgt, wenn der zukünftige Wert eines bestimmten Betrages
ermittelt werden soll. Bei einer Aufzinsung müssen zum derzeitigen Betrag die
während der Dauer der Verzinsung anfallenden Zinsen und Zinseszinsen
zugeschlagen werden.
Eine Abzinsung erfolgt, wenn der gegenwärtige Wert eines zukünftigen Betrages
ermittelt werden soll. Die Abzinsung dient der Ermittlung des Barwertes oder auch
Gegenwartswertes, d. h., die während der Verzinsungsdauer anfallenden Zinsen und
Zinseszinsen werden vom zukünftigen Betrag abgezogen.
XCT_08-18_Zinsrechnungen.xlsm
Betrachten wir nachfolgend die einfache Zinsrechnung (Bild 8-56), die Zinseszinsrechnung
(Bild 8-57) und die unterjährige Verzinsung (Bild 8-58).
310 8 Strategisches Prozess-Controlling
Bild 8-56
Beispiel für eine einfache
Zinsrechnung
Bild 8-57
Beispiel für eine
Zinseszinsrechnung
D6 =B6+C6
B7 =D6
C7 =B7*Zinssatz2
B8:D11 =B7:D7 übertragen
C6:C11 Zinsen2
C12 =SUMME(Zinsen2)
8.5.1.5 Die unterjährige Verzinsung
Die unterjährige Verzinsung ist eine Zinseszinsrechnung, bei der die Intervalle der Verzinsung
kleiner als ein Jahr sind. Gegenüber einer Verzinsung von 3,5 % pro Jahr wächst das Kapital
bei einer unterjährigen Verzinsung von 3,5 % deutlich schneller an.
Der effektive Jahreszins ist ein Maßstab zum Vergleich verschiedener unterjähriger
Anlageformen. Excel bietet hierfür die Funktion EFFEKTIV.
Syntax zur EFFEKTIV-Funktion:
EFFEKTIV(Nominalzins;Perioden)
Bild 8-58
Beispiel einer
Effektivzins-
Berechnung
8.5.2 Tilgungsrechnung
Die Tilgungsrechnung ist eine Weiterentwicklung der Zinseszins- und Rentenrechnung.
Hierbei geht es um die Rückzahlung von Schulden, die meist in Teilbeträgen in einer vorher
vereinbarten Zeitspanne erfolgt.
Die jährlichen Zahlungen oder auch Annuitäten beinhalten die fälligen Zinsen und einen
Tilgungsbetrag. Um einen Tilgungsvorgang übersichtlich darstellen zu können, wird häufig ein
Tilgungsplan erstellt. Darin werden für jedes Jahr die Restschuld, die fälligen Zinsen sowie die
Tilgungsraten und die zu zahlende Annuität in Tabellenform dargestellt.
312 8 Strategisches Prozess-Controlling
Bild 8-59
Beispiel
einer
Ratentilgung
Bei einem Kredit mit gleicher Annuität (Annuitätentilgung) wird in jedem Jahr die gleiche
Summe zur Tilgung und Zinszahlung gezahlt (Bild 8-60). Da jedoch am Anfang die
Zinsen der gesamten Kreditsumme berechnet werden und in den darauffolgenden Perioden
nur noch von der Restsumme, ergeben sich steigende Tilgungsbeträge und sinkende
Zinszahlungen. Eine Möglichkeit der Berechnung des optimalen Annuitätsbetrages bietet
die Funktion RMZ. Eine andere Möglichkeit ist die Zielwertsuche (Bild 8-61), die hier
auch angewendet wurde.
Bild 8-60
Beispiel einer
Annuitätentilgung
Bild 8-61
Zielwertsuche zur
Annuitätentilgung
8.5.3 Annuitätentilgung
Die RMZ-Funktion erlaubt eine optimale Bestimmung (Bild 8-62) des Annuitätenbetrags.
Bild 8-62
Tilgung mit
optimalem
Annuitätenbetrag
Bild 8-63
Visualisierung
der
Annuitätentilgung
Bild 8-64
Tilgungsplan mit
finanzmathematischen
Funktionen
8.5.4 Vergleichsrechnung
In der Praxis ergibt sich oft das Problem, unterschiedliche Kredite miteinander zu vergleichen.
Um diese Arbeit zu erleichtern, ist eine Aufstellung verschiedener Kombinationsmöglichkeiten
sinnvoll. Beispielsweise:
Wie hoch sind die Zinsen bei einem vorgegebenen Zinssatz, aber unterschiedlicher
Laufzeit und unterschiedlicher Kredithöhe?
Wie lange ist die Kreditlaufzeit bei einem vorgegebenen Zinssatz, aber unterschiedlichen
Tilgungsbeträgen und unterschiedlichen Kredithöhen?
Wie hoch ist die Annuität, wenn der Zinssatz und die Laufzeit variabel sind und die
Kredithöhe bekannt ist?
Eine Datentabelle zeigt das Ergebnis einer Formel, wenn eine oder zwei Variablen dieser
Formel geändert werden (Bild 8-65). Mit einer Datentabelle lässt sich feststellen, wie sich
unterschiedliche Werte einer Formel auf die Ergebnisse der Tabellendaten auswirken. Excel
unterscheidet zwischen:
Datentabellen mit einer Variablen: Mit dieser Methode wird eine Variable bzw. ein
Argument der Formel nacheinander durch alternative Eingabewerte ersetzt.
Datentabellen mit zwei Variablen: Hierbei werden zwei Variablen bzw. Argumente einer
Formel durch alternative Eingabewerte ersetzt.
Bild 8-65
Tabellenaufbau
zum
Kreditvergleich
8.6 Investitionsrechnungen
Unter Investition wird die Anschaffung eines Arbeitsmittels verstanden, das zum
Anlagevermögen des Unternehmens hinzukommt. Sie werden nach dem Anlass einer
Investition unterschieden:
318 8 Strategisches Prozess-Controlling
XCT_08-19_Investitionsrechnungen.xlsm
Als Beispiel betrachten wir die Investitionsrechnung zur Anschaffung einer neuen
Produktionsanlage.
Bild 8-67
Werte für
das erste
Jahr
𝐴𝑚𝑜𝑟𝑡𝑖𝑠𝑎𝑡𝑖𝑜𝑛𝑠𝑑𝑎𝑢𝑒𝑟 = (8.14)
. ü
B4 =B3-Anschaffungskosten
C4 =B4+C3
D4:G4 C4 übertragen
B6 =WENN(UND(B$4>0;A$4<0);B$2;"")
C6:G6 B6 übertragen
B7 =SUMME(B6:G6)-B2+1
Die benutzerdefinierte Formatierung (Bild 8-70) für den Bereich B6:G6 sieht für alle Zellen
ohne Inhalt einen grauen Hintergrund vor und für die Jahreszahl eine Ergebnisformatierung
(Gelb).
Bild 8-71 Kapitalwert mit der Formel und mit der NBW-Funktion berechnen
8.6 Investitionsrechnungen 323
B8 =WENN(UND(B6>0;A6<0);B4;"")
C8:G8 B8 übertragen
B9 =SUMME(B8:G8)-B4+1
Die bedingte Formatierung erfolgt entsprechend Bild 8-70.
8.6.7 Der interne Zinsfuß
Zur Beurteilung der Wirtschaftlichkeit von Investitionen ist auch die Interne-Zinsfuß-Methode
geeignet. Darunter versteht man die Rendite oder die Effektivverzinsung, die durch eine
Investition erzielt wird. Wenn der interne Zinsfuß, d. h. die erwartete Rendite, gleich oder
größer ist als die Mindestverzinsungs-Anforderungen eines Investors, dann ist die betreffende
Investition vorteilhaft (Bild 8-73).
Der Zinsvergleich ist nur dann möglich, wenn der interne Zins und die Mindestverzinsung
feststehen.
Bild 8-75
Periodenbezogene
Kosten-
Vergleichsrechnung
Die Anlage 2 ist nach der Berechnung die vorteilhaftere Anlage, da sie mit ihren
durchschnittlichen jährlichen Kosten um 400 Euro unter denen von Anlage 1 liegt.
326 8 Strategisches Prozess-Controlling
Bild 8-76
Stückbezogene
Kosten-
Vergleichsrechnung
9 Operatives Prozess-Controlling
Die Leistungen eines Unternehmens sollen möglichst effizient und ökonomisch sein und
folgenden Ansprüchen gerecht werden:
Prozesse müssen sich den Gegebenheiten anpassen.
Leistungen müssen messbar sein.
Prozesskosten müssen kontrolliert werden.
9.1 Analyse-Methoden
Kontrollen und Abweichungsanalysen sind der Schwerpunkt des operativen Prozess-
Controllings.
9.1.1 ABC-Analyse
Eine klassische Methode des operativen Controllings ist die ABC-Analyse. Sie betrachtet
Werte in Relation zum Gesamtwert und führt eine vorgegebene Einteilung durch. Sie
beantwortet Fragestellungen wie
Welche Produkte eines Unternehmens bringen welchen Anteil am Gesamtumsatz?
Welche Kunden sind mit welchen Anteilen am Gesamtumsatz beteiligt?
Nachdem die Daten zusammengestellt und in ihrer Rangordnung bestimmt sind, werden sie in
drei Klassen (daher A, B und C) eingeteilt.
XCT_09-01_ABCAnalyse.xlsm
Auf einem gesonderten Arbeitsblatt ABC-Anteile befinden sich die Daten der Klasseneinteilung
(Bild 9-1).
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_9
328 9 Operatives Prozess-Controlling
Bild 9-1
ABC-Matrix
Zunächst erstellen wir eine Kopie der Umsatzliste (Bild 9-2) in der gleichen Arbeitsmappe
unter dem Namen ABC-Analyse, gemäß der Regel: Niemals die Originaldaten verwenden.
Bild 9-2
Beispiel
Jahresumsätze
In einer weiteren Spalte wird zunächst der Rang bestimmt und danach die Tabelle aufsteigend
sortiert. Beachtet werden muss, dass die Tabelle zu jeder Analyse unterschiedlich lang sein
kann. Dann berechnet eine weitere neue Spalte den kumulierten Umsatzanteil und letztlich
folgt noch in einer weiteren neuen Spalte der Klassenname, auf der Basis der ABC-Matrix
(Bild 9-3).
Bild 9-3
Produktumsätze mit
Klassenzuordnung
Case "C"
.FullSeriesCollection(1).Points(lRow - 1). _
Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
End Select
Next lRow
End With
Set shpTmp = Nothing
Set chrTmp = Nothing
Set wshTmp = Nothing
End Sub
Bild 9-4
ABC-Analyse als
Säulendiagramm
Die zweite Möglichkeit ist eine Darstellung als Wasserfalldiagramm (Bild 9-5).
Case "A"
.FullSeriesCollection(1).Points(lRow - 1). _
Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
Case "B"
.FullSeriesCollection(1).Points(lRow - 1). _
Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
Case "C"
.FullSeriesCollection(1).Points(lRow - 1). _
Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
End Select
Next lRow
End With
Set shpTmp = Nothing
Set chrTmp = Nothing
Set wshTmp = Nothing
End Sub
Bild 9-5
ABC-Analyse als
Wasserfalldiagramm
9.1.2 Verteilungen
Große Datenmengen, wie sie oft bei Messungen anfallen, werden erst durch
Verteilungsparameter zugänglich. Die von Excel bereitgestellten Verteilungsparameter
unterteilen sich in die Gruppen der Lokationsmaße und der Dispersionsmaße.
XCT_09-02_Verteilungen.xlsm
With wshTemp
.Activate
.Range("A2").Select
.Range(Selection, Selection.End(xlDown)).Select
Set shpTemp = .Shapes.AddChart2(366, xlHistogram)
End With
Set chrTemp = shpTemp.Chart
With chrTemp
.HasTitle = True
.ChartTitle.Text = "Histogramm Messwerte"
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 9-6
Histogramm zu
den Messwerten
Das Histogramm zeigt eine angenäherte Gleichverteilung auf dem Intervall. Wir wollen noch
eine zweite Klassenaufteilung nach der Formel
𝐾 = 1 + 3,3 ∙ 𝑙𝑜𝑔 𝑁 (9.1)
vornehmen. Die Prozedur Auswertung (Codeliste 9-5) erstellt ein gesondertes Arbeitsblatt mit
dem aktuellen Datum als Registernamen (Bild 9-7).
'Arbeitsblätter
On Error GoTo ErrorHandler
Set wshWerte = Worksheets("Messwerte")
With wshWerte
.Activate
334 9 Operatives Prozess-Controlling
Bild 9-7
Klassenzuordnung
der Messwerte
9.1 Analyse-Methoden 335
Auch hier ist eine Gleichverteilung zu erkennen. Im nächsten Schritt erstellen wir ein
Arbeitsblatt mit den Verteilungsparametern (Bild 9-8) der Messwerte (Codeliste 9-6).
Darin ist μ der Mittelwert und die Standardabweichung der Normalverteilung. Vorgänge wie
Messfehlerbestimmung und Abweichungen lassen sich damit untersuchen.
XCT_09_03_Lebensdauer.xlsm
Als Beispiel betrachten wir die Lebensdauer eines Produktes in Monaten (Bild 9-9). Dazu
liegen im Unternehmen 100.000 Messwerte vor. Die Werte erhalten den Bereichsnamen Werte
und werden in Klassen nach Gleichung 9.1 eingeteilt. Diese Aufgabe übernimmt die Prozedur
Häufigkeit (Codeliste 9-7).
Bild 9-9
Gemessene Lebensdauer
eines Produkts in Monaten
Codeliste 9-7 Prozedur wertet die Daten nach Klassen aus und erstellt ein Verteilungsdiagramm
Private Sub Auswertung()
Dim wshWerte As Worksheet
Dim wshKlassen As Worksheet
Dim sName As String
Dim lK As Double
Dim lN As Long
Dim lRow As Long
Dim lMax As Long
Dim lMin As Long
Dim iV As Integer
'Arbeitsblätter
On Error GoTo ErrorHandler
Set wshWerte = Worksheets("Messwerte")
With wshWerte
.Activate
sName = Format(Now, "yyyy-mm-dd")
lN = .UsedRange.Rows.Count - 1
Set wshKlassen = Worksheets.Add
wshKlassen.Name = sName
End With
On Error GoTo 0
'Anzahl Klassen
lK = Application.WorksheetFunction.RoundUp _
(1 + 3.3 * Log(lN) / Log(10#), 0)
9.1 Analyse-Methoden 337
'Wertegrenzen
lMin = Evaluate("=MIN(Werte)")
lMax = Evaluate("=Max(Werte)")
'Auswertung
With wshKlassen
.Activate
Application.Wait 2
.Cells(1, 1) = "UGrenze"
.Cells(1, 2) = "Klasse"
.Cells(1, 3) = "Anzahl"
For lRow = 1 To lK
.Cells(lRow + 1, 1) = _
lMin + (lRow - 1) * (lMax - lMin) / lK
.Cells(lRow + 1, 2) = lRow
Next lRow
For lRow = 2 To lN + 1
iV = Application.WorksheetFunction.VLookup( _
wshWerte.Cells(lRow, 1), _
.Range(.Cells(2, 1), .Cells(lK + 1, 2)), 2, 1)
.Cells(iV + 1, 3) = .Cells(iV + 1, 3) + 1
Next lRow
'Diagramm
.Range("A1:A19,C1:C19").Select
ActiveSheet.Shapes.AddChart2 _
(240, xlXYScatterSmoothNoMarkers).Select
ActiveChart.SetSourceData _
Source:=Range("$A$1:$A$19,$C$1:$C$19")
End With
Set wshKlassen = Nothing
Set wshWerte = Nothing
Exit Sub
ErrorHandler:
Set wshKlassen = Worksheets(sName)
Resume Next
End Sub
Bild 9-10
Werteverteilung
Das Verteilungsdiagramm (Bild 9-10) zeigt eine angenäherte Normalkurve, so dass wir die
Verteilungsparameter für eine Normalverteilung für weitere Auswertungen nutzen können. Für
den Controller stellt sich nun die Frage, wie viele der 10.000 gefertigten Produkten die
Lebensdauer von 40 Monaten erreichen. Die Antwort lautet 8.872 Stück (Bild 9-11).
338 9 Operatives Prozess-Controlling
Bild 9-11
Berechnung
der
Lebensdauer
XCT_09_04_LeistungsMatrix.xlsm
Eine einfache zweidimensionale Leistungsmessung von Prozessen lässt sich mithilfe eines
Portfolios anschaulich erstellen (Bild 9-13).
Bild 9-12
Leistungsmatrix
Bild 9-13
Leistungsdarstellung
im Blasendiagramm
340 9 Operatives Prozess-Controlling
9.2 Bereichs-Controlling
Jedes Unternehmen führt seine Bereiche mit speziellen, für den Bereich optimierten Methoden.
Es handelt sich dabei um einfache oder sehr komplexe Tools. Aber alle haben die Aufgabe, die
Prozesse zu optimieren und die Bereiche für die Unternehmensführung transparent
darzustellen.
9.2.1 Material-Controlling
Das Material-Controlling basiert auf verschiedenen Aufgaben des Materialbereichs, wie z. B.
die Liefertreue, die Lieferflexibilität, die Lieferqualität, die Kostenkontrolle, um nur einige zu
nennen. Entsprechend sind die Ziele und die dazu verwendeten Methoden ausgerichtet.
In der Planung:
Materialbedarfsplanung
Materialbestandsplanung
Materialbeschaffungsplanung
Budgetplanung (gilt für alle Bereiche)
In der Kontrolle und Steuerung:
Lieferkontrolle
Materialkontrolle
Budgetkontrolle (Soll-Ist-Vergleich)
Konsequenzen aus Kontrollergebnissen
Im Reporting:
Frühwarnindikatoren
Problembeschreibungen
Lösungsvorschläge
Als Anwendungsbeispiel betrachten wir eine einfache Materialbedarfsplanung. Sie besteht
zunächst aus einer Liste aller verwendeten Materialarten im Unternehmen (Bild 9-14).
Bild 9-14
Materialliste
XCT_09_05_MaterialBedarfsPlanung.xlsm
XCT_09_06_MaterialBedarfsPlanung.pbix
XCT_09_07_MaterialBedarfs.xlsm
XCT_09_08_MaterialReport.pbix
9.2 Bereichs-Controlling 341
Eine Produktliste (Bild 9-15) mit Materialangaben steht hier zur Vereinfachung als Ersatz von
Produkten mit ihren Materialstücklisten. Die Mengenangaben beziehen sich auf die
Materialeinheit.
Bild 9-15
Produktliste
Eine Auftragsliste (Bild 9-16) enthält die bestellten Produkte mit ihren Mengen. In der Spalte
Produktion befindet sich das Datum zum Start der Fertigung. Mit diesen drei Listen wären wir
eigentlich in der Lage, eine Materialbedarfsliste zu erstellen.
Bild 9-16
Auftragsliste
Zum Zusammenführen von Tabellen mit Relationen eignet sich Power BI ganz hervorragend
und einfacher als MSQuery oder Power Query. Allerdings sollten bei Namen keine Umlaute
verwendet werden, denn die mag Power BI nicht.
Beim Einsatz von Power BI Desktop ergibt sich unter Erstellen einer Verbindung zwischen
Aufträge und Produkte eine Fehlermeldung (Bild 9-17).
Bild 9-17
Fehlermeldung
im Power BI
Desktop
342 9 Operatives Prozess-Controlling
Wir haben es hier mit einer sogenannten n:m-Beziehung zu tun, denn in beiden Listen gibt es
Mehrfacheinträge und man spricht von Datenredundanz. Die Gestaltung der Tabelle Produkte
hat keinen eindeutigen Primärschlüssel. Damit nachträgliche Änderungen die Konsistenz der
Daten nicht beeinträchtigen, entsteht aus einer n:m-Beziehung eine neue Tabelle, die sich aus
den Primärschlüsseln der beiden Tabellen Produkte und Material zusammensetzt. Aus der
Produktliste entsteht eine Bedarfsliste (Bild 9-18) und die Produktliste (Bild 9-19) bekommt
eine andere Form.
Bild 9-18
Bedarfsliste
Natürlich gehören in eine reale Produktliste viele Attribute. Wir begnügen uns, der Übersicht
wegen, mit der Farbangabe.
Bild 9-19
Neue Produktliste
Schon beim Start erkennt Power BI Desktop die Beziehungen (Bild 9-20). Es liegen zwei 1:n-
Beziehungen und eine 1:1-Beziehung vor, so dass wir direkt mit der Auswertung beginnen
können, wenn auch die verwendeten Schlüssel den gleichen Datentyp haben und dies ist der
Fall.
Bild 9-20
Relationen
9.2 Bereichs-Controlling 343
Mit dem Aufruf der Excel-Tabelle erstellt Power BI im Navigator eine Übersicht der
vorhandenen Datentabellen und Arbeitsblätter (Bild 9-21).
Bild 9-21
Navigator
in Power
BI
Mit der Schaltfläche Bearbeiten im Navigator können die Spalten der ausgewählten
Tabellen bereits bearbeitet werden. Da dies aber auch zu jeder beliebigen Zeit möglich ist,
betätigen wir die Schaltfläche Laden
Über das Kontextmenü der Feldnamen können wir diese auch umbenennen.
Danach wechseln wir in die Ansicht Datenliste
Wir nehmen die Auftragsliste als Vorlage und korrigieren, mit den Methoden unter
Modellierung, in der Spalte Produktion das Format der Datumsangabe
Danach wählen wir unter Start die Methode Abfragen bearbeiten. Dadurch öffnet sich der
Power Query-Editor (Bild 9-22) mit der Auftragsliste.
Es öffnet sich ein Dialogfenster (Bild 9-23), das die Zusammenführung organisiert. Da wir
zu den Auftragsdaten auch die Bedarfsdaten benötigen, wählen wir zur Auftragsliste auch
die Bedarfsliste aus und markieren in beiden Listen die zu verknüpfenden Spalten.
Bild 9-23
Einstellungen zur
Zusammenführung
Die Einstellung unter Join-Art bleibt und wir klicken auf die OK-Schaltfläche. Dadurch
wird eine neue Tabelle Merge1 erstellt, die der Auftragsliste entspricht und eine weitere
Spalte Bedarfsliste enthält (Bild 9-24).
Die neue Spalte Bedarfsliste besitzt in der Kopfzeile eine Schaltfläche mit zwei Pfeilen,
auf die wir als nächstes klicken
Damit erhalten wir ein Auswahlfenster (Bild 9-25), in dem wir nur die Spalten MatNr,
Menge und Einheit auswählen.
Damit erweitert sich unsere Liste, da ein Produkt teilweise auch mehrere Materialien
benötigt (Bild 9-26).
Genauso verfahren wir mit unserer neuen Tabelle und der Materialliste, aus der wir die
Spalten Bezeichnung, Preis und Liefertage auswählen (Bild 9-27). Nur dass wir diesmal
keine neue Tabelle und MatNr als Schlüssel wählen.
9.2 Bereichs-Controlling 345
Bild 9-25
Auswahl
zusätzlicher
Spalten
Mit Schließen und übernehmen, kehren wir zum Power Bi Desktop zurück.
Im letzten Schritt geben wir der Tabelle den Namen Materialbedarf und speichern die
Abfragen.
Bild 9-27 Fertige Tabelle zur Auswertung, aufsteigend sortiert nach MatNr
346 9 Operatives Prozess-Controlling
Damit haben wir alle wichtigen Daten zusammengetragen und müssen noch einige
Berechnungen anstellen. Anschließend könnten wir dann die Ergebnisse in der Berichtsansicht
visualisieren. Für die Berechnungen müssten wir uns ausführlich mit der DAX-Sprache
befassen. Es gibt aber noch einen zweiten Weg:
Wir rufen in der Datenansicht die neue Tabelle Materialbedarf auf.
Unter Start und Zwischenablage wählen wir Kopieren. Damit wird eine Kopie der Tabelle
in die Zwischenablage kopiert.
Nun öffnen wir eine neue Excel-Anwendung. Wir könnten auch die Vorlage dazu
benutzen, doch ich möchte sie als Vorlage für den Leser unverändert lassen.
Aus der Zwischenablage in der Excelmappe unter Start und Zwischenablage, gelangt mit
Einfügen die Tabelle auf ein Arbeitsblatt, die wir wiederum zu einer Datentabelle
umformen (Bild 9-28).
Wir markieren die gesamte Datentabelle und unter Formeln in der Gruppe Definierte
Namen wählen wir die Methode Aus Auswahl erstellen. So erhalten wir alle
Spaltenüberschriften als Bereichsnamen.
Auf einem weiteren Arbeitsblatt führen wir unsere Berechnungen durch (Bild 9-29).
9.2 Bereichs-Controlling 347
Bild 9-29
Bestellauswertung
Aus der Tabelle Bestellauswertung heraus erstellen wir eine Pivot-Tabelle (Bild 9-30), in der
wir die Gesamtmengen und Gesamtkosten der Materialien aufführen. Die Prozedur
CreateRingDiagramm (Codeliste 9-9) erzeugt zur Visualisierung ein Ringdiagramm, in dem
der innere Ring die Mengenanteile und der äußere Ring die Kostenanteile wiedergibt.
Noch einmal erstellen wir eine Pivot-Tabelle (Bild 9-31), diesmal mit der Sicht auf die
anfallenden Bestelltermine. Zur Visualisierung erstellen wir ein gestapeltes Säulendiagramm.
Bei der Mengenbetrachtung kommen wir auf die Idee, mehrere Bestelltermine zusammen zu
fassen. So markieren wir die ersten drei Termine gleichzeitig und mit der Methode Gruppieren
im Kontextmenü wird daraus die erste Gruppe. Danach fassen wir die nächsten vier zusammen
und dann die restlichen Termine (Bild 9-32).
Natürlich können wir die berechnete Tabelle auch noch einmal nach Power BI laden und einen
Report erstellen (Bild 9-33).
9.2.2 Produktions-Controlling
Die operativen Aufgaben des Controllings in der Produktion dienen der Sicherung des
Produktionsprozesses und der Produktionskostenkontrolle. Im Einzelnen sind dies:
Absatzmengen auf der Basis vorhandener Fertigungskapazitäten, Engpässe
Ausfallszenarien und deren Wahrscheinlichkeit (siehe Probabilistische Simulation)
Qualitätskontrolle
Ausschussminimierung
Minimierung von Rüst- und Produktionszeiten
Optimierung der Produktionsabläufe
Zu den Standardformularen in der Produktion gehört die Abweichungsanalyse. Als Beispiel
betrachten wir die Jahreszahlen eines Unternehmens (Bild 9-34). Darin sind sowohl die Plan-
wie auch die Ist-Werte aufgeführt.
XCT_09-09_AbweichungsAnalyse.xlsm
Bild 9-34
Abweichungs-
Analyse
Die zugehörigen Formeln (Tabelle 9-5) sind, dank der Bereichsnamen, leicht verständlich.
I2-I13 =(Ist_Menge-Plan_Menge)*Plan_Preis
J2-J13 =(Ist_Preis-Plan_Preis)*Plan_Menge
K2-K13 =(Ist_Menge-Plan_Menge)*(Ist_Preis-Plan_Preis)
Zur Visualisierung verwenden wir ein gestapeltes Säulendiagramm (Bild 9-35), das die
Prozedur Abweichungs-Analyse (Codeliste 9-10) erstellt.
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Monate"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "Wert"
.SetElement (msoElementSecondaryValueAxisTitleAdjacentToAxis)
.Axes(xlValue, xlSecondary).AxisTitle.Text = "Menge / Preis"
'Farben
With .FullSeriesCollection(3).Format.Fill
.ForeColor.ObjectThemeColor = msoThemeColorAccent1
.ForeColor.Brightness = 0.4
End With
With .FullSeriesCollection(2).Format.Fill
.ForeColor.ObjectThemeColor = msoThemeColorAccent6
.ForeColor.Brightness = 0.4
End With
With .FullSeriesCollection(1).Format.Fill
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.Brightness = 0.4
End With
End With
Set shpTmp = Nothing
Set chrTmp = Nothing
Set wshTmp = Nothing
End Sub
Bild 9-35
Abweichungs-
Diagramm
Ein weiteres klassisches Beispiel aus der Produktion ist die Bestimmung der optimalen
Losgröße. Dabei gehen wir von folgender Überlegung aus. Wird der Verkauf eines Produktes
A mit der Menge n pro Jahr eingeschätzt, so lässt sich diese Menge auf einmal produzieren und
in einem Lager bevorraten. Dabei ist Positives und Negatives zu beachten:
Die Rüstkosten fallen nur einmal an.
Lagerkosten entsprechen der Lagergröße.
Material und Löhne müssen vorfinanziert werden (Bankzinsen).
9.2 Bereichs-Controlling 353
Mit kleiner werdenden Losgrößen werden zwar die Lagerkosten und Bankzinsen weniger,
dafür steigen die Rüstkosten. Der Verlauf der Rüstkosten über der Losgröße entspricht einer
Hyperbel (Bild 9-36), während Lagerkosten und Kapitalbindung in Form einer Geraden
verlaufen.
Bild 9-36
Optimale Losgröße
Addiert man beide Kurven zu den Gesamtkosten so zeigt sich, dass diese an einer Stelle ein
Minimum annehmen, der Optimalen Losgröße.
Sind nGes die voraussichtliche Gesamtstückzahl pro Jahr und KR die Rüstkosten/Los, so
ergeben sich die Gesamtrüstkosten für jede Losgröße n aus der Formel:
𝐺 = ∙𝐾 . (9.3)
Sind KH die Herstellkosten ohne Rüstanteil pro Stück, zB der Zinssatz für den Bankzins in
Prozent/Jahr und zL der Zinssatz für die Lagerkosten ebenfalls in Prozent/Jahr, so werden
damit die Gesamtlagerkosten GL:
𝐺 = ∙𝐾 ∙ . (9.4)
XCT_09-10_OptimaleLosgroesse.xlsm
Als Anwendungsbeispiel betrachten wir einen Produktionsbetrieb, in dem 1000 Bauteile pro
Jahr produziert werden. Die Rüstkosten betragen 450 Euro/Auftrag und die Herstellkosten
liegen bei 22 Euro/Stück. Die Bankzinsen betragen 12 % und die Lagerzinsen 15 %.
Die Optimale Losgröße finden wir durch eine Deterministische Simulation (Bild 9-37) mit den
vorangegangenen Formeln. Auf dem Arbeitsblatt Simulation (Bild 9-38) gibt es ein
Eingabefeld und einen Auswertungsbereich. Die Prozedur Simulation (Codeliste 9-11) führt
die Berechnungen in einer Schleife aus und erstellt dazu ein Liniendiagramm (Bild 9-39).
354 9 Operatives Prozess-Controlling
Bild 9-37
Flussdiagramm
zur
Deterministischen
Simulation
Bild 9-38
Eingabefeld und
Auszug aus dem
Auswertungsbereich
Bild 9-39
Optimale
Losgröße
Wer mag, kann noch eine Fehlerindikatorline (siehe Break-Even-Analyse) ins Diagramm
eintragen.
9.2.3 Marketing-Controlling
Die Aufgabe des Marketing-Controllings dient einer effizienten und effektiven
marktorientierten Unternehmensführung, so auch der Erfüllung von Kundenbedürfnissen zum
Aufbau einer nachhaltigen Wettbewerbsposition. Im Einzelnen sind das:
Kostenvergleich Soll/Ist
Erreichung vorgegebener Ziele
Durchführung von Audits
Preisgestaltung
Beschwerde-Analysen
Kennzahlensysteme gestalten
u.v.a.
XCT_09-11_StaerkenSchwaechenAnalyse.xlsm
Für einen ersten Überblick eignet sich eine Stärken-Schwächen-Analyse, die einer
Wettbewerbsanalyse (Kapitel 8) sehr ähnelt. Sie birgt allerdings auch den Nachteil, dass nur
bestimmte Aufgaben betrachtet werden und nicht das Gesamtbild des Unternehmens.
Zusätzlich ist die Einschätzung der Aufgaben subjektiv. Weiter muss beachtet werden, dass
Maßnahmen auch Auswirkungen auf andere Aufgaben haben. Die Stärken-Schwächen-
Analyse dient oft als Vorbereitung zur SWOT-Analyse.
In dem betrachteten Beispiel (Bild 9-40) sind nur einige Aufgaben genannt, die in der Praxis
ein Vielfaches sein können und oft auch in Gruppen zusammengefasst sind.
9.2 Bereichs-Controlling 357
Bild 9-40
Stärken-Schwächen-
Liste
Die Prozedur erzeugt auch ein Textfeld, das zum Diagramm gehört und entsprechend platziert
wird (Bild 9-41).
Bild 9-41
Stärken-
Schwächen-
Diagramm
9.2.4 IT-Controlling
Die Einordnung des IT-Controllers in einem Unternehmen bedarf einer strengen Regelung,
besonders gegenüber den Kompetenzen eines CIO. Die typischen Aufgaben des IT-Con-
trollings sind:
9.2 Bereichs-Controlling 359
XCT_09_12_ITKosten.xlsm
Als Anwendungsbeispiel betrachten wir die IT-Kosten eines Unternehmens. Als Vorlage
verwende ich den Kostenartenplan nach [8] mit Beispieldaten (Bild 9-42).
Bei großen Listen ist die Gruppierung, eventuell auch in mehreren Stufen ein gutes Mittel, die
Übersicht zu behalten. Die Teilsummierung liefert eine weitere Information. Die leere Spalte A
bietet die Möglichkeit zur Auswahl der Kosten in unterschiedliche Gruppen. Zum Beispiel die
Auswahl der größten Kostentreiber mit einem G als Top 5. Dadurch ergibt sich in einer Pivot-
Tabelle eine weitere Gestaltungsmöglichkeit (Bild 9-43).
Mehr Möglichkeiten bietet jedoch Power BI Desktop (Bild 9-44).
Bild 9-42
IT-
Kostenplan
360 9 Operatives Prozess-Controlling
Bild 9-43
Top 5 der
IT-Kosten
XCT_09_13_ITKosten.pbix
9.2.5 Personal-Controlling
Das Personal-Controlling befasst sich mit den personellen Vorgängen in Unternehmen. In der
Regel werden dazu alle personellen Daten gesammelt und ausgewertet. Die Deutsche
Gesellschaft für Personalführung formuliert die Aufgaben und Ziele mit
Personalprozesse beschreiben
Kosten der Personalarbeit offenlegen
Personalwesen und Betriebsarbeit koordinieren
9.2 Bereichs-Controlling 361
XCT_09-14_Projektstunden.xlsm
Für ein Projekt sind 1500 Personalstunden geplant. Die Mitarbeiter von A bis Z kommen für
dieses Projekt in Frage. Ihre Zeiten, die sie dafür zur Verfügung stehen, sind in einer Liste
vorgegeben (Bild 9-45).
Bild 9-45
Personalliste
Es ist nun eine Auswahl Mitarbeiter für das Projektteam gefragt, deren Stundenzahl in der
Summe genau die Projektzeit ergibt und deren Qualifikation die höchste Punktzahl erreicht.
Ein klassisches Anwendungsbeispiel für die Methode Solver. Die Spalte Wahl regelt die
Auswahl der Mitarbeiter. Eine Eins bedeutet gewählt, eine Null nicht. Am Anfang stehen alle
Werte auf null.
E2 Zielwert
F2 Ergebniswert =Zielwert-SUMMENPRODUKT(Std*Wahl)
Mit dem Aufruf des Solvers unter Daten in der Gruppe Analyse öffnet sich ein Dialogfenster
zur Eingabe der Solver-Parameter (Bild 9-46):
Ziel festlegen: Ergebniswert
Bis: Wert 0
Durch Ändern von Variablenzellen: Wahl
Unterliegt den Nebenbedingungen:
o Wahl <= 1
o Wahl = Ganzzahlig
o Wahl >= 0
Lösungsmethode: Simplex-LP
Optionen: Ganzzahlige Nebenbedingungen ignorieren: abwählen
Optionen: Anzeige der Zwischenergebnisse: abwählen
Bild 9-46
Solver-Parameter
Mit der Schaltfläche Lösen startet der Solver und findet die entsprechende Lösung (Bild 9-47).
Zur besseren Unterscheidung setzen wir noch eine bedingte Formatierung ein.
Bild 9-47
Personalliste
Die Prozedur SolverGo (Codeliste 9-13) führt mit jedem Aufruf eine erneute Auswertung
durch. Bevor dies möglich ist, muss einmalig neben der Freischaltung des Solver-Add-Ins
unter Datei Optionen, auch noch im VBA-Editor unter Extras Verweise ein Verweis zum
Solver (Bild 9-48) erstellt werden.
Bild 9-48
Link zum
Solver
364 9 Operatives Prozess-Controlling
Es ist immer wieder verlockend, mit einer Tabelle ins Power BI zu gehen, um darin eine
Visualisierung auszuprobieren (Bild 9-49).
XCT_09-15_ProjektStunden.pbix
365
10 Strategisches Projekt-Controlling
Im Gegensatz zu Prozessen steht bei Projekten die Einmaligkeit im Vordergrund. Entsprechend
ist der Ansatz jedes Mal neu und der Aufwand deutlich höher. Das beginnt schon damit, dass
ein Projektteam und die erforderlichen Ressourcen bestimmt werden müssen.
10.1 Analyse-Methoden
Neben all den Analysen, die wir bisher besprochen haben und die auch für das Projekt-
Controlling eingesetzt werden können, gilt es im ersten Schritt Gewohntes aus anderen
Projekten mit neuen Ansätzen zu betrachten. Die Portfolio-Analysen sind so ein erster Schritt.
10.1.1 BCG-Matrix
Die BCG-Matrix ist eine Entwicklung der Boston Consulting Group. Die Matrix besteht aus
vier Feldern (Bild 10-1), für es jeweils eine andere Strategie gibt.
Bild 10-1
BCG-Matrix
Auf der horizontalen Achse wird der relative Marktanteil dargestellt. Nach Empfehlung der
BCG ist eine Trennline bei 1,5 zu setzen, da sich erst dann ein Vorteil ergibt, wenn der eigene
Marktanteil über 50 % höher ist als der stärkste Konkurrent. Auf der vertikalen Achse wird das
Marktwachstum abgebildet. Die Trennlinie bildet das gewünschte Wachstum.
Damit ergibt sich eine Vierteilung der Matrix, in denen Symbole die jeweilige Strategie
darstellen:
Stars (Sterne), besitzen einen hohen Marktanteil in einem wachsenden Markt. Einem
hohen Kapitalbedarf stehen hohe Erträge gegenüber. Ein geringer positiver oder negativer
Cashflow. Strategie: Wachstum.
Question Marks (Fragezeichen), besitzen einen geringen Marktanteil in einem wachsenden
Markt. Einem hohen Kapitalbedarf stehen geringe Erträge gegenüber. Ein hoher negativer
Cashflow. Strategie: Abwägung.
Cash Cows (Goldesel), besitzen einen hohen Marktanteil in einem stagnierenden Markt.
Einem geringen Kapitalbedarf stehen hohe Erträge gegenüber. Ein hoher positiver
Cashflow. Strategie: Abschöpfung.
Poor Dogs (armer Hund), besitzen geringen Marktanteil in einem stagnierenden Markt.
Einem geringen Kapitalbedarf stehen geringe Erträge gegenüber. Ein geringer positiver
oder negativer Cashflow. Strategie: Aufgeben.
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_10
366 10 Strategisches Projekt-Controlling
Einen ähnlichen Aufbau hat die SWOT-Analyse, die in Kapitel 8 behandelt wurde. Auch sie
teilt Vorhaben in vier Strategien auf.
XCT_10-01_BCGMatrix.xlsm
Als Anwendungsbeispiel liegt eine Marktanalyse (Bild 10-2) vor. Sie vergleicht eigene
Projekte mit Projekten der stärksten Mitbewerber.
Bild 10-2
Marktanalyse
Auch hier eignet sich ein Blasendiagramm zur Visualisierung (Bild 10-3). Erzeugt wird es von
der Prozedur Blasendiagramm (Codeliste 10-1).
"Marktwachstum"
'Datenbeschriftung
.ApplyDataLabels
With .FullSeriesCollection(1).DataLabels
.Format.TextFrame2. _
TextRange.InsertChartField msoChartFieldRange, _
"='BCG-Matrix'!$A$3:$A$9", 0
.ShowRange = True
.ShowValue = False
.Position = xlLabelPositionCenter
End With
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 10-3
BCG-
Matrix zum
Beispiel
Zwei manuell eingefügte Linienformen (rote Linien) verdeutlichen die Aufteilung. Danach
liegt das festgelegte Marktwachstum bei 5 % und bei einem relativen Marktanteil von 1,5.
Folglich sollten die Projekte C, E, F und G durchgeführt werden. Das Projekt B sollte
eingehender geprüft und die Projekte A und D sollten nicht durchgeführt werden.
10.1.2 McKinsey-Matrix
Die McKinsey-Matrix wurde von der Unternehmensberatung McKinsey in Zusammenarbeit
mit General Electric entwickelt. Im Grunde handelt es sich um eine Weiterentwicklung der
BCG-Matrix, nur weist die Matrix neun Felder auf (Bild 10-4).
368 10 Strategisches Projekt-Controlling
Bild 10-4
McKinsey-
Matrix
Die Marktattraktivität bestimmt sich neben dem Marktwachstum aus weiteren Kriterien:
Marktwachstum und Marktgröße
Anzahl und Position der Mitbewerber
Versorgung mit Energie und Rohstoffen
Umweltsituation
Markteintrittsbarrieren
Der relative Wettbewerbsvorteil bestimmt sich neben dem relativen Marktanteil aus weiteren
Kriterien:
relativer Marktanteil
relatives Produktpotential
relatives Finanzpotential
relative Qualifikation des Teams
finanzielle Situation
Die Strategien entsprechen wiederum denen in der BCG-Matrix.
XCT_10-02_McKinseyMatrix.xlsm
Das betrachtete Beispiel besteht aus zwei Tabellen (Bild 10-5), in denen Marktattraktivität und
Wettbewerbsstärken von vier Projekten betrachtet werden. Eine zusätzliche Gewichtung steuert
den Einfluss einzelner Kriterien.
Das Blasendiagramm zur Visualisierung (Bild 10-6) wird durch die Prozedur Blasendiagramm
(Codeliste 10-2) erzeugt. Dabei werden die Gitterlinien als Bereichsgrenzen genutzt.
10.1 Analyse-Methoden 369
Bild 10-5
Marktanalyse
.Format.TextFrame2. _
TextRange.InsertChartField msoChartFieldRange, _
"='McKinsey-Matrix'!$C$2:$F$2", 0
.ShowRange = True
.ShowValue = False
.Position = xlLabelPositionCenter
End With
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 10-6
McKinsey-
Matrix
10.1.3 Risiko-Portfolio
Neben den Zielen eines Projektes zählen auch deren Risiken zu den Hauptmerkmalen. Sehr
beliebt ist ein Risiko-Portfolio mit einem entsprechenden Blasendiagramm. Auch hier lässt sich
die darstellende Matrix in Bereiche unterscheiden. Es gibt die 2x2-, die 3x3- und die 4x4-
Matrix.
XCT_10-03_RisikoPortfolio.xlsm
Das betrachtete Beispiel (Bild 10-7) führt die Risiken auf, die bei einem Projekt bestehen. Die
Abschätzung der Eintrittswahrscheinlichkeit beruht auf Erfahrungen aus anderen Projekten und
der Betrachtung der Projekteinflüsse. Das gilt auch für die Schadenshöhe.
Auch hier wird ein Blasendiagramm zur Visualisierung (Bild 10-8) genutzt, das durch die
Prozedur Blasendiagramm (Codeliste 10-3) erzeugt wird. Ebenfalls werden die Gitterlinien als
Bereichsgrenzen genutzt.
10.1 Analyse-Methoden 371
Bild 10-7
Projekt-Risiken
.Format.TextFrame2. _
TextRange.InsertChartField msoChartFieldRange, _
"='Risiko-Matrix'!$A$2:$A$8", 0
.ShowRange = True
.ShowValue = False
.Position = xlLabelPositionCenter
End With
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 10-8
Risiko-Matrix
XCT_10-04_Nutzwertanalyse.xlsm
Als Anwendungsbeispiel benutzen wir ein Schema (Bild 10-9), bei dem die Gewichtung nach
Punkten ohne Beschränkung erfolgt. Zunächst gilt es festzustellen, welche Kriterien für eine
Projektentscheidung wichtig und maßgeblich sein sollen. In den meisten Fällen können schon
10.1 Analyse-Methoden 373
im ersten Schritt KO-Kriterien formuliert werden, die zwingend erfüllt werden müssen.
Lösungen, die diese Bedingungen nicht erfüllen, scheiden sofort aus.
Bild 10-9
Nutzwert-
Analyse
Muss-Kriterien können durch Soll-Kriterien ergänzt werden, deren Erfüllung gewünscht, aber
nicht notwendig sind. Ziel ist eine Systematisierung in Ober- und Unterziele.
H3 =WENN(ZÄHLENWENN(Grad3;"N")>0;"Nicht OK";"OK")
Gelb =4
Grün =7
'Legende
.SetElement (msoElementLegendRight)
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 10-10
Nutzwert-
Diagramm
10.1.5 Einfluss-Analyse
Mehrere Projekte beeinflussen sich mitunter auf unterschiedliche Art und Weise. Daher ist es
sinnvoll, sich dieses Themas mit einer Methode anzunehmen, zumal sich daraus die
Priorisierung der Projekte ableiten lässt. Zwischen Projekten lassen sich drei
Beziehungsformen aufzeigen:
Ein Projekt schafft konzeptionelle Voraussetzungen für andere Projekte
(Innovationsbeziehung).
Ein Projekt muss mit anderen Projekten realisiert werden, damit ein Gesamtziel
erreicht werden kann (Integrationsbeziehung).
Ein Projekt wirkt sich auf die Kosten anderer Projekte aus (Investitionsbeziehung).
XCT_10-05_EinflussAnalyse.xlsm
Als Anwendungsbeispiel betrachten wir eine Einfluss-Matrix (Bild 10-11), in die Projekte mit
paarweisen Vergleichen zu ihrer Abhängigkeit betrachtet werden. Die Wertung der
Anhängigkeit erfolgt mit einem Faktor von 0 bis 3 zu der Frage, wie verändert sich Projekt X
(Spalte), wenn sich Projekt Y (Zeile) ändert?
376 10 Strategisches Projekt-Controlling
Bild 10-11
Beispiel einer
Einfluss-Matrix
Das Ergebnis der Einfluss-Matrix wird in ein Portfolio-Diagramm übertragen (Bild 10-12).
Auch dieses Portfolio wird in vier Bereiche unterteilt:
Aktive Projekte nehmen Einfluss auf andere Projekte, sind aber selbst unabhängig.
Kritische Projekte nehmen Einfluss auf andere Projekte und erfahren selbst einen Einfluss.
Passive Projekte sind abhängig von anderen Projekten, ohne selbst Einfluss zu nehmen.
Träge Projekte nehmen und empfangen wenig Einfluss.
Bild 10-12
Portfolio der
Einfluss-
Matrix
Die Betrachtung des Portfolios lässt nun Rückschlüsse auf die Priorität der Projekte zu:
Hohe Priorisierung erhalten die Projekte D und G. Sie beeinflussen andere Projekte und
erhalten daher 1. Priorität.
Projekt B ist weder bedeutsam noch dringlich, beeinflusst aber andere Projekte und erhält
daher 2. Priorität.
10.2 Planungs-Methoden 377
Die Projekte C, H und I liegen im kritischen Bereich und sollten überdacht werden.
Allerdings ist ihr Einfluss auf andere Projekte sehr hoch und sie erhalten 3. Priorität.
Die Projekte F und K bekommen die 4. Priorität, da sie wenig Einfluss und Dringlichkeit
gegenüber den anderen Projekten besitzen.
Die Projekte A, E und I erhalten wegen ihrer geringen Dringlichkeit, aber hohem Einfluss
von anderen Projekten, die niedrigste Priorität. Zuerst sollten die einflussnehmenden
Projekte starten.
10.2 Planungs-Methoden
Die Planung eines Projekts beginnt in der Regel mit dem Kick-Off-Workshop. Es ist das erste
Zusammentreffen des Projektteams, bei dem meist an mehreren Tagen grundlegende Pläne
erstellt werden:
Umfeldanalyse
Projekt-Strukturplan
Beschreibung der Arbeitspakete
grober Ressourcenplan
grober Terminplan
erste Risikoanalyse
Im Kick-Off festigt sich das Projektteam und es werden:
Rollen definiert
Erwartungen besprochen
allgemeine Spielregeln festgelegt
Verantwortlichkeiten dokumentiert
10.2.1 Projekt-Strukturplan (PSP)
Der Projekt-Strukturplan besitzt ein hierarchisches Schema, in dem alle anfallenden
Aktivitäten eines Projekts und die zwischen den Aktivitäten bestehenden Reihenfolge-
Beziehungen genannt werden (Bild 10-13).
An der Spitze steht die Gesamtaufgabe des Projekts, untergliedert nach Teilaufgaben. Die
Teilaufgaben gliedern sich möglicherweise noch einmal in Unterteilaufgaben. Dies wird so
lange heruntergebrochen bis jeder Unterteilaufgabe ein Arbeitspaket (AP) gegenübersteht, die
kleinste Einheit im PSP.
Nicht ohne Grund wird der Projekt-Strukturplan die Mutter aller Projektpläne genannt. Erfüllt
er doch gerade zum Beginn eines Projekts eine Menge Funktionen:
verschafft eine Übersicht über das Projekt
bildet Teilprojekte
zeigt Zusammenhänge und Schnittstellen
gibt eine ganzheitliche Betrachtung des Projekts
liefert eine Aufgabenstruktur und Zuständigkeiten
macht das Projekt insgesamt transparent
ist die Basis für weitere Planungen
hilft bei der Abwicklung und Steuerung
dokumentiert das Projekt
ordnet Kosten den Ressourcen zu
liefert Entscheidungsgrundlagen
schafft gleichen Informationsstand für alle Beteiligten
u.v.a.
Bild 10-14
Einfacher
Projekt-
Strukturplan
10.2 Planungs-Methoden 379
Als Beispiel betrachten wir einen Auszug aus einem vereinfachten PSP (Bild 10-14) für ein IT-
Projekt.
XCT_10-06_ProjektStrukturPlan.xlsm
Bereich Beschreibung
C5 =SUMME(C2:C4)/ANZAHL(C2:C4)
C10 =SUMME(C6:C9)/ANZAHL(C6:C9)
C14 =SUMME(C11:C13)/ANZAHL(C11:C13)
C20 =SUMME(C15:C19)/ANZAHL(C15:C19)
C25 =SUMME(C21:C24)/ANZAHL(C21:C24)
C30 =SUMME(C26:C29)/ANZAHL(C26:C29)
D1 MITTELWERT(C5;C10;C14;C20;C25;C30)
Die Nummerierung der Liste ist zwar dienlich für die Gruppierung, doch wir brauchen auch die
übliche Nummerierung mit einer Kopfzeile. Die Prozedur LeseOrga (Codeliste 10-5) gibt sie
im Direktfenster (Bild 10-15) aus.
Bild 10-15
Projekt-
Strukturplan
Zur Visualisierung dieser Hierarchie eignet sich besonders gut die Smartart-Grafik Hierarchie.
Die Prozedur CreateHierarchieDiagramm (Codeliste 10-6) erstellt eine Grafik (Bild 10-16) auf
dem Arbeitsblatt. Darin wird der Status der Aufgaben farblich gekennzeichnet.
'Systemeinstellungen
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("PSP IT-Projekt")
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'neues Diagramm
10.2 Planungs-Methoden 381
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set salLayout = Nothing
Set shpOrga = Nothing
Set sanNodes = Nothing
Set sanNode = Nothing
End Sub
10.2.2 Netzplan
Die Planung von Aktivitäten soll helfen die Ziele zu erreichen, die sich das Projekt gesetzt hat.
Qualität, Zeit und Kosten sind die wesentlichen Leistungsmerkmale von Projekten.
Ein Projekt ist eine inhaltlich abgeschlossene, zeitlich begrenzte und sachlich logische Folge
von Aktivitäten, die sowohl zeitlich nebeneinander wie auch in Abfolge durchgeführt werden.
Eine reine Vorgangsliste reicht dazu nicht aus (Bild 10-17).
Der Ursprungsgedanke zum Netzplan ist die Darstellung kritischer Pfade im Zeitablauf eines
Projekts (Critical Path Method, kurz CPM). Das Netzplandiagramm zeigt, welche Aktivitäten
mit und ohne Zeitreserven durchführbar sind und welche Aktivitäten maßgeblich den
384 10 Strategisches Projekt-Controlling
Projektablauf beeinflussen. Der Netzplan ist sowohl ein Darstellungsmittel der Terminplanung
als auch ein Algorithmus zur Bestimmung des kritischen Pfades.
Ein CPM-Netzplan besteht aus Knoten und Kanten, wobei die Aktivitäten wie Bezeichnung
und Dauer in den Kanten und Zeiten wie frühester/spätester Anfangs- und Endtermin in den
Knoten abgebildet werden (Bild 10-18).
Bild 10-18
Projekt-
Strukturplan
XCT_10-07_Netzplan.xlsm
Als Anwendungsbeispiel betrachten wir eine einfache Projektplanung (Bild 10-19). Es sollen
Termine und der Kritischen Pfad bestimmt werden.
Bild 10-19
Aktivitätenliste
Vorwärtsrechnung
Der erste Schritt ist die Bestimmung der frühestmöglichen Anfangszeitpunkte (FAZ) jeder
nachfolgenden Aktivität aus den FAZs aller möglichen Voraktivitäten. Besitzt eine Aktivität
mehrere Voraktivitäten, die alle erst beendet sein müssen, bevor sie beginnen kann, so ist bei
der Vorwärtsrechnung die Voraktivität zeitbestimmend, die als letzte endet, also diejenige mit
dem spätesten FAZ (Bild 10-20).
𝐹𝐴𝑍 = 𝑀𝑎𝑥 𝐹𝐴𝑍 + 𝐷 , 𝑘 = 1, … , 𝑛 (10.1)
Bild 10-20
Vorwärtsrechnung
10.2 Planungs-Methoden 385
Bild 10-21
Rückwärtsrechnung
Freier Puffer
Der Freie Puffer ist die Differenz zwischen FAZ und SAZ einer Aktivität. Um diesen Wert
kann der Start der Aktivität verschoben werden, ohne dass dadurch ein Einfluss auf eine andere
Aktivität entsteht.
Gesamtpuffer
Der Gesamtpuffer definiert die Zeit, um die eine Aktivität verschoben werden darf, ohne dass
Auswirkungen auf das Projektende auftreten. Beträgt die Gesamtpufferzeit Null, so wie in
diesem Beispiel, so spricht man von einem Kritischen Pfad. Denn jede Verzögerung einer
Aktivität hätte unmittelbare Auswirkungen auf das Projektende.
Der Kritische Pfad ist in diesem Beispiel die Abfolge 1-2-5-9-10.
Zur Visualisierung benutzen wir diesmal unter dem Register Einfügen in der Gruppe
Illustrationen drei Rechtecke. Die Prozedur CreateNetzplan (Codeliste 10-7) erstellt aus drei
gruppierten Rechtecken eine Gruppe und benutzt sie als Knoten im Netzplan (Bild 10-22).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Netzplan")
Set colKnoten = New Collection
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'Auflösung in einzelnen Verbindungen
lBegin = 2 'Zeile mit erstem Eintrag
lEnd = 11 'Zeile mit letztem Eintrag
lMax = lEnd - lBegin + 1
ReDim sMkr(4, lMax) As String 'Merker
iMkr = 0
For lRow = lBegin To lEnd
sNum = Right("0" & Trim(Str(Val(wshTemp.Cells(lRow, 1)))), 2)
sNach = Trim(wshTemp.Cells(lRow, 4))
Do While InStr(sNach, "/") > 0
iMkr = iMkr + 1
If iMkr > UBound(sMkr, 2) Then
ReDim Preserve sMkr(4, iMkr) As String
End If
sMkr(1, iMkr) = sNum
sMkr(2, iMkr) = Right("0" & Trim(Str(Val(sNach))), 2)
sMkr(3, iMkr) = 1
sMkr(4, iMkr) = wshTemp.Cells(1 + Val(sNach), 5)
sNach = Right(sNach, Len(sNach) - InStr(sNach, "/"))
Loop
iMkr = iMkr + 1
If iMkr > UBound(sMkr, 2) Then
ReDim Preserve sMkr(4, iMkr) As String
End If
sMkr(1, iMkr) = sNum
sMkr(2, iMkr) = Right("0" & Trim(Str(Val(sNach))), 2)
sMkr(3, iMkr) = 1
10.2 Planungs-Methoden 387
Characters.Text = Str(iZeit2)
End If
End If
Set objKtn = Nothing
'Verbinder
Set objLine = New clsLine
With objLine
.sNum1 = sNum1
.sNum2 = sNum2
.iZeit = Val(sMkr(4, iMkr))
.Create
End With
sMkr(3, iMkr) = 0 'Verb. bearbeitet
'suche nächste Verb. von Knoten2, wenn vorhanden
Do While (iMkr < iMax) And Not (sNum2 = sMkr(1, iMkr))
iMkr = iMkr + 1
Loop
Else
iMkr = iMkr + 1
End If
Loop While iMkr < iMax
'gehe wieder rückwärts bis Verb. nicht bearbeitet
lY = lY + 100
Do
iDa = 0
iMkr = iMkr - 1
sNum1 = sMkr(1, iMkr)
For Each objKtn In colKnoten
sNumx = objKtn.sNum
If sNumx = sNum1 Then
If sMkr(3, iMkr) = 1 Then
iDa = iMkr
Exit For
End If
End If
Next
If iDa > 0 Then iMkr = iDa
Loop While iMkr > 0 And iDa = 0
Loop While iMkr > 0
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set objKtn = Nothing
Set colKnoten = Nothing
End Sub
Für diese Visualisierung benutzen wir ein Objektmodell mit den Klassen Knoten und Linie.
Wer in die objektorientierte Programmierung tiefer einsteigen möchte, findet das Beispiel und
viele Erläuterungen dazu unter [15].
10.2 Planungs-Methoden 389
Sub Create()
Dim shpR1 As Shape
Dim shpR2 As Shape
Dim shpR3 As Shape
Dim shpGroup As Shape
Sub Create()
ActiveSheet.Shapes.AddConnector _
(1, 10, 10, 10, 10).Select
Selection.Name = "L_" & sNum1 & "-" & sNum2
Selection.ShapeRange.ConnectorFormat. _
BeginConnect ActiveSheet.Shapes("R1_" & sNum1), 4
Selection.ShapeRange.ConnectorFormat. _
EndConnect ActiveSheet.Shapes("R1_" & sNum2), 2
Selection.ShapeRange.Line.EndArrowheadStyle = 2
'Pfeilgestaltung
'Selection.ShapeRange.Line.EndArrowheadLength = msoArrowheadLong
'Selection.ShapeRange.Line.EndArrowheadWidth = msoArrowheadWide
End Sub
10.2.3 Gantt-Diagramm
Ein Gantt-Diagramm stellt die Abfolge von Aktivitäten in Form von Balken dar. Die
Aktivitäten werden auf der Ordinate untereinander aufgeführt. Die Abszisse ist in der Regel
eine Zeitschiene, so dass dort die Dauer der Aktivität von ihrem Start bis zum Ende
eingetragen wird (Bild 10-23).
10.2 Planungs-Methoden 391
Bild 10-23
Der Aufbau eines
Gantt-Diagramms
Durch die Anordnung der Aktivitäten können ebenfalls Abhängigkeiten dargestellt werden.
XCT_10-08_GanttDiagramm.xlsm
Als Beispiel betrachten wir noch einmal die Aktivitätenliste (Bild 10-24), diesmal mit festen
Terminen.
Bild 10-24
Aktivitätenliste
Der Starttermin für die Aktivitäten 2 und 3 wird mit STRG + Punkt als aktuelles Datum
eingefügt. Alle anderen Termine ergeben sich nach der Dauer der Aktivität und der
Verknüpfung. Zur Visualisierung markieren wir den Bereich A2:B10 und wählen als
Diagrammform Gestapelte Balken (Bild 10-25).
Bild 10-25
Starttermine im
gestapelten
Balkendiagramm
Im nächsten Schritt wird aus dem Kontextmenü des Diagramms die Methode Daten auswählen
aufgerufen und eine weitere Datenreihe Dauer hinzugefügt (Bild 10-26).
392 10 Strategisches Projekt-Controlling
Mit einem Mausklick auf die Datenreihe Starttermin im Diagramm werden die Balkenelemente
markiert. Im Kontextmenü wird die Methode Datenreihen formatieren gewählt und im
Dialogfenster wird unter der Gruppe Füllung die Option Keine Füllung gewählt (Bild 10-27).
Die Datumsachse wird nun enger formatiert, so dass der Bereich die Balken umfasst. Die
Zeitachse wird in der Beschriftung markiert und über das Kontextmenü wird die Methode
Achse formatieren aufgerufen. Im Dialogfenster werden die Datumswerte als Minimum und
Maximum fest eingetragen.
Mit einem Mausklick auf die Beschriftung der Aktivitätsachse wird über das Kontextmenü
noch einmal die Methode Achse formatieren aufgerufen. Allerdings wird hier im Dialogfenster
die Option Kategorien in umgekehrter Reihenfolge ausgewählt (Bild 10-28).
10.2 Planungs-Methoden 393
Bild 10-28
Umstellung der
Reihenfolge
Im letzten Schritt wird das Design des Diagramms über das Kontextmenü noch etwas
angepasst (Bild 10-29).
Bild 10-29
Gantt-Diagramm
Die Prozedur CreateGanttDiagramm (Codeliste 10-10) erzeugt das Gantt-Diagramm mit den
zuvor beschriebenen Schritten.
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Aktivitäten")
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(297, xlBarStacked)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("Aktivitäten!$A$2:$B$10")
.HasTitle = False
'zweite Datenreihe Dauer
394 10 Strategisches Projekt-Controlling
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=""Dauer"""
.FullSeriesCollection(2).Values = "=Aktivitäten!$C$2:$C$10"
'erste Datenreihe ausblenden
.FullSeriesCollection(1).Format.Fill.Visible = msoFalse
'Datumsachse
.Axes(xlValue).Format.Fill.Visible = msoFalse
.Axes(xlValue).MajorUnit = 10
.Axes(xlValue).MinimumScale = wshTemp.Cells(2, 2) - 2
.Axes(xlValue).MaximumScale = wshTemp.Cells(10, 4) + 2
.Axes(xlValue).MajorUnit = 2
'Aktivitätsachse
.Axes(xlCategory).Select
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlValue).Select
'Application.Width = 882
'Application.Height = 666.75
.Axes(xlValue).TickLabels.Orientation = 75
.ChartGroups(1).GapWidth = 10
With .FullSeriesCollection(2).Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 240)
.Transparency = 0
.Solid
End With
With .FullSeriesCollection(2).Format.Shadow
.Type = msoShadow21
.Visible = msoTrue
.Style = msoShadowStyleOuterShadow
.Blur = 4
.RotateWithShape = msoFalse
.ForeColor.RGB = RGB(0, 0, 0)
.Transparency = 0.6
.Size = 104
End With
.FullSeriesCollection(2).ApplyDataLabels
.FullSeriesCollection(2).DataLabels.NumberFormat = "#"" Tage"""
.FullSeriesCollection(2).Points(9).DataLabel.NumberFormat =
"#"" Tag"""
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
10.2.4 Ressourcenplanung
Der Begriff Ressource stammt aus der französischen Sprache (la ressource) und beschreibt
Elemente die zur Durchführung einer Aktivität erforderlich sind. Darunter werden meist
Personen und ihre Arbeitszeit, aber auch Betriebsmittel, Rohstoffe, Energiemengen und
letztlich auch Finanzen verstanden. Die Zuteilung von Ressourcen wird als
Ressourcenallokation bezeichnet. Je nach Einsatzgebiet finden sich Pläne in den
unterschiedlichsten Ausprägungen.
10.2 Planungs-Methoden 395
XCT_10-09_DatumsFunktionen.xlsm
In vielen ist die zeitliche Betrachtung ein wichtiger Parameter, so dass Wochen- und
Arbeitstage eine große Rolle spielen. Auch hier liefert Excel grundlegende Funktionen.
Typ Funktionswerte
1 1 (Sonntag) – 7 (Samstag)
2 1 (Montag) – 7 (Sonntag)
3 0 (Montag) – 6 (Sonntag)
11 1 (Montag) – 7 (Sonntag)
12 1 (Dienstag) – 7 (Montag)
13 1 (Mittwoch) – 7 (Dienstag)
14 1 (Donnerstag) – 7 (Mittwoch)
15 1 (Freitag) – 7 (Donnerstag)
16 1 (Samstag) – 7 (Freitag)
17 1 (Sonntag) – 7 (Samstag)
396 10 Strategisches Projekt-Controlling
Bild 10-30
Anwendung der
Funktion
WOCHENTAG
Sub FormelnSchreiben()
Range("E1:E6").FormulaArray = "=WEEKDAY(Liste,2)"
End Sub
Sub WerteZuweisen()
Dim iCount As Integer
Dim iOp As Integer
For iCount = 1 To 6
iOp = Weekday(Cells(iCount, 4), 2)
Cells(iCount, 5) = iOp
Next iCount
End Sub
Bild 10-31
Anwendung der Funktion
ARBEITSTAG
Sub FormelnSchreiben()
Dim iCount As Integer
Dim sOp As String
For iCount = 2 To 7
sOp = "=WORKDAY(" & Cells(iCount, 3).Address & _
"," & Cells(iCount, 4).Address & ")"
Cells(iCount, 5).Formula = sOp
Next iCount
End Sub
Sub WerteZuweisen()
Dim iCount As Integer
Dim vDatum As Variant
Dim vTage As Variant
Dim vOp As Variant
For iCount = 2 To 7
vDatum = Cells(iCount, 3)
vTage = Cells(iCount, 4)
vOp = WorksheetFunction.WorkDay(vDatum, vTage)
Cells(iCount, 5) = vOp
Next iCount
End Sub
Ein Controller muss die Anzahl der Nettoarbeitstage bestimmen, die durch ein Zeitintervall
(Starttermin, Endtermin) und die Datumangaben der freien Arbeitstage vorgegeben sind (Bild
10-32).
Bild 10-32
Anwendung der Funktion
NETTOARBEITSTAGE
Sub FormelnSchreiben()
Dim iCount As Integer
Dim sOp As String
For iCount = 2 To 7
Cells(iCount, 4).FormulaR1C1 = _
"=NETWORKDAYS(RC[-3],RC[-2],freie_Tage)"
Next iCount
End Sub
Sub WerteZuweisen()
Dim iCount As Integer
Dim vVon As Variant
Dim vBis As Variant
Dim vOp As Variant
For iCount = 2 To 7
vVon = Cells(iCount, 1)
vBis = Cells(iCount, 2)
vOp = WorksheetFunction.NetworkDays(vVon, vBis, [freie_Tage])
Cells(iCount, 4) = vOp
10.2 Planungs-Methoden 399
Next iCount
End Sub
10.2.5 Kapazitätsplanung
Bei der Kapazitätsplanung geht es darum, die vorhandenen Ressourcen zu einem möglichst
hohen Grad auszulasten. Eine Ressource, z. B. eine Maschine oder eine Person, erhält mehrere
Aufgaben. Sie ist jedoch nur in der Lage, einen Teil des Aufwandes pro Stunde, pro Tag, etc.
zu erledigen.
XCT_10-10_KapazitaetsPlanung.xlsm
Als Anwendungsbeispiel (Bild 10-33) betrachten wir eine Abteilung mit acht Aufgaben A – H.
Da die Funktion ARBEITSTAG Probleme mit der Nutzung von Bereichsnamen hat, ist dieses
Beispiel mit Bereichsnamen und Zelladressen in den Formeln aufgebaut. Es gibt somit nur
zwei Bereichsnamen. Mithilfe des Offsets lässt sich das aktuelle Datum um Tage verschieben.
Die Zeitleiste beginnt dann mit dem ersten aus der Summe bestimmten Tag und es werden
lediglich die Arbeitstage dargestellt.
400 10 Strategisches Projekt-Controlling
Bereich Formel
B3 Aktuelles_Datum
B4 Offset
A11 = WENN(WOCHENTAG(MIN(Aktuelles_Datum+Offset-1);2)=6;
MIN(Aktuelles_Datum+Offset+1);
WENN(WOCHENTAG(MIN(Aktuelles_Datum+Offset-1);2)=7;
MIN(Aktuelles_Datum+Offset);MIN(Aktuelles_Datum+Offset-1)))
A12 = WENN(WOCHENTAG(A11;2)=5;A11+3;A11+1)
A13:A60 A12 übertragen
B10 = B9/$B$2
C10:I10 B10 übertragen
B11 = WENN(ODER(B$9<=0;$A11<B$8);"";WENN(B$9-WENN(
NETTOARBEITSTAGE(B$8;$A11;2) <0;0;
(NETTOARBEITSTAGE(B$8;$A11;2)-1)*$B$2)>$B$2;$B$2;
WENN(B$9-(NETTOARBEITSTAGE(B$8;$A11;2)-1)*$B$2>0;
B$9-(NETTOARBEITSTAGE(B$8;$A11;2)-1)*$B$2;"")))
B11:I50 B11 übertragen
K11 = J11/$B$5
K12:K50 K11 übertragen
Alle grün markierten Felder sind Eingabefelder. Zu jeder Aufgabe werden das Startdatum und
der geschätzte Aufwand vorgegeben. Das Formular enthält außerdem zwei bedingte
Formatierungen (Tabelle 10-10)
Bild 10-34
Abgestufte Skala
Die ersten zehn Zeilen werden abschließend eingefroren. Dieses grundlegende Formblatt kann
durch Einfügen von Spalten und Zeilen beliebig erweitert werden.
10.2.6 Terminplanung
Bei der Terminplanung geht es darum, vorgegebene Termine einzuhalten. Der Aufbau ist
ähnlich dem der Kapazitätsplanung. Auch hier sind die grünen Felder wieder Eingabefelder
(Bild 10-35).
XCT_10-11_TerminPlanung.xlsm
Für Aufgaben werden Start- und End-Termin festgelegt. Ebenso der benötigte Aufwand in
Stunden und die Kapazität, mit der die Aufgabe pro Tag bearbeitet wird. Eine bedingte
Formatierung über den Bereich A10:I10 zeigt negative Werte in weiß-roter Zellformatierung.
Hier liegt der Fertigstellungstermin hinter dem Endtermin. Die Datumsliste beginnt einen Tag
vor dem aktuellen Datum. Zum Abschluss wird die Zeile 11 ausgeblendet und der obere
Bereich der Zeilen von 1 bis 10 eingefroren.
10.2.7 Kostenplanung
Bei der Kostenplanung geht es darum, anfallende Kosten zu bestimmen bzw. laufende Kosten
zu überwachen. Eine Kostenüberwachung kann mit ähnlichem Aufbau wie in den beiden
vorhergehenden Beispielen aufgebaut werden. Hier wird ein Formular zur Kostenbestimmung
besprochen.
10.2 Planungs-Methoden 403
XCT_10-12_KostenPlanung.xlsx
Im ersten Schritt werden Arbeitsblätter der verschiedenen Ressourcen mit ihren Kostensätzen
angelegt. Bild 10-36 zeigt eine vereinfachte Teamliste.
Bild 10-36
Teamliste
(Zeilen 5-18 ausgeblendet)
Bild 10-37
Produktionsliste
(Zeilen 5-18 ausgeblendet)
Bild 10-38
Sonstige Kostensätze
(Zeilen 5-8 ausgeblendet)
Alle Arbeitsblätter mit Kostensätzen erhalten für den Datenbereich (ohne Überschriften) einen
aussagekräftigen Bereichsnamen, in diesem Fall sind es Team, Produktion und Sonstiges.
Der eigentliche Kostenplan hat die in Bild 10-39 dargestellt Form. In den Spalten A und B
werden die Teilaufgaben des Projekts klassifiziert und benannt. Die Spalten C bis I sind zur
Bestimmung der Personalkosten eingeteilt. Die Spalten C bis H werden markiert und über das
Menüregister Daten und der Gruppe Gliederung mit der Methode Gruppierung
zusammengefasst. Damit können die Spalten C bis H aus- bzw. eingeblendet werden. Die
Spalte I weißt die Zeilensummen des Spaltenbereichs C:H aus. Während die Zeile 7 zur
Aufnahme der Kostennummern dient, ist die Zeile 8 zur Einblendung der Kostensätze
vorgesehen.
404 10 Strategisches Projekt-Controlling
Die Teilsummen und die Gesamtsumme der Teilaufgaben bestimmen sich nach der
vorgenommenen Einteilung.
405
11 Operatives Projekt-Controlling
Das operative Projekt-Controlling sammelt und analysiert projektbegleitend regelmäßig Daten
rund um das gesamte Projektgeschehen (Bild 11-1). Die Daten werden in kurzen regelmäßigen
Abständen gesammelt, um ein aktuelles Reporting zu ermöglichen. Plan-Ist-Analysen liefern
Vergleiche zwischen Projektfortschritt, gesetzten Terminen und Meilensteinen, zwischen
Kostenverbrauch und Kostenplanung. Sie ergeben einen Überblick zur erbrachten Quantität
und Qualität.
Bild 11-1
Steuerungsprinzip
11.1 Organisations-Methoden
Es empfiehlt sich, den Aufwand (auch Effort genannt) in einem Projekt (Bild 11-2) sorgfältig
abzuwägen und die zur Verfügung stehen Ressourcen richtig einzusetzen. Dazu gibt es die
unterschiedlichsten Methoden.
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2_11
406 11 Operatives Projekt-Controlling
11.1.1 Projekt-Tracking
Ein zentrales Tool zur Projekt-Kommunikation gilt als Arbeitsplattform für das gesamte
Projekt-Team. Das, oft als Projekt-Tracking bezeichnete Tool, verwaltet Aufgaben und deren
Prioritäten untereinander, zu erbringende und erbrachte Leistung, Termine, Kosten, Aufwand
der Ressourcen und der zur Durchführung der Aufgabe Verantwortliche im Team.
Als Beispiel betrachten wir einen auszugsweisen SafetyCase_Taskplan (Bild 11-3). Um die
Übersicht zu behalten, da eine Menge von Spalten erforderlich ist, wird auch hier die
Gruppierung angewendet, teilweise sogar als Untergruppierung. Die Anordnung ist diesmal
von links nach rechts.
XCT_11-01_ProjektTracking.xlsm
Bild 11-3
Auszug aus einem
Entwicklungsplan
zum Projekt-
Tracking
11.1 Organisations-Methoden 407
Eine weitere Tabelle, in die die Werte aus der Entwicklungstabelle übertragen werden (im
Beispiel nicht ausgeführt) ist der Fortschrittsbericht (Bild 11-5).
In einer solchen Tabelle werden mit bedingter Formatierung die Werte farblich eingeteilt und
per Ampel wichtige Hinweise markiert. Doch hier beginnt bereit die Anpassung an das
jeweilige Unternehmen. Auch die Anzahl weiterer Tabellen zu anderen Aspekten gehört dazu,
so dass eine beachtliche Sammlung entsteht.
11.1.2 Kostengang- und Kostensummenlinie
Mithilfe der Kostenlinien lassen sich die Kostenverläufe im Projekt sehr gut visualisieren. Sie
werden in der Regel auf Gesamtprojektebene eingesetzt, sind aber auch auf Teilprojektebene
ein hervorragendes Instrument.
Mit einer Kostenganglinie werden monatlich anfallende Kosten im Projekt dargestellt und sie
zeigt, welches Budget der Auftraggeber demzufolge zur Verfügung stellen muss. Die
408 11 Operatives Projekt-Controlling
XCT_11-02_KostengangKostensummeLinien.xlsm
Das Anwendungsbeispiel (Bild 11-6) zeigt eine Liste mit den erfassten Werten für einen
Jahreszeitraum.
Bereich Formel
B4 =B2
C4 =B4+C2
D4:M4 C4 übertragen
B5 =B3
C5 =B5+C3
D5:M5 C5 übertragen
Die Prozedur CreateKostenlinien (Codeliste 11-1) erzeugt die Visualisierung der Kostenlinien
durch eine Liniendiagramm (Bild 11-7). Die vorliegende Tabelle darf keine Datentabelle sein.
With chrTemp
.SetSourceData _
Source:=Range("Kostenlinien!$B$2:$M$2")
.FullSeriesCollection(1).Name = "=""Kostengang Soll"""
.FullSeriesCollection(1).XValues = "=Kostenlinien!$B$1:$M$1"
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=""Kostengang Ist"""
.FullSeriesCollection(2).Values = "=Kostenlinien!$B$3:$M$3"
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = "=""Kostensumme Soll"""
.FullSeriesCollection(3).Values = "=Kostenlinien!$B$4:$M$4"
.SeriesCollection.NewSeries
.FullSeriesCollection(4).Name = "=""Kostensumme Ist"""
.FullSeriesCollection(4).Values = "=Kostenlinien!$B$5:$M$5"
.ChartGroups(1).GapWidth = 20
.HasTitle = True
.ChartTitle.Text = "Kostenganglinien & Kostensummenlinien"
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Zeitraum"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Kosten"
.Axes(xlValue).TickLabels.NumberFormat = "#.##0"
'Achsenaufteilung
.ChartType = xlColumnClustered
.FullSeriesCollection(1).ChartType = xlLine
.FullSeriesCollection(1).AxisGroup = 1
.FullSeriesCollection(2).ChartType = xlLine
.FullSeriesCollection(2).AxisGroup = 1
.FullSeriesCollection(3).ChartType = xlLine
.FullSeriesCollection(3).AxisGroup = 1
.FullSeriesCollection(4).ChartType = xlLine
.FullSeriesCollection(4).AxisGroup = 1
.FullSeriesCollection(3).AxisGroup = 2
.FullSeriesCollection(4).AxisGroup = 2
'Legende
.SetElement (msoElementLegendBottom)
'Sekundärachse beschriften
.SetElement (msoElementSecondaryValueAxisTitleAdjacentToAxis)
.Axes(xlValue, xlSecondary).AxisTitle.Text = "Kostensumme"
.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = "#.##0"
End With
'Diagrammhöhe ändern (in %)
shpTemp.ScaleHeight 1.25, msoFalse, msoScaleFromTopLeft
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
410 11 Operatives Projekt-Controlling
Bild 11-7
Kostenlinien-
Diagramm
Das dargestellte Beispiel zeigt einen typischen Projektverlauf. Am Anfang werden zur
Verfügung stehende Mittel nicht vollständig abgerufen, was daran liegen könnte, dass sich das
Projektteam noch finden muss und demzufolge noch nicht voll arbeitet. Das rächt sich in der
zweiten Projekthälfte, wo die geplanten Budgets (eigentlich oft) deutlich überzogen werden.
11.1.3 Projekt-Finanzplan
Die Kosten eines Projekts sollen durch den Auftraggeber (intern oder extern) vollständig
getragen werden (Bild 11-8). Ein positiver Ertrag ist (meistens) ein zusätzliches Ziel. Die
Kostenentwicklung wird begleitet durch Finanzzugänge mit folgenden Möglichkeiten:
Die gesamten Finanzmittel stehen im Voraus zur Verfügung.
Die Finanzmittel stehen phasenweise zur Verfügung, so dass die Kosten zu jedem
Zeitpunkt gedeckt sind.
Die Finanzmittel stehen phasenweise zur Verfügung, so dass die Kosten zu vielen
Zeiten gedeckt sind.
XCT_11-03_Finanzplan.xlsm
Betrachten wir ein einfaches Finanzierungsbeispiel (Bild 11-9), in dem die geschätzten Kosten
zu jedem Meilenstein in einer Tabelle vorliegen. Eine zweite Tabelle führt die
Zahlungstermine auf.
Bild 11-9
Terminplan
Bild 11-10
Kostensummenlinie
Es stellt sich nun die Frage, welche Zahlungen mindestens zu den Terminen erfolgen müssen,
damit es zu keiner Unterdeckung kommt. Die Lösung erhalten wir durch ein Polynom dritten
Grades, das die vorhandene Kostenkurve hinreichend approximiert.
412 11 Operatives Projekt-Controlling
𝑓 𝑥 = 𝑎 +𝑎 𝑥+𝑎 𝑥 +𝑎 𝑥 (11.1)
Als Lösungsmethode bietet sich die Methode der kleinsten Fehlerquadrate an, wie sie auch der
Solver benutzt. Da wir es hier schon mit geschätzten Kosten zu tun haben, genügt auch die
Trendlinie der Kostensummenlinie. Dazu wird die Kostensummenlinie markiert und über das
Kontextmenü die Methode Trendlinie formatieren aufgerufen. Als Trendlinienoption wählen
wir eine polynomische Trendlinie dritten Grades. Mit ein paar Anpassungen wird auch die
Formel dargestellt (Bild 11-11).
Mit diesem Polynom und den Zahlungsterminen löst die Prozedur CreateKostenlinien
(Codeliste 11-2) das aufgestellte Problem und trägt die Zahlungen mit ins Diagramm ein. Dazu
erstellt sie zuerst noch einmal das Kostensummen-Diagramm und bestimmt danach die
Parameter der Zahlungsfunktion, aus der sich dann die Zahlungen ergeben (Bild 11-12).
lRowX = 16
vDate = .Cells(lRowX, 3)
dx1 = vDate - vNull
.Cells(lRowX, 6) = dx1
lRowX = lRowX + 1
For lRow = 17 To 26
vDate = .Cells(lRow, 3)
dx = vDate - vNull
.Cells(lRowX, 6) = dx
dFkt = f(dx)
If dFkt <= 0 Then dFkt = 0
.Cells(lRowX - 1, 7) = dFkt
.Cells(lRowX, 7) = dFkt
lRowX = lRowX + 1
If lRow < 26 Then
.Cells(lRowX, 6) = dx
lRowX = lRowX + 1
End If
Next lRow
End With
'zeige Zahlungsfunktion
With chrTemp
.SeriesCollection.NewSeries
With .FullSeriesCollection(3)
.XValues = _
"='Gedeckte Kostensumme'!$F$16:$F$35"
.Values = _
"='Gedeckte Kostensumme'!$G$16:$G$35"
.ChartType = xlXYScatterLinesNoMarkers
With .Format.Line
.ForeColor.RGB = RGB(255, 0, 0)
.Visible = msoTrue
.Weight = 1
End With
End With
End With
'Zahlungen
With wshTemp
dx1 = 0
For lRow = 16 To 35
lRowX = .Cells(lRow, 6)
vDate = vNull + lRowX
For lRowY = 16 To 26
If .Cells(lRowY, 3) = vDate Then
sx = .Cells(lRow, 7)
sx = Replace(sx, ",", ".")
dx = Val(sx)
dx = WorksheetFunction.RoundUp(dx, -3)
.Cells(lRowY, 4) = dx - dx1
Exit For
End If
Next lRowY
dx1 = dx
Next lRow
End With
11.1 Organisations-Methoden 415
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 11-12
Kostensummen
und Zahlungen
Aus den Summen der Zahlungen bestimmt die Prozedur anschließend auch die
Zahlungsbeträge zu den Terminen (Bild 11-13), damit die Kosten zu jedem Zeitpunkt gedeckt
sind.
Die Zahlungsbeträge für die Möglichkeit, dass die Kosten nur zeitweise gedeckt sind, ergeben
sich mit den Funktionswerten, die sich aus dem Mittelwert der beiden Termine eines
Zeitintervalls ergeben. Diese Aufgabe überlasse ich dem Leser.
416 11 Operatives Projekt-Controlling
Bild 11-13
Mindestzahlungen für
gedeckte Kosten
Bild 11-14
Agiles Prinzip
Bild 11-15
Scrum-
Methode
Der Product Owner stellt einige aus den Anforderungen identifizierte Funktionen zu einem
Sprint (1. Dokument) zusammen und gibt ihn an den Scrum Master weiter. Der organisiert den
Ablauf, ohne an der Lösung direkt beteiligt zu sein. Die Lösung entwickeln einige
11.1 Organisations-Methoden 417
Teammitglieder im Kollektiv über einen festgelegten Zeitraum. Danach wird das Ergebnis in
einem Review (2. Dokument) vorgestellt. Wird die Lösung akzeptiert, evtl. auch von externen
Stakeholdern, dann gehen das entstandene Teilsystem und die Erkenntnisse in einem Product-
Backlog (3. Dokument) zurück an den Product Owner, der inzwischen schon weitere Sprints
aufgegeben hat.
Die Methode kommt mit drei Rollen, drei Artefakten und fünf Szenarien aus. Beim Daily
Scrum, der täglichen Information, wird das gesamte Projektteam an einem Task Board über die
Entwicklung informiert.
XCT_11-04_AgileProjektPlanung.xlsm
Der Einsatz einer agilen Methode muss schon in der Projektplanung Berücksichtigung finden.
Neben einer Datenliste über die angesetzten Sprints und ihre Ergebnisse, muss in einer
Zeitschiene die Lage einzelner Funktionen dargestellt werden. Doch es bedarf auch während
der Projektphase einer ständigen Anpassung, so dass die Tabellen möglichst schlicht gehalten
werden sollten (Bild 11-16).
Bild 11-16
Agile Planung
Die Prozedur CreateGanttDiagramm (Codeliste 11-3) erstellt ein Gantt-Diagramm (Bild 11-
17).
418 11 Operatives Projekt-Controlling
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("AgilePlanung")
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(297, xlBarStacked)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("AgilePlanung!$D$2:$D$17")
.HasTitle = False
'zweite Datenreihe Dauer
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=""Dauer"""
.FullSeriesCollection(2).Values = "=AgilePlanung!$F$2:$F$17"
'erste Datenreihe ausblenden
.FullSeriesCollection(1).Format.Fill.Visible = msoFalse
.FullSeriesCollection(2).Format.Fill.ForeColor.RGB = _
RGB(0, 176, 240)
'Datumsachse
.Axes(xlValue).Format.Fill.Visible = msoFalse
.Axes(xlValue).MajorUnit = 10
.Axes(xlValue).MinimumScale = wshTemp.Cells(2, 4) - 2
.Axes(xlValue).MaximumScale = wshTemp.Cells(17, 5) + 2
.Axes(xlValue).MajorUnit = 2
'Aktivitätsachse
.Axes(xlCategory).Select
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlValue).Select
'Application.Width = 882
'Application.Height = 666.75
.Axes(xlValue).TickLabels.Orientation = 75
.ChartGroups(1).GapWidth = 10
With .FullSeriesCollection(2).Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 240)
.Transparency = 0
.Solid
End With
With .FullSeriesCollection(2).Format.Shadow
.Type = msoShadow21
.Visible = msoTrue
.Style = msoShadowStyleOuterShadow
.Blur = 4
.RotateWithShape = msoFalse
.ForeColor.RGB = RGB(0, 0, 0)
11.1 Organisations-Methoden 419
.Transparency = 0.6
.Size = 104
End With
.FullSeriesCollection(2).ApplyDataLabels
.FullSeriesCollection(2).DataLabels.NumberFormat = "#"" Tage"""
.FullSeriesCollection(2).Points(9). _
DataLabel.NumberFormat = "#"" Tag"""
'Sprints markieren
For lRow = 2 To 17
If wshTemp.Cells(lRow, 1).Interior.ColorIndex = 24 Then
.FullSeriesCollection(2).Points(lRow - 1).Format.Fill. _
ForeColor.RGB = RGB(255, 192, 0)
End If
Next lRow
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 11-17
Gantt-Diagramm
zur agilen
Planung
Zu der Methode gehören auch, wie gezeigt drei Dokumente, die ebenfalls als Tabellen gestaltet
werden können.
11.1.5 Kostenvergleichstabelle
Zuvor haben wir schon einmal über Projektkosten und ihre Planung gesprochen. Neben großer
Erfahrung aus anderen Projekten können die Kosten beim kleinsten Element eines PSP, dem
Arbeitspaket (AP) systematisch benannt werden. Die Summe aller Arbeitspaket, bzw. deren
Kosten wird in der Summe die Kosten je Meilenstein und letztlich die Summe der
Projektkosten.
XCT_11-05_KostenvergleichsTabelle.xlsm
420 11 Operatives Projekt-Controlling
Auch hier ist es wichtig, dass das nachfolgende Formular ständig an das laufende Projekt
angepasst wird, denn Erfahrungen (gerade bei der agilen Planung) bewirken auch Änderungen.
Die Kostenvergleichstabelle (Bild 11-18) zeigt, bei welchen fertiggestellten Arbeitspaketen
Kosten eingespart oder Vorgaben überschritten wurden. Beim nächsten Projekt ist die
Einschätzung der Kosten für ein Arbeitspaket dann einfacher.
Bild 11-18
AP-Kostenvergleich
Bild 11-19
AP-Kostenvergleich
11.2 Kontroll-Methoden
Damit ein Projekt-Controlling überhaupt erfolgreich stattfinden kann, müssen bestimmte
Voraussetzungen gegeben sein.
Ziele müssen klar definiert und messbar sein (SMART-Kriterien).
Kosten müssen eindeutig zugeordnet werden können.
Kenngrößen müssen zeitlich relevant erfasst und berichtet werden können.
Informationen sind für alle Teammitglieder offen.
Fehler gehören zum Projekt (Umgangskultur).
422 11 Operatives Projekt-Controlling
11.2.1 Meilenstein-Trendanalyse
Die Meilenstein-Trendanalyse arbeitet vorwärtsgerichtet und ermöglicht so,
Terminverschiebungen rechtzeitig zu visualisieren. Verschiebungen im Projektablauf können
vermieden werden. Die Einfachheit macht diese Analyse zu einem beliebten Instrument.
XCT_11-06_MeilensteinTrendAnalyse.xlsm
Im Meilensteinplan (Bild 11-20) werden senkrecht die geplanten Meilensteine mit ihren
Planterminen aufgeführt. Waagerecht werden die Berichtstermine eingetragen, an denen die
Plantermine überprüft und notfalls korrigiert werden. Die korrigierten Termine werden unter
dem Berichtstermin vermerkt.
Bild 11-20
MTA-Plan
Die Tabelle kommt ganz ohne Formeln aus. Visualisieren lässt sie sich mit dem Diagrammtyp
Linie mit Datenpunkten. Die Prozedur CreateMTA (Codeliste 11-5) erstellt die Meilenstein-
Trend-Analyse (Bild 11-21).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("MTA")
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(332, xlLineMarkers)
Set chrTemp = shpTemp.Chart
With chrTemp
wshTemp.Range("C3:I3").Select
.SetSourceData Source:=Range("MTA!$C$3:$I$3")
.FullSeriesCollection(1).XValues = "=MTA!$C$1:$I$1"
.FullSeriesCollection(1).Name = "=MTA!$B$3"
.FullSeriesCollection(1).Values = "=MTA!$C$3:$I$3"
11.2 Kontroll-Methoden 423
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=MTA!$B$4"
.FullSeriesCollection(2).Values = "=MTA!$C$4:$I$4"
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = "=MTA!$B$5"
.FullSeriesCollection(3).Values = "=MTA!$C$5:$I$5"
.SeriesCollection.NewSeries
.FullSeriesCollection(4).Name = "=MTA!$B$6"
.FullSeriesCollection(4).Values = "=MTA!$C$6:$I$6"
.SeriesCollection.NewSeries
.FullSeriesCollection(5).Name = "=MTA!$B$7"
.FullSeriesCollection(5).Values = "=MTA!$C$7:$I$7"
.SeriesCollection.NewSeries
.FullSeriesCollection(6).Name = "=MTA!$B$8"
.FullSeriesCollection(6).Values = "=MTA!$C$8:$I$8"
.SeriesCollection.NewSeries
.FullSeriesCollection(7).Name = "=MTA!$B$9"
.FullSeriesCollection(7).Values = "=MTA!$C$9:$I$9"
.SeriesCollection.NewSeries
.FullSeriesCollection(8).Name = "=MTA!$B$10"
.FullSeriesCollection(8).Values = "=MTA!$C$10:$I$10"
.SeriesCollection.NewSeries
.FullSeriesCollection(9).Name = "=MTA!$B$11"
.FullSeriesCollection(9).Values = "=MTA!$C$11:$I$11"
.HasTitle = True
.ChartTitle.Text = "Meilenstein-Trendanalyse"
.Axes(xlValue).MinimumScale = 43466
.Axes(xlValue).MaximumScale = 43862
.Axes(xlCategory).Select
.Axes(xlCategory).BaseUnit = xlDays
.Axes(xlCategory).MajorUnit = 30
.Axes(xlCategory).TickLabelPosition = xlHigh
.Axes(xlCategory).TickLabels.Orientation = xlUpward
.SetElement (msoElementLegendRight)
.ChartArea.Top = 10
.ChartArea.Left = 500
.ChartArea.Width = 400
.ChartArea.Height = 300
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 11-21
MTA-Diagramm
11.2.2 Ressourcen-Trendanalyse
Wie schon angedeutet, ist ein Ableger der MTA die Ressourcen-Trendanalyse.
XCT_11-07_RessourcenTrendAnalyse.xlsm
Im Ressourcenplan (Bild 11-22) werden wieder die Meilensteine senkrecht aufgeführt, aber
statt Termine betrachtet man hier Personen-Monate (PM).
Bild 11-22
RTA-Plan
Mit einer ähnlichen Prozedur wie zuvor (Codeliste 11-6) ergibt sich daraus die Ressourcen-
Trendanalyse (Bild 11-23).
11.2 Kontroll-Methoden 425
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("RTA")
ActiveSheet.DrawingObjects.Delete
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(332, xlLineMarkers)
Set chrTemp = shpTemp.Chart
With chrTemp
wshTemp.Range("C3:G3").Select
.SetSourceData Source:=Range("RTA!$C$3:$G$3")
.FullSeriesCollection(1).XValues = "=RTA!$C$1:$G$1"
.FullSeriesCollection(1).Name = "=RTA!$B$3"
.FullSeriesCollection(1).Values = "=RTA!$C$3:$G$3"
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=RTA!$B$4"
.FullSeriesCollection(2).Values = "=RTA!$C$4:$G$4"
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = "=RTA!$B$5"
.FullSeriesCollection(3).Values = "=RTA!$C$5:$G$5"
.SeriesCollection.NewSeries
.FullSeriesCollection(4).Name = "=RTA!$B$6"
.FullSeriesCollection(4).Values = "=RTA!$C$6:$G$6"
.SeriesCollection.NewSeries
.FullSeriesCollection(5).Name = "=RTA!$B$7"
.FullSeriesCollection(5).Values = "=RTA!$C$7:$G$7"
.SeriesCollection.NewSeries
.FullSeriesCollection(6).Name = "=RTA!$B$8"
.FullSeriesCollection(6).Values = "=RTA!$C$8:$G$8"
.HasTitle = True
.ChartTitle.Text = "Ressourcen-Trendanalyse"
.Axes(xlValue).MinimumScale = 100
.Axes(xlCategory).Select
.Axes(xlCategory).BaseUnit = xlDays
.Axes(xlCategory).MajorUnit = 30
.Axes(xlCategory).TickLabelPosition = xlHigh
.Axes(xlCategory).TickLabels.Orientation = xlUpward
.SetElement (msoElementLegendRight)
.ChartArea.Top = 10
.ChartArea.Left = 400
.ChartArea.Width = 400
.ChartArea.Height = 300
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
426 11 Operatives Projekt-Controlling
Bild 11-23
RTA-Diagramm
11.2.3 Kosten-Trendanalyse
Natürlich gibt es in der Reihe der Trendanalysen auch die Kostentrendanalyse (Bild 11-24) mit
den Kosten als zu bewertendes Element.
XCT_11-08_KostenTrendAnalyse.xlsm
Bild 11-24
KTA-Plan
Mit einer ähnlichen Prozedur wie zuvor (Codeliste 11-7) ergibt sich daraus die Kosten-
Trendanalyse (Bild 11-25).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("KTA")
11.2 Kontroll-Methoden 427
Bild 11-25
KTA-Diagramm
11.2.4 Kosten-Termin-Diagramm
Im Laufe der Zeit sind aus den Trendanalysen die verschiedensten Diagramme entwickelt und
wieder verworfen worden.
XCT_11-09_KostenTerminDiagramm.xlsm
Eine Methode hat sich bis heute behauptet, das Kosten-Termin-Diagramm (Bild 11-26). Hier
finden Plan- und Ist-Kosten mit Meilensteinen zueinander.
Bild 11-26
KTA-Plan
Auch hier dient die vorherige Prozedur als Vorlage (Codeliste 11-8) für das Kosten-Termin-
Diagramm (Bild 11-27).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("KTD")
11.2 Kontroll-Methoden 429
Bild 11-27
KT-Diagramm
430 11 Operatives Projekt-Controlling
11.2.5 Earned-Value-Analyse
Die Earned-Value-Analyse (kurz EVA), auch Arbeitswert-Analyse, ist ein Ersatz für MTA und
KTA. Sie liefert eine intuitiv erfassbare Darstellung des Projektstatus. Nach DIN 69903 ist der
Fertigstellungswert (FW) der korrekte deutsche Begriff für EVA.
XCT_11-10_EarnedValueAnalyse.xlsm
In einer Tabelle werden zu den Aufgaben (Tasks) und Berichtsterminen Plan- und Ist-Aufwand
gegenübergestellt (Bild 11-28). Der Quotient aus den kumulierten Summen ergibt den
Fertigstellungswert.
Bild 11-28
Kostenplan
Die Auswertung übernimmt wieder eine Prozedur (Codeliste 11-9), die sowohl die Summen
bildet, als auch den EVA-Wert bestimmt und ein Diagramm vom Verbundtyp Linien mit
Datenpunkten erstellt (Bild 11-29).
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("EVA")
11.2 Kontroll-Methoden 431
With wshTemp
'Plan-Kosten
For lRow = 3 To 8
dSum = 0
For lCol = 3 To 9
dSum = dSum + .Cells(lRow, lCol)
Next lCol
.Cells(lRow, 2) = dSum
Next lRow
dKum = 0
For lCol = 3 To 9
dSum = 0
For lRow = 3 To 8
dSum = dSum + .Cells(lRow, lCol)
Next lRow
.Cells(9, lCol) = dSum
dKum = dKum + dSum
.Cells(10, lCol) = dKum
Next lCol
'Ist-Kosten
For lRow = 13 To 18
dSum = 0
For lCol = 3 To 9
dSum = dSum + .Cells(lRow, lCol)
Next lCol
.Cells(lRow, 2) = dSum
Next lRow
dKum = 0
For lCol = 3 To 9
dSum = 0
For lRow = 13 To 18
dSum = dSum + .Cells(lRow, lCol)
Next lRow
.Cells(19, lCol) = dSum
dKum = dKum + dSum
.Cells(20, lCol) = dKum
.Cells(21, lCol) = dKum / .Cells(10, lCol)
Next lCol
End With
'alle Grafiken auf dem Arbeitsblatt löschen
ActiveSheet.DrawingObjects.Delete
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(332, xlLineMarkers)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=Range("EVA!$C$10:$I$10")
.FullSeriesCollection(1).XValues = "=EVA!$C$1:$I$1"
.FullSeriesCollection(1).Values = "=EVA!$C$10:$I$10"
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Values = "=EVA!$C$20:$I$20"
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Values = "=EVA!$C$21:$I$21"
.FullSeriesCollection(1).ChartType = xlLineMarkers
.FullSeriesCollection(2).ChartType = xlLineMarkers
.FullSeriesCollection(3).ChartType = xlLineMarkers
432 11 Operatives Projekt-Controlling
.FullSeriesCollection(3).AxisGroup = 2
.FullSeriesCollection(1).Name = "=""Plan"""
.FullSeriesCollection(2).Name = "=""Ist"""
.FullSeriesCollection(3).Name = "=""EVA"""
.FullSeriesCollection(3).Format.Line _
.ForeColor.RGB = RGB(255, 0, 0)
.HasTitle = True
.ChartTitle.Text = "Earned-Value-Analyse"
.Axes(xlCategory).BaseUnit = xlDays
.SetElement (msoElementLegendRight)
.ChartArea.Top = 10
.ChartArea.Left = 550
.ChartArea.Width = 400
.ChartArea.Height = 300
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
Bild 11-29
Earned-Value-
Analyse
Bild 11-30
Statusschritte
C8 =SUMME(Ist)
D8 =SUMME(Rest)
Bild 11-31
50/50
Bild 11-32
0/100
Bild 11-33
Step-To-Step
Bild 11-34
Relative
Methode
D8 =SUMME(Rest)
E8 =C8/(C8+D8)
Es ist die genauste Methode und sie kann zu jedem Zeitpunkt durchgeführt werden, doch es
sind gute Schätzwerte erforderlich. Die Werte in der Spalte Rest werden nicht errechnet,
sondern nach Schätzung des noch folgenden Aufwands eingetragen. Daher ist nicht immer
Ist + Rest = Plan.
11.2.7 Zeitlicher Fortschrittsgrad
Der zeitliche Fortschrittsgrad bestimmt sich analog zum leistungsmäßigen Fertigstellungsgrad:
∙
𝑍𝑒𝑖𝑡𝑙𝑖𝑐ℎ𝑒𝑟 𝐹𝑜𝑟𝑡𝑠𝑐ℎ𝑟𝑖𝑡𝑡𝑠𝑔𝑟𝑎𝑑 = (11.3)
Durch ihn wird deutlich, ob der Projekt-Zeitplan bis zum Projektende eingehalten werden
kann. Entsprechend müssen die zuvor besprochenen Tabellen angepasst werden. Die
voraussichtliche Gesamtdauer in Gleichung 11.3 ergibt sich aus der Formel:
𝑉𝑜𝑟𝑎𝑢𝑠𝑠. 𝐺𝑒𝑠𝑎𝑚𝑡𝑑𝑎𝑢𝑒𝑟 = IstDauer + vorauss. Restdauer (11.4)
Die Voraussichtliche Restdauer (auch als Time-To-Completion, übersetzt Zeit bis zur
Fertigstellung genannt) lässt sich nur aufgrund der noch zu erbringenden Leistungen
abschätzen (Bild 11-35), die aber nicht den zum Projektstart geplanten entsprechen müssen,
sondern der aktuellen Situation angepasst sind.
Literaturverzeichnis
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2
439
Diagrammverzeichnis
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2
440 Diagrammverzeichnis
Funktionenverzeichnis
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2
443
Index
© Springer Fachmedien Wiesbaden GmbH, ein Teil von Springer Nature 2019
H. Nahrstedt, Excel + VBA für Controller,
https://doi.org/10.1007/978-3-658-25825-2
444 Index
W
Wartezeiten in Prozeduren [1] 67
WENN-Funktion [3] 103
Wertschöpfungskette [2] 87
Wertzuweisung [1] 33
Wettbewerbsanalse [8] 272