Sie sind auf Seite 1von 455

Harald Nahrstedt

Excel + VBA
für Controller
Mit eigenen Prozeduren
und Funktionen optimieren
Excel + VBA für Controller
Harald Nahrstedt

Excel + VBA für Controller


Mit eigenen Prozeduren
und Funktionen optimieren
Harald Nahrstedt
Möhnesee, Deutschland

ISBN 978-3-658-25824-5 ISBN 978-3-658-25825-2  (eBook)


https://doi.org/10.1007/978-3-658-25825-2

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.

Verantwortlich im Verlag: Thomas Zipsner

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

Warum dieses Buch


Es gibt bereits viele Fachbücher zum Thema Controlling, warum also noch ein weiteres? Zum
einen kommen viele Bücher, die sich mit Controlling und Excel befassen, über die Anwendung
von Makros nicht hinaus. Zum anderen vermisse ich die klare Unterscheidung zwischen dem
Controlling von Prozessen und Projekten, die oft mit sehr unterschiedlichen Methoden ihre
Ziele verfolgen.
In diesem Buch möchte ich dem Leser zeigen, dass der Einsatz von Excel zusammen mit VBA
eine Menge nützlicher Prozeduren und Tricks für das Controlling bietet. Dabei geht es mir
nicht darum, dem Controller fertige Tools zu liefern. Vielmehr sollen die Anwendungsbeispie-
le einen stressfreien Einstieg in die Welt der VBA-Objekte erlauben, und dass bei sauberer
Programmiertechnik. Der Leser soll erkennen, wie schnell und einfach die Zusammenarbeit
von Excel und VBA sein kann.
Aus meiner jahrzehntelangen Erfahrung zum Einsatz von Excel und VBA, in Prozessen und
Projekten, kenne ich viele Methoden, die sowohl für viele Bereiche, als auch für spezielle
Probleme sehr hilfreich sind. Die ausgewählten Anwendungsbeispiele können mit den vermit-
telten Kenntnissen aus diesem Buch weiter ausgebaut und den vorhandenen Praxisproblemen
angepasst werden.
Version
Diese Auflage wurde mit der Office-Version 2016 auf dem Betriebssystem Windows 10 er-
stellt. Vieles lässt sich aber auch in älteren Versionen umsetzen. Ich übernehme jedoch keine
Haftung für Folgen die sich aus dem Einsatz der Programmcodes ergeben.
Zum Aufbau
Das erste Kapitel gibt eine Einführung in VBA, in die Handhabung der Entwicklungsumge-
bung und ist auch für Autodidakten gut geeignet. Die nachfolgenden Kapitel behandeln allge-
meine Funktionen und Methoden, die für alle Bereiche des Controllings hilfreich sind. Die
letzten vier Kapitel gehen auf die speziellen Aufgaben des strategischen und operativen Con-
trollings in Prozessen und Projekten ein. Dabei ist eine klare Trennung nicht immer möglich.
Danksagung
Ich danke all denen im Hause Springer-Vieweg, die stets im Hintergrund wirkend, zum Gelin-
gen dieses Buches beigetragen haben. Ein besonderer Dank gilt dem Lektorat Technik und
ihrem Cheflektor Thomas Zipsner, der mir geduldig mit vielen wichtigen und richtigen Rat-
schlägen stets half, den für den Leser richtigen Weg einzuschlagen.
An den Leser
Dieses Buch soll auch zum Dialog zwischen Autor und Leser auffordern. Daher finden Sie
sowohl auf der Homepage des Verlages www.springer-vieweg.de beim Buch, wie auch auf der
Homepage des Autors www.harald-nahrstedt.de ein Forum für ergänzende Programme, Anre-
gungen und Kommentare. Auf dieser befinden sich auch die Downloads, die im Buch mit dem
Symbol  angegeben sind.

Möhnesee, Januar 2019 Harald Nahrstedt


VII

Inhaltsverzeichnis

1 Einführung in VBA ...................................................................................................... 1


1.1 Die VBA Entwicklungsumgebung ...................................................................... 1
1.1.1 Die Entwicklungsumgebung anpassen ................................................. 1
1.1.2 Projekt und Projekt-Explorer ............................................................... 3
1.1.3 Der Objektkatalog ................................................................................ 4
1.1.4 Das Eigenschaftsfenster ....................................................................... 4
1.1.5 Die Direkt-, Lokal- und Überwachungsfenster .................................... 5
1.2 Objekte, Anwendungen, Formulare und Module ............................................... 6
1.2.1 Objekte, allgemein ................................................................................ 6
1.2.2 Anwendungen und Makros .................................................................. 8
1.2.3 Steuerelemente in Anwendungen ......................................................... 10
1.2.4 Formulare und Steuerelemente ............................................................. 12
1.2.5 Module .................................................................................................. 16
1.3 Die Syntax von VBA .......................................................................................... 17
1.3.1 Konventionen ....................................................................................... 17
1.3.2 Prozeduren und Funktionen ................................................................. 17
1.3.3 Datentypen für Konstante und Variable ............................................... 18
1.3.4 Parameterlisten ..................................................................................... 20
1.3.5 Benutzerdefinierte Aufzählvariablen ................................................... 22
1.3.6 Benutzerdefinierte Datentypen ............................................................. 22
1.3.7 Operatoren und Standardfunktionen .................................................... 23
1.3.8 Strukturen für Prozedurabläufe ............................................................ 24
1.3.8.1 Bedingte Verzweigungen ..................................................... 24
1.3.8.2 Bedingte Auswahl ................................................................ 25
1.3.8.3 Schalter ................................................................................. 25
1.3.8.4 Zählschleife .......................................................................... 25
1.3.8.5 Bedingte Schleifen ............................................................... 25
1.3.8.6 Abweisend bedingte Schleife ............................................... 26
1.3.8.7 Ausführend bedingte Schleife .............................................. 26
1.3.8.8 Schleifen über Datenlisten und Objektlisten ........................ 26
1.3.8.9 Schleifenabbruch .................................................................. 26
1.3.9 Geltungsbereiche .................................................................................. 26
1.3.10 Fehlerbehandlung in Prozeduren .......................................................... 27
1.4 Objekte unter Excel ............................................................................................. 28
1.4.1 Application-Objekt ............................................................................... 29
1.4.2 Workbook-Objekte ............................................................................... 30
1.4.3 Worksheet-Objekte ............................................................................... 30
1.4.4 Range-Objekte ...................................................................................... 31
1.4.5 Zeilen und Spalten ................................................................................ 32
1.4.6 Zellen und Zellbereiche ........................................................................ 32
1.4.7 Objektvariable ...................................................................................... 36
VIII Inhaltsverzeichnis

1.5 Eigene Klassen und Objekte ............................................................................... 36


1.5.1 Definition einer Klasse ......................................................................... 36
1.5.2 Konstruktor und Destruktor ................................................................. 38
1.5.3 Instanziierung von Objekten ................................................................ 38
1.5.4 Arbeiten mit Objekten .......................................................................... 39
1.5.5 Objektlisten .......................................................................................... 44
1.5.6 Vererbung ............................................................................................. 48
1.5.7 Events und eigene Objekte ................................................................... 49
1.6 Aktionen unter Excel ........................................................................................... 54
1.6.1 Neue Excel-Anwendung starten ........................................................... 54
1.6.2 Der Excel-Anwendung einen Namen geben ........................................ 54
1.6.3 Dem Excel-Arbeitsblatt (Tabelle) einen Namen geben ....................... 55
1.6.4 In der Excel-Anwendung ein neues Arbeitsblatt anlegen .................... 55
1.6.5 Dem Projekt und dem Arbeitsblatt einen Namen geben ...................... 55
1.6.6 Prozeduren mit Haltepunkten testen .................................................... 56
1.6.7 Codefenster teilen ................................................................................. 57
1.6.8 Symbolleiste für den Schnellzugriff ergänzen ..................................... 57
1.6.9 Makros aus dem Menübereich Add-Ins aufrufen ................................. 59
1.6.10 Berechnungsprozeduren als Add-In nutzen ......................................... 62
1.6.11 Eigene Funktionen schreiben und pflegen ........................................... 62
1.7 Hilfsprozeduren ................................................................................................... 64
1.7.1 Listenfeld mit mehreren Spalten .......................................................... 64
1.7.2 Die ShowModal-Eigenschaft eines Formulars ..................................... 65
1.7.3 DoEvents einsetzen .............................................................................. 66
1.7.4 Wartezeiten in Prozeduren planen ........................................................ 67
1.7.5 Zyklische Jobs konstruieren ................................................................. 68
1.7.6 Informationen zum Datentyp ............................................................... 69

2 Aufgaben und Ziele ...................................................................................................... 71


2.1 Controlling und Excel ......................................................................................... 71
2.1.1 Die Entstehung des Controllings .......................................................... 71
2.1.2 Die Entstehung von Excel .................................................................... 71
2.2 Aufgaben des Controllings .................................................................................. 72
2.2.1 Aufgaben des strategischen Controllings ............................................. 72
2.2.2 Aufgaben des operativen Controllings ................................................. 73
2.2.3 Aufgaben des Prozess-Controllings ..................................................... 74
2.2.4 Aufgaben des Projekt-Controllings ...................................................... 75
2.3 Zielbestimmung im Controlling .......................................................................... 76
2.3.1 Die Marktanalyse ................................................................................. 76
2.3.2 Die Marktbefragung ............................................................................. 79
2.3.3 Trendanalyse ........................................................................................ 82
2.3.4 Wertschöpfungskette ............................................................................ 87
2.3.5 Machbarkeitsstudie ............................................................................... 89
2.3.6 Zielgewichtung ..................................................................................... 91
2.3.7 Pareto-Prinzip ....................................................................................... 94
2.3.8 Ziele definieren ..................................................................................... 98
2.3.9 Produkt-Lebenszyklus .......................................................................... 101
Inhaltsverzeichnis IX

3 Wichtige Funktionen .................................................................................................... 103


3.1 Grundfunktionen ................................................................................................. 103
3.2 Summenfunktionen ............................................................................................. 112
3.3 Suchfunktionen ................................................................................................... 117
3.4 Datumsfunktionen ............................................................................................... 127
3.5 Zählfunktionen .................................................................................................... 132
3.6 Barwertfunktionen ............................................................................................... 138
3.7 Abschreibungsfunktionen ................................................................................... 147
3.8 Rundungsfunktionen ........................................................................................... 153

4 Datenaufbereitung ........................................................................................................ 157


4.1 Daten konsolidieren ............................................................................................ 157
4.2 Daten filtern ........................................................................................................ 162
4.3 Teilergebnisse ..................................................................................................... 163
4.4 Datenschnitte ....................................................................................................... 165
4.5 Pivot-Tabellen ..................................................................................................... 168
4.6 Pivot-Diagramme ................................................................................................ 182
4.6.1 Fächerdiagramm ................................................................................... 182
4.6.2 Cockpit-Tachometer ............................................................................. 184
4.6.3 Treemap ................................................................................................ 189
4.6.4 3D-Oberfläche ...................................................................................... 190
4.7 Relationen ........................................................................................................... 192
4.8 Verweise .............................................................................................................. 196

5 Integrierte Analyse-Methoden .................................................................................... 203


5.1 Szenarien ............................................................................................................. 203
5.2 Zielwertsuche ...................................................................................................... 208
5.3 Datentabelle mit einer Variablen ........................................................................ 211
5.4 Datentabelle mit zwei Variablen ......................................................................... 213
5.5 Datentabelle mit mehr als zwei Variablen .......................................................... 213
5.6 Prognoseblatt ....................................................................................................... 216
5.7 Lineare Optimierung ........................................................................................... 219
5.8 Deterministische Simulation ............................................................................... 221
5.9 Probabilistische Simulation ................................................................................. 222

6 Ergänzende Analyse-Methoden .................................................................................. 227


6.1 Installation des Analyse-Add-Ins ........................................................................ 227
6.2 Histogramm ......................................................................................................... 229
6.3 Populationskenngrößen ....................................................................................... 232
6.4 Regression und Korrelation ................................................................................ 234
6.5 VBA-Funktion Korrelationsmatrix. .................................................................... 237
6.6 Solver .................................................................................................................. 239

7 Excel Power Plattform ................................................................................................. 243


7.1 Power BI Desktop ............................................................................................... 243
7.2 Power Map .......................................................................................................... 250
7.3 Power Query ........................................................................................................ 254
7.4 Power Pivot ......................................................................................................... 256
X Inhaltsverzeichnis

8 Strategisches Prozess-Controlling ............................................................................... 263


8.1 Grundlegende Methoden ..................................................................................... 263
8.1.1 Prozessreife-Bestimmung ..................................................................... 263
8.1.2 Die VMI-Matrix ................................................................................... 266
8.1.3 SWOT-Analyse .................................................................................... 269
8.1.4 Wettbewerbsanalyse ............................................................................. 272
8.2 Kennzahlen .......................................................................................................... 274
8.2.1 Key Performance Indicators ................................................................. 274
8.2.2 Kennzahlensysteme .............................................................................. 277
8.2.3 Benchmarking ...................................................................................... 278
8.2.4 Balanced Scorecard .............................................................................. 280
8.2.5 Prozess-Reporting ................................................................................ 284
8.3 Kostenrechnerische Analysen ............................................................................. 286
8.3.1 Prozesskostenrechnung ........................................................................ 286
8.3.2 Gewinn- und Verlustrechnung (GuV) .................................................. 289
8.3.3 Deckungsbeitragsrechnung (DBR) ...................................................... 292
8.3.4 Break-Even-Analyse ............................................................................ 296
8.3.5 Kurzfristige Erfolgsrechnung (KER) ................................................... 300
8.4 Abschreibung und Cashflow ............................................................................... 304
8.4.1 Lineare Abschreibung .......................................................................... 304
8.4.2 Cashflow ............................................................................................... 307
8.5 Kreditberechnungen ............................................................................................ 308
8.5.1 Zinsrechnung ........................................................................................ 308
8.5.1.1 Nachschüssige Verzinsung ................................................... 309
8.5.1.2 Vorschüssige Verzinsung ..................................................... 309
8.5.1.3 Einfache Zinsrechnung ......................................................... 310
8.5.1.4 Zinseszinsrechnung .............................................................. 310
8.5.1.5 Die unterjährige Verzinsung ................................................ 311
8.5.2 Tilgungsrechnung ................................................................................. 311
8.5.3 Annuitätentilgung ................................................................................. 314
8.5.4 Vergleichsrechnung .............................................................................. 316
8.6 Investitionsrechnungen ....................................................................................... 317
8.6.1 Statische Investitionsrechnung ............................................................. 318
8.6.2 Dynamische Investitionsrechnung ....................................................... 318
8.6.3 Investitionsdaten zusammenstellen ...................................................... 319
8.6.4 Die statische Amortisationsrechnung ................................................... 321
8.6.5 Die Kapitalwert-Methode ..................................................................... 322
8.6.6 Die dynamische Amortisationsrechnung ............................................. 323
8.6.7 Der interne Zinsfuß .............................................................................. 324
8.6.8 Die Kosten-Vergleichsrechnung .......................................................... 325

9 Operatives Prozess-Controlling .................................................................................. 327


9.1 Analyse-Methoden .............................................................................................. 327
9.1.1 ABC-Analyse ....................................................................................... 327
9.1.2 Verteilungen ......................................................................................... 332
9.1.3 Zweidimensionale Leistungsmessung .................................................. 338
9.2 Bereichs-Controlling ........................................................................................... 340
9.2.1 Material-Controlling ............................................................................. 340
9.2.2 Produktions-Controlling ....................................................................... 350
Inhaltsverzeichnis XI

9.2.3 Marketing-Controlling ......................................................................... 356


9.2.4 IT-Controlling ...................................................................................... 358
9.2.5 Personal-Controlling ............................................................................ 360

10 Strategisches Projekt-Controlling ............................................................................... 365


10.1 Analyse-Methoden .............................................................................................. 365
10.1.1 BCG-Matrix .......................................................................................... 365
10.1.2 McKinsey-Matrix ................................................................................. 367
10.1.3 Risiko-Portfolio .................................................................................... 370
10.1.4 Nutzwert-Analyse (NA) ....................................................................... 372
10.1.5 Einfluss-Analyse .................................................................................. 375
10.2 Planungs-Methoden ............................................................................................. 377
10.2.1 Projekt-Strukturplan (PSP) ................................................................... 377
10.2.2 Netzplan ................................................................................................ 383
10.2.3 Gantt-Diagramm ................................................................................... 390
10.2.4 Ressourcenplanung ............................................................................... 394
10.2.5 Kapazitätsplanung ................................................................................ 399
10.2.6 Terminplanung ..................................................................................... 401
10.2.7 Kostenplanung ...................................................................................... 402

11 Operatives Projekt-Controlling .................................................................................. 405


11.1 Organisations-Methoden ..................................................................................... 405
11.1.1 Projekt-Tracking ................................................................................... 406
11.1.2 Kostengang- und Kostensummenlinie ................................................. 407
11.1.3 Projekt-Finanzplan ............................................................................... 410
11.1.4 Agile Projektplanung ............................................................................ 416
11.1.5 Kostenvergleichstabelle ....................................................................... 419
11.2 Kontroll-Methoden .............................................................................................. 421
11.2.1 Meilenstein-Trendanalyse .................................................................... 422
11.2.2 Ressourcen-Trendanalyse ..................................................................... 424
11.2.3 Kosten-Trendanalyse ............................................................................ 426
11.2.4 Kosten-Termin-Diagramm ................................................................... 428
11.2.5 Earned-Value-Analyse ......................................................................... 430
11.2.6 Leistungsmäßiger Fortschrittsgrad ....................................................... 432
11.2.7 Zeitlicher Fortschrittsgrad .................................................................... 436

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

1.1 Die VBA Entwicklungsumgebung


Der Zugang zur IDE erfolgt über die Registerkarte Entwicklertools, die nach der Installation
von Excel nicht freigeschaltet ist. Die Freischaltung wird wie folgt erreicht:
 Die Registerkarte Datei mit einem Mausklick wählen (alternativ Tasten ALT + D)
 In der linken Spalte die Auswahl Optionen wählen (ALT + O)
 Im Dialogfenster Excel-Optionen in der linken Spalte Menüband anpassen wählen
 Im rechten Feld Hauptregisterkarten die Option Entwicklertools mit einem Mausklick
setzen (im Optionsfeld erscheint ein Haken)
 Danach mit der Schaltfläche OK das Dialogfenster schließen
 Nun existiert in der Excel-Anwendung die Registerkarte Entwicklertools.
Geöffnet wird die Entwicklungsumgebung (IDE) aus einer Office-Anwendung heraus wie
folgt:
 Registerkarte Entwicklertools wählen (ALT + W)
 In der Menügruppe Code die Auswahl Visual Basic wählen (ALT + V)
 Es öffnet sich das Fenster der Entwicklungsumgebung.
 Die Entwicklungsumgebung kann, außer über die Registerkarte Entwicklertools, auch mit
den Tasten ALT + F11 aufgerufen werden.

1.1.1 Die Entwicklungsumgebung anpassen


Die Entwicklungsumgebung (Bild 1-2) wirkt auf den ersten Blick erdrückend. Nicht zuletzt,
weil sie aus mehreren Fenstern besteht, die unterschiedliche Aufgaben erfüllen. Das größte
Fenster in der Entwicklungsumgebung ist der VBA-Editor, in dem der VBA-Code eingegeben

© 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.

Bild 1-2 Die DIE-Oberfläche

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

Unter Register Editor:


 Die Tab-Schrittweite setzen wir auf den Wert 3.
 Alle Optionsfenster werden ausgewählt. Wichtig ist vor allem die Option
Variablendeklaration erforderlich. Dadurch wird in der Programmierung eine
Deklaration aller verwendeten Variablen erzwungen. Ein absolutes Muss für gute
Prozeduren. An der ersten Stelle eines jeden sich neu öffnenden Codefensters steht dann
immer automatisch die Anweisung:
Option Explicit

 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.

1.1.2 Projekt und Projekt-Explorer


Eine Excel-Anwendung, zu der neben Tabellen auch Benutzerflächen, Codemodule, Objekte
und Prozeduren gehören, wird in der Entwicklungsumgebung als Projekt verwaltet. Das ist die
Aufgabe des Projekt-Explorers (Bild 1-4).

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.

1.1.3 Der Objektkatalog


Der Objektkatalog (Bild 1-5), wie alle anderen Fenster in der Entwicklungsumgebung über die
Registerkarte Ansicht aufrufbar, zeigt die Klassen, Eigenschaften, Methoden, Ereignisse und
Konstanten an, die in den Objektbibliotheken und Prozeduren dem jeweiligen Projekt zur
Verfügung stehen. Mithilfe dieses Dialogfensters lassen sich Objekte dieser Anwendung,
Objekte anderer Anwendungen oder selbstdefinierte Objekte suchen und verwenden. Der
Objektkatalog wird eigentlich nur bei Bedarf geöffnet. Geschlossen wird das Fenster mit
einem Klick auf die Schließfläche X oben rechts.

Bild 1-5
Der Objekt-Katalog in
der Entwicklungs-
umgebung

1.1.4 Das Eigenschaftsfenster


Das Eigenschaftsfenster (Bild 1-6) ist ein zur Entwicklung sehr wichtiges Fenster. Es listet für
das ausgewählte Objekt die Eigenschaften zur Entwurfszeit und deren aktuelle Einstellungen
auf.
Im oberen Auswahlfenster steht in fetter Schrift das Objekt und dahinter in einfacher Schrift
der Objekttyp. Das Auswahlfenster lässt sich auch öffnen und es kann ein anderes Objekt aus
1.1 Die VBA Entwicklungsumgebung 5

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.

1.1.5 Die Direkt-, Lokal- und Überwachungsfenster


Die Direkt-, Lokal- und Überwachungsfenster helfen beim Testlauf. Diese Fenster dienen zum
Testen der Programme. Das Direktfenster eignet sich hervorragend zur Kontrolle von
Speicherinhalten. Das Lokalfenster zeigt alle deklarierten Variablen in der aktuellen Prozedur
und deren Werte. Das Überwachungsfenster überwacht Ausdrücke und alarmiert beim
Eintreten von Randbedingungen. Für unsere Programmierung sind sie zunächst von
untergeordneter Bedeutung. Ich werde sie aber zu einem späteren Zeitpunkt in einem Beispiel
verwenden.
Übung 1.1 Neues Projekt anlegen
 Im ersten Schritt wird eine neue Excel-Anwendung geöffnet und die Einstellungen, wie
unter 1.1 beschrieben, werden vorgenommen. Dieser Vorgang muss nur einmal
durchgeführt werden und bleibt für alle neuen Excel-Anwendungen.
 Die Entwicklungsumgebung wird geöffnet (ALT + F11).
 Mit einem Mausklick im Projektfenster auf den Projektnamen, kann der Name im
Eigenschaftsfenster geändert werden, z. B. ErstesProjekt.
 Die Änderung ist anschließend im Projektfenster zu sehen.
 Eine Namensänderung kann beliebig oft durchgeführt werden.
6 1 Einführung in VBA

1.2 Objekte, Anwendungen, Formulare und Module

1.2.1 Objekte, allgemein


Der grundlegende Begriff in der Entwicklungsumgebung ist das Objekt. Einem Objekt werden
Eigenschaften, Methoden und Ereignisse zugeordnet. Außerdem besitzt ein Objekt eine
eindeutige Identität durch einen Schlüssel oder Namen. Die Schreibweise von Objekt,
Unterobjekt und Methode oder Eigenschaft ist:
Objekt[.Unterobjekt ... ][.Methode]

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.

1.2.2 Anwendungen und Makros


Unter Anwendungen sind die Office Programme Word, Excel, Outlook, PowerPoint, etc. zu
verstehen. In diesen Anwendungen, so auch in Excel, lassen sich Prozeduren und Funktionen
programmieren oder mit der Makro-Funktion erzeugen.
Die Makro-Funktion wird mit der Registerkarte Entwicklertools und der Auswahl Makro
aufzeichnen in der Menügruppe Code gestartet. Eine zweite Startmöglichkeit besteht darin,
über die Registerkarte Ansicht unter Makros die Auswahl Makro aufzeichnen zu wählen. Alle
Tätigkeiten in der Excel-Tabelle werden nun (wie bei einem Recorder) aufgezeichnet.
Gestoppt wird die Aufzeichnung wieder mit der Auswahl Aufzeichnung beenden an gleicher
Stelle.
Übung 1.2 Mit der Makro-Funktion eine Kreisfläche berechnen
Betrachten wir die Makro-Funktion an einem einfachen Beispiel.
 Eine neue leere Excel-Anwendung öffnen.
 In eine beliebige Zelle der Tabelle1 den Wert als Durchmesser eines Kreises eingeben.
In diesem Beispiel ist es die Zelle B4. Die Eingabe wird mit der Eingabetaste
bestätigt.
 Damit ist nun die Zelle B5 markiert. Sollte die Zelle C4 markiert sein, dann muss eine
Grundeinstellung in Excel geändert werden:
 Über die Registerkarte Datei, dann unter Optionen die Gruppe Erweitert
aufrufen.
 Bei den Bearbeitungsoptionen sollte unter Markierung nach Drücken der
Eingabetaste verschieben die Richtung Unten gewählt sein.
 Dann den Vorgang mit OK beenden.
 Die Methode Makro aufzeichnen, wie zuvor beschrieben, durch Anklicken aufrufen.
 Im neu geöffneten Dialogfenster als Makroname Kreis eingeben. Weitere Angaben
sind nicht erforderlich.
 Die Eingabe mit der Schaltfläche OK beenden.
 In der Zelle B5 den Inhalt der Kreisfläche mit dem Durchmesser d aus B4 nach der
Formel (1.1) berechnen.
𝐴=𝑑 (1.1)

 Dazu in B5 die Formel in der Form = B4 * B4 * 3,1415926 / 4 vornehmen. Eine


Formel beginnt immer mit dem Gleichheitszeichen. Auch diese Eingabe mit der
Eingabetaste bestätigen.
 Die Makroaufzeichnung dort stoppen, wo sie gestartet wurde.
Nun existiert ein Makro. Mit jeder neuen Eingabe im Feld B4 und dem abschließenden Druck
auf die Eingabetaste, erscheint in B5 das Ergebnis. Wir können den Wert in B4 auch nur
ändern (ohne Eingabetaste) und mit der Registerkarte Entwicklertools unter Makros (oder
ALT + F8) und der Makroauswahl Kreis das Makro aufrufen. Es startet ebenfalls eine neue
Flächenberechnung.
1.2 Objekte, Anwendungen, Formulare und Module 9

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

'Makro Kreisfläche berechnen


Sub Kreis()
ActiveCell.FormulaR1C1 = "=R[-1]C*R[-1]C*3.1415926/4"
End Sub

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.

1.2.3 Steuerelemente in Anwendungen


Es ist sehr mühsam, für den Start einer Prozedur immer den Makro-Befehl aufzurufen.
Objekte in Anwendungen, wie Word-Dokumente, Excel-Arbeitsblätter etc., verfügen über die
Möglichkeit, als Unterobjekte Steuerelemente aufzunehmen.
Über die Registerkarte Entwicklertools in der Gruppe Steuerelemente wählen wir Einfügen. Es
öffnet sich ein Dialogfenster, in dem eine Gruppe Symbole unter ActiveX-Steuerelemente
dargestellt ist (Bild 1-7).

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

 In der Entwicklungsumgebung im Projekt-Explorer die entsprechende Tabelle (hier


Tabelle1) markieren und in der Symbolleiste Objekt anzeigen (Bild 1-4 roter Rahmen)
auswählen. Damit wird wieder die Tabelle Tabelle1 sichtbar.
 Wie zuvor beschrieben, aus der Gruppe der ActiveX-Steuerelemente ein
Befehlsschaltflächen-Steuerelement auf dem Arbeitsblatt installieren, danach den
Entwurfsmodus aber nicht ausschalten, damit die Eigenschaften der Befehlsschaltfläche
im Eigenschaftsfenster geändert werden können.
 Mit einem Doppelklick auf die Befehlsschaltfläche im Entwurfsmodus öffnet sich der
VBA-Editor. Im Codefenster wird die Ereignisprozedur für einen Mausklick auf die
Befehlsschaltfläche CommandButton1_Click sichtbar.
 Im Eigenschaftsfenster, unter der Eigenschaft Name, wird im Eingabefeld dahinter der
Name cmdStart eingefügt, den wir beliebig nach den zuvor beschriebenen Regeln wählen
können und den damit automatisch die Ereignis-Prozedur erhält.
Private Sub cmdStart_Click()

End Sub

 Im Eigenschaftsfenster erhält die Eigenschaft Caption den Text Start Makro.


 In der Prozedur schreiben wir den Aufruf des Makros, besser der Prozedur Kreis mit der
VBA-Methode Call. Gewöhnen Sie sich an, die Tabulatortaste einzusetzen und
Anweisungen einer Prozedur eingerückt darzustellen. Umso lesbarer werden ihre
Codezeilen, für mich ein Zeichen guten Programmierstils.
Private Sub CommandButton1_Click()
Call Kreis
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

1.2.4 Formulare und Steuerelemente


Neben dem eigentlichen Anwendungs-Objekt Tabelle, können zusätzlich Formulare für den
Dialog mit dem Anwender erstellt werden. Unter der Registerkarte Einfügen in der
Entwicklungsumgebung gibt es im Dialogfenster die Auswahl UserForm. Damit stellt die IDE
ein neues Formular bereit und blendet gleichzeitig die Werkzeugsammlung mit den
vorhandenen Steuerelementen ein. In dem Eigenschaftsfenster zum Formular (UserForm)
befinden sich eine Menge Eigenschaften, die mit der nötigen Vorsicht verändert werden
können.
Steuerelemente (eine Klasse von Objekten mit einer grafischen Oberfläche) sind das A und O
der Formulare. Sie steuern den eigentlichen Programmablauf. Jedes Steuerelement hat
bestimmte Eigenschaften (Einstellungen und Attribute), die im Eigenschaftsfenster angezeigt
werden, sobald sie aktiv (mit der Maus angeklickt) sind. Die dort angegebenen Werte lassen
sich im Entwurfsmodus verändern oder beim späteren Ablauf durch Wertzuweisung.
Auf Steuerelemente lassen sich auch verschiedene Aktionen anwenden und man spricht hier
von Methoden (z. B. Activate, Refresh, Clear, Load, ...). Ein Ereignis ist eine Aktion, die von
einem Steuerelement erkannt wird (z. B. Mausklick, Tastendruck, ...). Auf Ereignisse eines
Steuerelements wird durch die entsprechende Ereignis-Prozedur reagiert (Bild 1-8). Wird eine
Befehlsschaltfläche angeklickt, so kann in deren Ereignis-Prozedur eine andere Prozedur
aufgerufen, eine Auswertung durchgeführt oder ein anderes Formular aufgerufen werden.

Bild 1-8 Anwendung und Ereignis-Prozedur

Übung 1.4 Formular zur Berechnung einer Kreisfläche erstellen


 Zuerst eine neue Excel-Anwendung öffnen.
 Im nächsten Schritt die Entwicklungsumgebung (ALT + F11) öffnen.
 Unter der Registerkarte Einfügen die UserForm wählen. Im Projekt-Explorer erscheint ein
Formular UserForm1 zusammen mit einem Fenster Toolsammlung (Bild 1-9).
 Im Eigenschaftsfenster des Formulars (UserForm), unter der Eigenschaft Caption den
Text Berechnung einer Kreisfläche eintragen.
 Um die Eigenschaften des jeweiligen Objekts im Eigenschaftsfenster zu sehen, muss das
Objekt mit einem Mausklick markiert werden.
 Durch Anklicken und Ziehen mit der Maus werden nacheinander folgende
Steuerelemente auf dem Formular (Bild 1-10) angeordnet, jeweils zwei
Beschriftungsfelder, zwei Textfelder und zwei Befehlsschaltflächen.
1.2 Objekte, Anwendungen, Formulare und Module 13

Bild 1-9
Ein Formular und die
Werkzeugsammlung

 Unter der Eigenschaft Caption der Bezeichnungsfelder und Befehlsschaltflächen werden


aussagekräftige Bezeichnungen eingetragen, hier Durchmesser, Kreisfläche, Berechnung
und Ende.
 Unter der Eigenschaft Name erhalten die Textfelder und Befehlsschaltflächen wieder
Namen nach unseren Regeln, hier tbxDurchmesser, tbxFläche, cmdBerechnung und
cmdEnde. Die Beschriftungsfelder erfahren keine Namensänderung, da sie im
Programmcode nicht verwendet werden.

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

Private Sub cmdEnde_Click()


Unload Me
End Sub

 Danach ist ein Test der Prozeduren möglich:


 In der Menüzeile der Entwicklungsumgebung die Registerkarte Ausführen und
darin Sub/UserForm ausführen wählen. Dadurch wird das Formular eingeblendet.
 Im Textfeld für den Durchmesser einen beliebigen Wert eingeben
 Mit einem Mausklick auf die Schaltfläche Berechnung sollte das Ergebnis im
Textfeld Kreisfläche stehen.
 Das lässt sich beliebig oft wiederholen.
 Mit der Schaltfläche Ende wird das Formular ausgeblendet.
 Nun wäre es sehr schön, wenn das Formular direkt in der Anwendung (Tabelle) gestartet
werden könnte. Die Lösung kennen wir bereits – eine Befehlsschaltfläche in der
Anwendung nach Kapitel 1.2.3, erstellt im Entwurfsmodus.
 Nur den Aufruf eines Formulars müssen wir noch kennen lernen. Er lautet:
Load (Formularname)

 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

Nach dem Ausschalten des Entwurfsmodus ist die Entwicklung abgeschlossen.


Es gäbe noch eine ganze Menge zu verbessern, doch den Platz heben wir uns für später auf.
Nur noch zwei Ergänzungen. Damit Sie immer wieder nach der Berechnung direkt einen
neuen Durchmesser eingeben können, wird das Eingabefeld für den Durchmesser neu
aktiviert. Diese Eigenschaft nennt sich Focus und das Objekt erhält den Focus mit der
Anweisung:
txtDurchmesser.Focus

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

Bild 1-11 Auswahlfenster für Objekte im Codefenster und deren Ereignisprozeduren

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.

1.3 Die Syntax von VBA


1.3.1 Konventionen
Kommentare im Programmcode werden zeilenweise gekennzeichnet. Eine Kommentarzeile
beginnt mit einem Hochkomma oder der Anweisung Rem (für Remark). Siehe Prozedur Kreis
im Kapitel 1.2.2.
Längere Anweisungen können auf mehrere Zeilen verteilt werden. Dazu wird ein Unterstrich
gesetzt. Achtung! Vor dem Unterstrich muss sich ein Leerzeichen befinden, siehe Prozedur
txtDurchmesser_KeyDown im Kapitel 1.2.4.
'Dies ist eine Kommentarzeile
Rem Dies ist auch eine Kommentarzeile

'
'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.

1.3.2 Prozeduren und Funktionen


Prozeduren haben den grundsätzlichen Aufbau:
[Private|Public] [Static] Sub Name [(Parameterliste)]
[Anweisungen]
[Exit Sub]
[Anweisungen]
End Sub
18 1 Einführung in VBA

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.

1.3.3 Datentypen für Konstante und Variable


Jedes Programm benötigt die Möglichkeit, Daten zu speichern. VBA bietet zwei Formen,
Konstante und Variable. Beide Formen werden durch einen Namen bezeichnet.
Für die Namensvergabe gibt es folgende Regeln:
 erstes Zeichen muss ein Buchstabe sein
 weitere Zeichen können Ziffern, Buchstaben oder Sonderzeichen sein
 keine mathematischen Zeichen und kein Leerzeichen
 ein Name darf maximal 255 Zeichen enthalten
 kein VBA Schlüsselwort
Feststehende Daten werden als Konstante definiert in der Form:
Const Name = Wert [ As Datentyp ]

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

 ac Access Konstante (acCmd...)


 ad Konstante für Datenzugriff (adLock...)
 pp Powerpoint Konstante (ppEffect...)
 ms Office Konstante (msBar...)
 fm MSForms Bibliothek für Formulare (fmAction...)
Variable werden mit der Anweisung Dim (für Dimension) deklariert und dimensioniert.
Dim Name [ As Datentyp ]

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

Typ Kürzel Bezeichnung Datenbereich


Byte Byte 0 bis 255
Integer % Ganze Zahlen -32.768 bis 32.767
Long & Ganze Zahlen -2.147.483.648 bis 2.147.483.647
Single ! Fließkommazahlen -3.4E38 - 3.5E38 (7 Ziffern)
Double # Fließkommazahlen -1.8E308 - 1.8E308 (15 Ziffern)
Currency @ Fließkommazahlen -9.22E14 - 9.22E14 ( 15V 4N )
String $ Zeichenketten 0 - 65535 Zeichen
Date Datum und Zeit 01.Jan.100 - 31.Dez.9999
Boolean Logische Werte True (Wahr) oder False (Falsch)
Variant Beliebige Daten
Object 4 Byte für Adresse (Referenz)

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).

Bild 1-13 Struktur einer Datenliste

Datenlisten (eine Dimension, auch Vektoren genannt) oder Datenfelder (mehrere


Dimensionen, auch Arrays oder Matrizen genannt) definieren sich:
Dim Name (Dimension 1[, Dimension 2[, …]]) As Datentyp

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]

Auch eine gemischte Form ist möglich.


Sub Parameterbeispiel
Dim RefWert As Byte
Dim ValWert As Byte
RefWert=4: ValWert=8
MsgBox "RefWert vor dem Aufruf : " & RefWert
MsgBox "ValWert vor dem Aufruf : " & ValWert
Aufruf (RefWert, ValWert)
MsgBox "RefWert nach dem Aufruf : " & RefWert
1.3 Die Syntax von VBA 21

MsgBox "ValWert nach dem Aufruf : " & ValWert


End Sub

Sub Aufruf (ByVal X As Byte, ByRef Y As Byte)


X = X + 2
Y = Y + 2
End Sub

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

Function Vol(a As Variant, Optional b As Variant, _


Optional c As Variant) As Double
If IsMissing(b) Then
Vol = a * a * a
ElseIf IsMissing(c) Then
Vol = a * a * b
Else
Vol = a * b * c
End If
End Function
22 1 Einführung in VBA

1.3.5 Benutzerdefinierte Aufzählvariablen


Bei Aufzählvariablen handelt es sich um Variablen, die als Enum-Typ deklariert werden. Die
Elemente des Typs werden mit konstanten Werten initialisiert und können zur Laufzeit nicht
verändert werden. Numerische Werte können sowohl positiv als auch negativ sein, wie im
nachfolgenden Beispiel.
Enum Bauteilform
unbekannt = -1
Rechteckquader = 0
Dreieckquader = 1
Zylinder = 2
Kugel = 3
End Enum

Die Aufzähl-Variablen werden wie normale Konstante genutzt. Sie haben ihre Gültigkeit nur
auf Modulebene.

1.3.6 Benutzerdefinierte Datentypen


Benutzerdefinierte Datentypen sind ein leistungsfähiges Hilfsmittel zur Definition und
Nutzung komplexer Datengruppen. Die Definition eines eigenen Datentyps gehört immer in
den Deklarationsteil eines Moduls, also am Anfang noch vor den Prozeduren und Funktionen,
denn nur dort lässt VBA eine Definition zu.
Nehmen wir als Beispiel folgenden benutzerdefinierten Typ Material:
Type Material
Name As String 'Materialname
EMod As Double 'E-Modul
QKon As Double 'Querkontraktion
ZugF As Double 'Zugfestigkeit
DruF As Double 'Druckfestigkeit
BieF As Double 'Biegefestigkeit
End Type

Sie können nun eine Variable des Typs Material deklarieren,


Dim Träger As Material

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"

Benutzerdefinierte Datentypen können nach ihrer Definition wiederum in nachfolgende


Definitionen von benutzerdefinierten Datentypen eingebunden werden.
Type Bauteil
Material As Material
Name As String
End Type
1.3 Die Syntax von VBA 23

So leistungsfähig benutzerdefinierte Typen einerseits sind, so viel Kopfzerbrechen können sie


dem Programmierer andererseits bereiten. Es gilt immer zu bedenken, dass der komplette
Datentyp seine Anwendung findet.

1.3.7 Operatoren und Standardfunktionen


Nachfolgend sind nur die wichtigsten Operatoren und Funktionen aufgeführt.
Wer sich ausführlicher informieren will, findet in der Literatur neben weiteren Definitionen
auch anschauliche Beispiele. Eine weitere Quelle für Informationen ist die Hilfe in der
Entwicklungsumgebung. In der Menüzeile ist sie mit einem Fragezeichen installiert und ein
Mausklick öffnet ein Dialogfenster. Durch Eingabe eines Stichwortes liefert eine Suche alle
verwandten Themen. Auch hier findet man neben Definitionen anschauliche Beispiele.
Tabelle 1-2 Operatoren und Standardfunktionen in VBA

Operatorart Zeichen Bezeichnung


Numerische Operatoren = Wertzuweisung
+ Addition
- Subtraktion
* Multiplikation
/ Division
^ Potenzieren
\ ganzzahlige Division
Mod Modulo (Restwert nach Division)
Alphanumerische & Verkettung alphanumerischer Variabler
Operatoren + Wie &, sollte aber nicht verwendet werden
Vergleichsoperatoren = gleich
> größer als
< kleiner als
>= größer gleich
<= kleiner gleich
<> ungleich
Like gleich (Zeichenketten)
Is vergleicht Objekt-Variable
Logische Operatoren Not Nicht
(Funktionen) And Und
Or Oder
24 1 Einführung in VBA

Xor Exklusiv Oder


Eqv logische Äquivalenz zwischen Ausdrücken
Imp logische Implikation zwischen Ausdrücken
Alphanumerische Left linker Teil einer Zeichenkette
Funktionen Right rechter Teil einer Zeichenkette
Len Länge einer Zeichenkette
Mid Teil einer Zeichenkette
Str Umformung numerisch -> alphanumerisch
Trim löscht führende und endende Leerzeichen
Datumsfunktionen Date aktuelles Systemdatum
Now aktuelles Datum und aktuelle Zeit
Month aktueller Monat als Zahl (1-12)
Numerische Funktionen: Val Umformung alphanumerisch -> numerisch
Int Ganzzahl
Exp Exponent
Logische Funktionen IsNumeric prüft auf Zahl
(true/false) IsArray prüft auf Datenfeld
IsEmpty Variable initialisiert?
IsObject Objekt-Variable?
IsDate prüft auf Datum
IsNull prüft auf keine gültigen Daten (null)
Is Nothing prüft Existenz einer Objekt-Variablen
Dialog Funktionen InputBox Eingabe mit Kommentar
MsgBox Ausgabe mit Aktionen

1.3.8 Strukturen für Prozedurabläufe


1.3.8.1 Bedingte Verzweigungen
Bedingte Verzweigungen bieten die Ausführung unterschiedlicher Anweisungsblöcke in
Abhängigkeit von Bedingungen an. Sie sind, wie in vielen Programmiersprachen,
Grundelemente einer strukturierten Programmierung.
In VBA unterscheiden wir nach Anzahl der Bedingungen zwei Versionen.
1.3 Die Syntax von VBA 25

'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

1.3.8.2 Bedingte Auswahl


Die Bedingte Auswahl wird auch oft als Softwareschalter bezeichnet, da je nach dem Inhalt
des Selectors Anweisungsblöcke ausgeführt werden. Trifft kein Auswahlwert zu, wird der
Anweisungsblock unter Case Else ausgeführt.
Select Case Selector
Case Auswahlwert 1
Anweisungsblock 1

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]

1.3.8.5 Bedingte Schleifen


In bedingten Schleifen werden Anweisungsblöcke in Abhängigkeit von einer Bedingung
mehrfach ausgeführt. Wir unterscheiden verschiedene Arten.
26 1 Einführung in VBA

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.6 Abweisend bedingte Schleife


Anweisungsblock wird möglicherweise erst nach Prüfung der Bedingung ausgeführt.
Do While/Until Bedingung
Anweisungsblock
Loop

1.3.8.7 Ausführend bedingte Schleife


Anweisungsblock wird erst durchgeführt, bevor die erste Prüfung der Bedingung erfolgt.
Do
Anweisungsblock
Loop While/Until Bedingung

1.3.8.8 Schleifen über Datenlisten und Objektlisten


Mit dieser Anweisung werden alle Elemente einer Liste angesprochen.
For Each Variable in Feld
Anweisungsblock
Next Variable

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.

1.3.10 Fehlerbehandlung in Prozeduren


Laufzeitfehler, die bei Ausführung einer Prozedur auftreten, führen zum Abbruch der
Verarbeitung. Weil sich diese Fehler normalerweise nicht unter der Kontrolle des
Programmierers befinden und auch die angezeigten Fehlertexte oft wenig Aufschluss über den
Sachverhalt wiedergeben, geschweige denn Anweisungen zur Fehlerbehandlung, ist es besser
die Möglichkeiten zur Fehlerbehandlung zu nutzen.
Dazu gibt es die Fehleranweisung On Error und ein Err-Objekt. Mit der Anweisung
On Error GoTo Marke
Anweisungen
Exit Sub
Marke:
Anweisungen

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}]

1.4 Objekte unter Excel


Excel besteht aus sehr vielen Objekten. Nach der Hierarchie unterscheidet man in Excel das
 Application Objekt (die gesamte Excel Anwendung)
 Workbook Objekt (eine Arbeitsmappe)
 Worksheet Objekt (ein Tabellenblatt)
 Range Objekt (Zellenbereich, bestehend aus einer Zelle oder mehreren Zellen)
 Cell Objekt (eine Zelle)
Für die Programmierung ist es wichtig die Objekthierarchie (Bild 1-15) zu kennen. Nur so
lässt sich auf ein Objekt zugreifen.

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

Objekt / Eigenschaft Beschreibung


ActiveCell aktuelles Range-Objekt
ActivePrinter aktuelles Printer-Objekt
ActiveSheet aktuelles Sheet-Objekt
ActiveWindow aktuelles Windows-Objekt
ActiveWorkbook aktuelle Workbook-Objekt
Cells Range-Objekt, alle Zellen des aktiven Arbeitsblattes
Dialogs Dialogs-Auflistung alle Dialogfelder (Datei-öffnen, -speichern, …)
Name Name der Anwendung
Names Namen-Auflistung, Namen der aktiven Arbeitsmappen
Parent übergeordnetes Objekt
Path vollständiger Pfad der Anwendung
Range Range-Objekt, Zelle oder Zellbereich des aktiven Arbeitsblattes
Sheets Sheets-Auflistung, alle Blätter der aktiven Arbeitsmappe
Windows Windows-Auflistung aller Fenster
Workbooks Workbooks-Auflistung, alle geöffneten Arbeitsmappen
Worksheets Sheets-Auflistung, alle Tabellen-Blätter der aktiven Arbeitsmappe

Tabelle 1-4 Die wichtigsten Methoden 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

können Sie beispielsweise Folgendes eingeben:


ActiveCell.Font.Bold = False
30 1 Einführung in VBA

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

Columns Range-Objekt, das alle Spalten im angegebenen Arbeitsblatt repräsentiert


Name Namen der Tabelle
Names Namen-Auflistung aller arbeitsblattspezifischen Namen
Parent übergeordnete Objekt (Workbook-Objekt)
Range Range-Objekt (Zellenbereich innerhalb der Tabellenblattes)
Rows Range-Objekt, alle Zeilen im angegebenen Arbeitsblatt
UsedRange Range-Objekt, der verwendete Bereich (benutzte Zellen)
Tabelle 1-8 Die wichtigsten Methoden des Worksheet-Objekts

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

Count Anzahl an Zellen im Range-Objekt


Font Font-Objekt, das die Schriftart des Range-Objekts darstellt
Formula Formel des Range-Objekts
Parent übergeordnetes Objekt (Worksheet-Objekt)
Row Zeile (am Anfang des angegebenen Bereichs)
Tabelle 1-10 Die wichtigsten Methoden des Range-Objekts

Methode Beschreibung
Activate aktiviert eine einzelne Zelle
Calculate berechnet einen Zellenbereich neu
Select markiert eine Zelle oder einen Zellbereich

1.4.5 Zeilen und Spalten


Zeilen und Spalten, unter VBA als Rows und Columns bezeichnet, werden mit der Select-
Methode markiert.
Beispiele:
Sub Zeile_markieren()
Rows(3).Select 'markiert dritte Zeile
End Sub

Sub Spalte_markieren()
Columns(2).Select 'markiert zweite Spalte
End Sub

1.4.6 Zellen und Zellbereiche


VBA kennt kein Objekt für die einzelne Zelle. Einzelne Zellen zählen als Sonderfall des
Range-Objekts. Für die Adressierung von Zellen oder Zellbereiche wird die Range-Methode
oder die Cells–Eigenschaft verwendet.

Direkte Adressierung mit der Range-Methode


Das Argument Cell ist eine durch Hochkommata eingeschlossene Bezeichnung für eine
einzelne Zelladresse, im Excel–Standardform (A1, B2, C4, usw.), einen einzelnen Zellbereich,
der die linke obere Zelladresse und die rechte untere Zelladresse durch einen Doppelpunkt
getrennt (B3:D8, usw.) angibt, oder eine durch Kommata getrennte Liste mehrerer
Zellenbereiche (A1:C5, D5:F8, usw.) von Adressen.
Objekt.Range(Cell)
Objekt.Range(Cell1, Cell2)

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

Indirekte Adressierung mit der Cells-Eigenschaft


Im Gegensatz zur Adressierung über die Range-Methode bietet diese Alternative die
Möglichkeit, Zeilen- und Spaltenindizes zu verwenden. Dies ist insbesondere für berechnete
Zelladressen oder die Benutzung von Variablen für Zelladressen ein großer Vorteil. Auch hier
sind mehrere Syntaxvarianten möglich:
Objekt.Cells(RowIndex, ColumnIndex)
Object.Cells(Index)
Object.Cells

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

Eingefügte Kommentare sind in der Auflistung Comments zusammengefasst. Über die


Eigenschaft Visible werden die Kommentare angezeigt oder ausgeblendet.
Beispiele:
'Zelle A1 erhält einen Kommentar, der anschließend angezeigt wird
Worksheets("Tabelle1").Range("A1").AddComment "Testeingabe!"
Worksheets("Tabelle1").Range("B2").Comment.Visible = True

'in der nachfolgenden Anweisung wird der neue Text


'ab der 5. Pos. eingesetzt
Range("C3").Comment.Text "Neuer Text!", 5, False
Range("C3").Comment.Visible = True

Einfügen von Zellen, Zeilen und Spalten


Mit den Eigenschaften EntireRow und EntireColumn, zusammen mit der Methode Insert ist
das Einfügen von Zellen, Zeilen und Spalten möglich. Mit Hilfe des Arguments Shift kann
bestimmt werden, in welche Richtung zur aktiven Zelle die übrigen Zellen verschoben
werden. Die Richtung wird über die Konstanten xlDown, xlUp, xlToRight oder xlToLeft
angegeben.
Beispiele:
ActiveCell.EntireRow.Insert 'fügt Zeile ein
ActiveCell.EntireColumn.Insert 'fügt Spalte ein

ActiveCell.Insert Shift:=xlToRight 'fügt Zeile ein, alle übrigen


'Zellen werden nach rechts
'verschoben

Löschen von Zellinhalten


Neben numerischen und alphanumerischen Werten besitzen Zellen auch Formatierungen und
Kommentare. Für ein Range-Objekt gibt es daher verschiedene Löschanweisungen.
Tabelle 1-13 Löschanweisungen für das Range-Objekt

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.

Bereichsnamen für Range-Objekte vergeben


Einzelnen Zellen oder Zellbereichen kann über die Eigenschaft Name des Range-Objekts ein
Bereichsname zugeordnet werden.
1.4 Objekte unter Excel 35

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

'Sucht im angegebenen Bereich nach der Zelle Wert


'und gibt die Adresse an die Variable Adresse,
'die dann eine neue Zuweisung erhält
Adresse = Range("B1:M25").Find("Wert").Address
Range(Adresse).Value = "Test"

'Anweisung weist der Zelle mit dem gesuchten Inhalt


'ein Hintergrundmuster zu
Range("B1:D5").Find("Wert").Interior.Pattern = 5

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

1.5 Eigene Klassen und Objekte


Im vorangegangenen Abschnitt wurden Excel-Objekte mit ihren Eigenschaften und Methoden
beschrieben. Aber Objekte finden sich überall im realen Leben. Ein Auto ist so ein Objekt. Es
hat Eigenschaften, man spricht hier von Attributen, wie Farbe, Länge, Radabstand, Anzahl
Türen, Fensterform. Und es hat Methoden wie Starten, Beschleunigen, Bremsen.

1.5.1 Definition einer Klasse


Zur Definition einer Klasse stellt VBA ein besonderes Modul zur Verfügung, das
Klassenmodul (Bild 1-16). Es ist der Container für die Definition der Attribute und Methoden
einer Klasse.
1.5 Eigene Klassen und Objekte 37

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

1.5.2 Konstruktor und Destruktor


Wenn in der Kopfzeile des Codefensters das Objekt Class angewählt wird, lassen sich im
danebenstehenden Kombifeld zwei Ereignis-Methoden anwählen, die sich nach der Anwahl
als private Prozeduren darstellen. Die Methode Class_Initialize() wird in OOP-Sprachen als
Konstruktor bezeichnet. Entsprechend die Methode Class_Terminate() als Destruktor. Sie
werden später bei jeder Instanziierung eines Objektes (Initialize), bzw. vor der Löschung
(Terminate) ausgerufen. Als private Prozeduren können sie nicht von außen aufgerufen
werden, erscheinen also auch nicht als Makros. Ebenso verfügen sie zunächst über keine
Anweisungen.

1.5.3 Instanziierung von Objekten


Das Arbeiten mit der Klasse soll in einem eigenen Modul durchgeführt werden. Dazu wird ein
Modul unter dem Namen modFreierFall eingefügt. Es erhält eine Public-Prozedur FreierFall.
Das Codefenster des Moduls zeigt Bild 1-18. Diese Prozedur kann als Makro aufgerufen
werden.

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

1.5.4 Arbeiten mit Objekten


Doch wie bekommt nun das Objekt eine Fallzeit zugewiesen, da dessen Attribut ja nur
innerhalb des Klassenmoduls durch dessen Private-Eigenschaft gültig ist. Es wird durch eine
Public-Definition der Fallzeit außerhalb der Prozedur FreierFall erreicht. Zum Beweis
40 1 Einführung in VBA

wandert die Ausgabe zum Direktbereich in den Konstruktor der Klasse. Der Code im
Arbeitsmodul modFreierFall lautet nun:
Public dZeit As Double

Public Sub FreierFall()


Dim iMax As Integer
Dim iRow As Integer
Dim objFall As Object

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

Der Code im Klassenmodul clsFreierFall lautet:


Dim Fallzeit As Double
Dim Fallhöhe As Double
Dim Fallgeschw As Double

Private Sub Class_Initialize()


Fallzeit = dZeit
' Auswertung
End Sub

Private Sub Class_Terminate()

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

Private Sub Class_Initialize()


Fallzeit = dZeit
Fallgeschw = 9.81 * Fallzeit
Fallhöhe = 9.81 * Fallzeit * Fallzeit / 2
Debug.Print Fallzeit, Fallgeschw, Fallhöhe
End Sub

Private Sub Class_Terminate()


End Sub
1.5 Eigene Klassen und Objekte 41

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 Setzen von Attributen und


[Public|Private][Static] Property Get Name ([Parameterliste])[As
Typ]
[Anweisungen]
[Name = Ausdruck]
[Exit Property]
[Anweisungen]
[Name = Ausdruck]
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

Dim Fallzeit As Double


Dim Fallhöhe As Double
Dim Fallgeschw As Double

Private Sub Class_Initialize()


Fallzeit = dZeit
Fallgeschw = 9.81 * Fallzeit
Fallhöhe = 9.81 * Fallzeit * Fallzeit / 2
End Sub

Private Sub Class_Terminate()

End Sub

Public Property Get getFallhöhe() As Double


getFallhöhe = Fallhöhe
End Property

Public Property Get getFallgeschw() as double


getFallgeschw = Fallgeschw
End Property

Die Tabelle mit den Werten erhält den Namen Liste. Der Code des Moduls modFreierFall
lautet:
Public dZeit As Double

Public Sub FreierFall()


Dim iMax As Integer
Dim iRow As Integer
Dim objFall() As Object
Dim wshListe As Worksheet

'Instanziierung und Lesen


Set wshListe = Worksheets("Liste")
iMax = wshListe.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = wshListe.Cells(iRow, 1)
ReDim Preserve objFall(iRow - 1)
Set objFall(iRow - 1) = New clsFreierFall
Next iRow

'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

Private Sub Class_Initialize()


Fallzeit = dZeit
Auswertung
End Sub

Public Property Get getFallzeit() As Double


getFallzeit = Fallzeit
End Property
Public Property Get getFallhöhe() As Double
getFallhöhe = Fallhöhe
End Property

Public Property Get getFallgeschw() As Double


getFallgeschw = Fallgeschw
End Property

Public Property Let letFallzeit(dFallzeit As Double)


Fallzeit = dFallzeit
Auswertung
End Property

Private Sub Auswertung()


Fallgeschw = g * Fallzeit
Fallhöhe = g * Fallzeit * Fallzeit / 2
End Sub

Das Modul modFreierFall:


Public dZeit As Double

Public Sub FreierFall()


Dim iMax As Integer
Dim iRow As Integer
Dim objFall() As Object
Dim wshListe As Worksheet

'Instanziierung und Lesen


Set wshListe = Worksheets("Liste")
iMax = wshListe.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = wshListe.Cells(iRow, 1)
44 1 Einführung in VBA

ReDim Preserve objFall(iRow - 1)


Set objFall(iRow - 1) = New clsFreierFall
Next iRow
'hier das Beispiel für einen willkürlich gesetzten Wert
dZeit = 7.5 'statt 7
objFall(5).letFallzeit = dZeit
'Ausgabe
For iRow = 2 To iMax
With objFall(iRow - 1)
wshListe.Cells(iRow, 2) = .getFallzeit
wshListe.Cells(iRow, 3) = .getFallhöhe
wshListe.Cells(iRow, 4) = .getFallgeschw
Set objFall(iRow - 1) = Nothing
End With
Next
Set wshListe = Nothing
End Sub

 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

Tabelle 1-14 Die Methoden und Attribute der Klasse Collection

Add (Item, Key, Before, After) Hinzufügen eines Elements


Item: Element beliebigen Datentyps
Key: Textschlüssel für den Zugriff
Before, After: Relative Positionierung der Zufügung
Remove (Index) Entfernt ein Element
Index: Key oder Zahl in der Liste
Item 1<=n<=Collection-Object.Count oder Key der Liste
Count Anzahl Elemente in der Liste

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

Public Sub ListeFreierFall()


Dim iMax As Integer
Dim iRow As Integer
Dim objFall As Object
Dim objListe As Collection
Dim wshListe As Worksheet

Set objListe = New Collection


Set wshListe = Worksheets("Liste")
iMax = wshListe.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = wshListe.Cells(iRow, 1)
Set objFall = New clsFreierFall
'Objekt der Liste zuweisen
objListe.Add Item:=objFall, Key:=Trim(Str(iRow - 1))
Next iRow
'da kein Edit in Colletion existiert
'muss ein key entfernt (remove)
'und dann neu gesetzt werden
dZeit = 33.3
Set objFall = New clsFreierFall
objListe.Remove "5"
objListe.Add Item:=objFall, Key:="5"
'Ausgabe aus der Liste um eine Spalte versetzt
iRow = 1
For Each objFall In objListe
iRow = iRow + 1
With objFall
wshListe.Cells(iRow, 2) = .getFallzeit
46 1 Einführung in VBA

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

Mit der nächsten Objektsammlung, dem Dictionary, wird es etwas einfacher.


Dictionary
Ein Dictionary-Objekt ist dem Collection-Objekt sehr ähnlich. Auch dieses Objekt kann
Elemente mit unterschiedlichen Datentypen sammeln. Die Klasse steht jedoch erst zur
Verfügung, wenn die Bibliothek Microsoft Scripting Runtime in der Entwicklungsumgebung
unter Extras/Verweise eingebunden wurde (Bild 1-23).
Die Klasse Dictionary bietet mehr Methoden als die Klasse Collection. Insbesondere erlaubt
sie das gezielte Ansprechen eines Elements. Der Schlüssel in einem Dictionary kann jeden
Datentyp annehmen. Beim Collection-Objekt ist es nur ein String-Datentyp. Bei einer
Dictionary-Sammlung gibt es außerdem die Methode Exists, um die Existenz eines
bestimmten Schlüssels (und damit die Existenz eines bestimmten Elements, das diesem
Schlüssel zugeordnet ist) zu testen.
Die Schlüssel und Elemente einer Dictionary-Sammlung sind immer frei zugänglich. Die
Elemente einer Collection-Sammlung sind zugänglich und abrufbar, ihre Schlüssel sind es
nicht. Ein Dictionary-Element besitzt Schreib-/Lesezugriff und so lässt sich die Zuordnung
zwischen Element und Schlüssel ändern. Die Eigenschaft Item einer Collection-Sammlung ist
aber schreibgeschützt, so dass ein Element, das einen bestimmten Schlüssel besitzt, nicht neu
zugewiesen werden kann. Es muss also zunächst entfernt und dann mit einem neuen Schlüssel
hinzugefügt werden.
1.5 Eigene Klassen und Objekte 47

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

Public Sub FreierFall()


Dim iMax As Integer
Dim iRow As Integer
Dim objFall As Object
Dim vFall As Variant
Dim objListe As Dictionary
48 1 Einführung in VBA

Dim wshListe As Worksheet

'Instanziieren und Lesen


Set objListe = New Dictionary
Set wshListe = Worksheets("Liste")
iMax = wshListe.UsedRange.Rows.Count
For iRow = 2 To iMax
dZeit = wshListe.Cells(iRow, 1)
Set objFall = New clsFreierFall
'Objekt der Liste zuweisen
objListe.Add iRow - 1, objFall
Next iRow
'einfaches Ändern einer Eigenschaft
dZeit = 44.4
objListe.Item(5).letFallzeit = dZeit
iRow = 1
For Each vFall In objListe.Items
iRow = iRow + 1
With vFall
wshListe.Cells(iRow, 2) = .getFallzeit
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-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

Tabelle 1-16 Modifizierer für Attribute und Methoden

Zeichen Bedeutung Beschreibung


- Private nur innerhalb der Klasse selbst
+ Public "von außen" sichtbar, gehört also zur öffentlichen Schnittstelle
# Protected nur innerhalb der Klasse oder innerhalb davon abgeleiteter Klassen

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.

1.5.7 Events und eigene Objekte


Bisher haben wir Events (Ereignisse) nur am Rande erwähnt. Sie stellen eine besondere Art
von Methoden der Objekte dar, denn sie werden, je nach ihrer Spezifikation des Ereignisses,
automatisch aufgerufen. Doch viele Event-Methoden sind leer, d. h. sie verfügen nur über den
Prozedurrumpf. So gibt es z. B. für eine Tabelle in der Excel-Mappe die Events Activate,
Change, Calculate, usw. (Bild 1-25).
50 1 Einführung in VBA

Bild 1-25 Events und zugehörige Methoden der Klasse

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

Entsprechend der Objekthierarchie gibt es aber auch mehrere Event-Methoden in den


verschiedenen Objekten für das gleiche Event. Dann dürfen sich die Methoden nicht
gegenseitig beeinflussen. Als Beispiel wählen wir das Event für Änderungen im Worksheet.
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Sheet-Event in " & Target.Address
End Sub
1.5 Eigene Klassen und Objekte 51

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

Private Sub Workbook_Open()


Application.EnableEvents = True
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

Private Sub App_SheetChange(ByVal sh As Object, ByVal Target As Range)


MsgBox "App-Event in " & sh.Name & " / " & Target.Address
End Sub

Private Sub Class_Initialize()


Set App = Application
End Sub

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

Bild 1-27 Zeitliche Folge der Event-Meldungen

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).

Bild 1-28 Die Klasse Alle Tabellen

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

Der Code für die UserForm lautet:


Private WithEvents EineTabelle As clsAlleTabellen

Private Sub cmdEnde_Click()


Unload Me
End Sub

Private Sub UserForm_Activate()


Set EineTabelle = New clsAlleTabellen
Set EineTabelle.Objektzuordnung = Application
End Sub

Private Sub UserForm_Terminate()


Set EineTabelle = Nothing
End Sub

Private Sub EineTabelle_DieAdresse(Markiert As Range)


tbxName.Text = Markiert.Worksheet.Name
tbxAdresse.Text = Markiert.Address
End Sub

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

1.6 Aktionen unter Excel

1.6.1 Neue Excel-Anwendung starten


Mit einem Doppelklick auf das Symbol Microsoft Excel auf dem Desktop oder durch einen
Klick auf den Eintrag Microsoft Excel in Ihrer Programmliste starten wir eine neue Excel-
Anwendung. Auf dem Bildschirm erscheint die Excel-Anwendung mit dem Namen Mappe1.
Sie besitzt mindestens ein Arbeitsblatt mit dem Namen Tabelle1 (Bild 1-30).

Bild 1-30
Startfenster
einer leeren
Excel-
Anwendung

1.6.2 Der Excel-Anwendung einen Namen geben


 Im Menüband unter dem Register Datei die Methode Speichern unter… wählen
 Es öffnet sich ein Dialogfenster. Hier die Methode Durchsuchen anklicken und im Fenster
(Bild 1-31) den Ordner zur Speicherung wählen
 Unter Dateiname den neuen Namen eingeben und Speichern.

Bild 1-31
Dialogfenster
zur Speicherung
der Excel-
Anwendungen
1.6 Aktionen unter Excel 55

1.6.3 Dem Excel-Arbeitsblatt (Tabelle) einen Namen geben


Wurde eine neue Excel-Anwendung geöffnet, dann wird in dieser Anwendung das erste
Arbeitsblatt direkt angelegt und hat den Namen Tabelle1. Oft werden auch gleichzeitig drei
Tabellen angelegt. Das ist abhängig von den eingestellten Optionen. Die Arbeitsblätter unter
Excel werden auch als Tabellen bezeichnet.
 Mit einem Klick der rechten Maustaste auf den Namen Tabelle1 sogenannte Kontextmenü
öffnen
 Umbenennen wählen und einen anderen Namen (ohne Leerzeichen) eingeben
Der Klick mit der rechten Maustaste auf ein beliebiges Objekt unter Windows öffnet immer
das Kontextmenü. Je nach Objekt fällt der Inhalt unterschiedlich aus, da das Kontextmenü
immer die wichtigsten Eigenschaften und Methoden zeigt, die das betreffende Objekt besitzt.

1.6.4 In der Excel-Anwendung ein neues Arbeitsblatt anlegen


Ein weiteres Arbeitsblatt in einer Excel-Anwendung kann durch einen Mausklick auf das
Einfügesymbol (+) oder mit Hilfe der Tasten Umschalt + F11 erstellt werden. Das
Arbeitsblatt erhält den Namen Tabelle2, und wenn dieser schon vorhanden ist, den Namen
Tabelle3 und so weiter (Bild 1-32).

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.

1.6.5 Dem Projekt und dem Arbeitsblatt einen Namen geben


Bleiben wir bei dem zuvor beschriebenen Start. Wir haben eine neue Excel-Anwendung
aufgerufen, danach dem Arbeitsblatt den Titel Daten (zuvor Tabelle1) gegeben (Kapitel
1.6.3). Dann diese Excel-Anwendung gespeichert (Kapitel 1.6.1). Anschließend rufen wir mit
den Tasten ALT + F11 die Entwicklungsumgebung auf (Bild 1-33).
56 1 Einführung in VBA

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).

1.6.6 Prozeduren mit Haltepunkten testen


Wir erstellen die dargestellte Testprozedur (Bild 1-34) in einer neuen Excel-Anwendung, z. B.
im Codefenster von Tabelle1 und klicken an der gekennzeichneten Stelle auf den linken
grauen Rand neben dem Programmcode. Es erscheint ein brauner Punkt und die entsprechende
Programmzeile wird ebenfalls mit braunem Hintergrund dargestellt.

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

1.6.7 Codefenster teilen


Bei umfangreichen Programmcodes kommt es vor, dass man eine andere Stelle im Code
betrachten möchte, ohne die aktuelle Stelle verlassen zu müssen. Dazu lässt sich das
Codefenster teilen und wir erhalten zwei Fenster, in denen unterschiedliche Stellen der
Prozedur(en) dargestellt werden können.

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.

1.6.8 Symbolleiste für den Schnellzugriff ergänzen


Ab der Version 2007 hat Microsoft das Konzept der Menü- und Symbolleisten auf ein neues
Bedienprinzip umgestellt, das mit dem Schlagwort Ribbon bezeichnet wird. Dem einfacheren
Ribbon-Konzept musste die Flexibilität eigener Symbolleisten-Gestaltung weichen. Es
existiert jetzt eine Schnellzugriffsleiste (Bild 1-36), die mit beliebigen Menü-Funktionen
belegt werden kann.

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

Bild 1-37 Dialogfenster zur Auswahl vorhandener Makros

 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.

Bild 1-38 Übernahme eines Makros für den Schnellzugriff

 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

1.6.9 Makros aus dem Menübereich Add-Ins aufrufen


Wer für seine Anwendung dennoch einen eigenen Menüeintrag möchte, kann über das Menü-
Objekt einen Menüeintrag unter Add-Ins erreichen. Für das Menü wird ein zusätzliches Modul
ModBuchMenu erstellt (Bild 1-41).

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

Codeliste 1-1 Beispiel Menüprozeduren


Const sMenuName As String = "Kreisberechnung"

Public Sub InitMenu()


Dim objMenuBar As CommandBar
Dim objMenuGroup As CommandBarControl
Dim objMenuButton As CommandBarControl

Call RemoveMenu

Set objMenuBar = Application.CommandBars.ActiveMenuBar


Set objMenuGroup = objMenuBar.Controls.Add _
(Type:=msoControlPopup, Temporary:=False)
With objMenuGroup
.Caption = sMenuName
.Tag = sMenuName
.TooltipText = "Aktion wählen ..."
End With

Set objMenuButton = objMenuGroup.Controls.Add _


(Type:=msoControlButton, Temporary:=True)
With objMenuButton
.Caption = "Tabelle1 / Makro Kreis1"
.OnAction = "Tabelle1.Kreis1"
.Style = msoButtonIconAndCaption
.Tag = sMenuName
End With

Set objMenuButton = objMenuGroup.Controls.Add _


(Type:=msoControlButton, Temporary:=True)
With objMenuButton
.Caption = "Modul modKreisFläche / Makro Kreis2"
.OnAction = "Kreis2"
.Style = msoButtonIconAndCaption
.Tag = sMenuName
End With

Set objMenuBar = Nothing


Set objMenuGroup = Nothing
Set objMenuButton = Nothing
End Sub

Public Sub RemoveMenu()


Dim objMenu As Object
Dim objMenuBar As Object

Set objMenuBar = CommandBars.ActiveMenuBar


For Each objMenu In objMenuBar.Controls
If objMenu.Tag = sMenuName Then
objMenu.Delete
End If
Next
Set objMenuBar = Nothing
End Sub
1.6 Aktionen unter Excel 61

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

Private Sub Workbook_Open()


InitMenu
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

'Icons für Ihre Auswahl


Set Menu1 = myMenuBar.Controls.Add(_
Type:=msoControlPopup, Temporary:=False)
Menu1.Caption = "MenuIcons"
For n = 0 To 100
Set xMenu = Menu1.Controls.Add(Type:=msoControlButton, _
Temporary:=False)
With xMenu
.OnAction = Str(n)
.Style = msoButtonIconAndCaption
.Caption = Str(n)
.FaceId = n
End With
Next n

1.6.10 Berechnungsprozeduren als Add-In nutzen


Berechnungsprozeduren lassen sich in Modulen unter einem Workbook zusammenfassen und
mit Speichern unter und dem Dateityp Microsoft Office Excel Add-In in dem
Standardverzeichnis für Vorlagen speichern. Ein solches Add-In kann dann ebenfalls über die
Ereignisprozeduren geladen werden (Codeliste 1-3).
Codeliste 1-3 Automatische Installation und Deinstallation eines Add-Ins
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If AddIns("BuchProzeduren").Installed = True Then
AddIns("BuchProzeduren").Installed = False
End If
End Sub
Private Sub Workbook_Open()
If AddIns("BuchProzeduren").Installed = False Then
AddIns("BuchProzeduren").Installed = True
End If
End Sub

1.6.11 Eigene Funktionen schreiben und pflegen


Trotz der großen Zahl installierter Funktionen in Excel, findet der Anwender für sein
Spezialgebiet nicht immer die Formeln, die er ständig benötigt. Die Lösung sind eigene
Funktionen unter VBA.
Als Beispiel soll hier eine Funktion zur Berechnung des Flächeninhalts eines beliebigen
Dreiecks nach dem Satz des Heron dienen. Sind a, b und c beliebige Seiten eines ebenen
Dreiecks, dann bestimmt sich der Flächeninhalt aus
𝐴= 𝑠(𝑠 − 𝑎)(𝑠 − 𝑏)(𝑠 − 𝑐) (1.4)
mit
𝑠 = (𝑎 + 𝑏 + 𝑐) (1.5)

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

1.7.1 Listenfeld mit mehreren Spalten


Hin und wieder kommt es vor, dass die Daten eines Arbeitsblattbereichs zur Auswahl auf ein
Formblatt übertragen und dargestellt werden müssen. Unter der Annahme, dass es ein
zusammenhängender Bereich ist, kann dieser über das UsedRange-Objekt bestimmt werden.
Zunächst erstellen wir ein Formular frmListe (Bild 1-46) mit einem Listenfeld lbxListe.
Außerdem bekommt das Formular drei Schaltflächen cmdStep1 bis cmdStep3.

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

Sub ListeFüllen(lbxTemp As MSForms.ListBox)


Dim wshTemp As Worksheet
Dim rngTemp As Range
Set wshTemp = Worksheets("Daten lesen")
Set rngTemp = wshTemp.UsedRange
With lbxTemp
.ColumnCount = rngTemp.Columns.Count
.List = rngTemp.Value
End With
Set wshTemp = Nothing
Set rngTemp = Nothing
End Sub
1.7 Hilfsprozeduren 65

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 Aktionsprozedur ListeKopieren steht ebenfalls im Code-Modul modAktionen.


Sub ListeKopieren(lbxTemp As MSForms.ListBox)
Dim wshTemp As Worksheet
Dim lRow As Long
Dim lCol As Long

Set wshTemp = Worksheets("Daten kopieren")


lRow = Selection.Row
lCol = Selection.Column
If lbxTemp.ListCount = 0 Then Exit Sub 'Liste leer
With wshTemp
.Range(.Cells(lRow, lCol), _
.Cells(lRow + lbxTemp.ListCount - 1, _
lCol + lbxTemp.ColumnCount - 1)).Value = _
lbxTemp.List
End With
Set wshTemp = Nothing
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.

1.7.2 Die ShowModal-Eigenschaft eines Formulars


Ein Formular UserForm besitzt die binäre Eigenschaft ShowModal, die die Zustände True und
False annehmen kann.
Mit dem Standardwert True wird festgelegt, dass das Formular erst geschlossen werden muss,
bevor ein anderer Teil der Anwendung aktiviert werden kann. Mit dem Wert False besitzt ein
Formular keinen Modus, so dass andere Formulare und Fenster angezeigt werden können,
während das Formular geöffnet ist. So kann vor dem Zurückkopieren in das Arbeitsblatt eine
beliebige Zelle ausgewählt werden, auch auf einem anderen Arbeitsblatt.
Sub StartFormListe()
Load frmListe
frmListe.Show vbModal = False
End Sub

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

Aktionsprozedur MarkierteZeilenKopieren aufruft, können ausgewählte Zeilen zurück ins


Arbeitsblatt kopiert werden.
Sub MarkierteZeilenKopieren(lbxTemp As MSForms.ListBox)
Dim wshTemp As Worksheet
Dim lRow As Long
Dim lCol As Long
Dim lCount As Long
Dim vMark() As Variant

'Anzahl markierter Zeilen in der Liste bestimmen


lCount = 0
With lbxTemp
For lRow = 0 To .ListCount - 1
If .Selected(lRow) Then lCount = lCount + 1
Next lRow
If lCount = 0 Then Exit Sub 'keine Zeile markiert
'markierte Zeilen sammeln
ReDim vMark(1 To lCount, 1 To .ColumnCount)
lCount = 0
For lRow = 0 To .ListCount - 1 ' Ins Feld schreiben
If .Selected(lRow) Then
lCount = lCount + 1
For lCol = 0 To .ColumnCount - 1
vMark(lCount, lCol + 1) = .List(lRow, lCol)
Next lCol
End If
Next lRow
End With
'ins Arbeitsblatt übertragen
Set wshTemp = Worksheets("Daten kopieren")
lRow = Selection.Row
lCol = Selection.Column
With wshTemp
.Range(.Cells(lRow, lCol), _
.Cells(lRow + lCount - 1, _
lCol + lbxTemp.ColumnCount - 1)).Value = vMark
End With
Set wshTemp = Nothing
End Sub

1.7.3 DoEvents einsetzen


Programmschleifen in Funktionen und Prozeduren nehmen die Programmsteuerung ebenfalls
für sich ein, so dass eine Reaktion auf Events nicht möglich ist. Es sei denn, die Funktion
DoEvents kommt zum Einsatz. Wie es ihr Namen schon ausdrückt, erlaubt sie die Reaktion
des Betriebssystems auf Ereignisse während einer Funktions- oder Prozedurausführung. Dazu
wird die Programmsteuerung an das Betriebssystem übergeben, so dass diese auf anstehende
Ereignisse reagieren kann. Nach der Abarbeitung der Events wird die Durchführung
fortgesetzt.
Als Beispiel positionieren wir auf einem Arbeitsblatt fünf Schaltflächen. Die erste Schalt-
fläche cmdStart setzt die globale Boolesche Variable
1.7 Hilfsprozeduren 67

Public bWarten As Boolean

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.

1.7.4 Wartezeiten in Prozeduren planen


Ein anderer Eingriff in die Ablaufsteuerung einer Prozedur ist die boolesche Funktion Wait.
Mit ihrem Auftreten wird die Durchführung für eine vorgegebene Zeit angehalten. Ihre Syntax
Application.Wait(Time)

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

1.7.5 Zyklische Jobs konstruieren


Wieder ein anderer Eingriff in die Ablaufsteuerung ist der zyklische Aufruf einer Prozedur.
Die Anwendungs-Methode OnTime macht es möglich. Ihr Aufruf bewirkt, dass zu einem
bestimmten Zeitpunkt (in der Zukunft) eine Prozedur aufgerufen wird. Ihre Syntax lautet
Application.OnTime(FrühesteZeit, Prozedur, SpätesteZeit, Zeitplan)

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

Private Sub CyclicJobStart()


bStart = True
Call CyclicTimeJob
End Sub
1.7 Hilfsprozeduren 69

Private Sub CyclicJobEnd()


Application.OnTime EarliestTime:=dStartTime, _
Procedure:="CyclicTimeJob", Schedule:=False
End Sub

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

1.7.6 Informationen zum Datentyp


Die logischen Funktionen unter Kapitel 1.3.7 mit der Namenspräfix Is… liefern eine Aussage
zu einem bestimmten Datentyp mit den booleschen Werten True oder False. VBA stellt aber
zusätzlich die Funktionen TypeName und VarType zur Verfügung, mit denen wir genauere
Informationen erhalten.
70 1 Einführung in VBA

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

Tabelle 1-17 Wichtige Rückgabewerte der VarType-Funktion

Wert Konstante Beschreibung Wert Konstante Beschreibung


0 vbEmpty Nicht initialisiert 1 vbNull Kein gültiger Wert
2 vbInteger Ganzzahl 3 vbLong Lange Ganzzahl
4 vbSingle Kurze Dezimalzahl 5 vbDouble Lange Dezimalzahl
6 vbCurrency Währungswert 7 vbDate Datumswert
8 vbString Text 9 vbObject Objekt
10 vbError Fehlerwert 11 vbBoolean Logischer Wert
12 vbVariant Variant 13 vbDataObject Datenzugriff
17 vbByte Byte 8192 vbArray Array

Der Rückgabewert bei einem Array bestimmt sich wie folgt:


VarType(array) + VarType(array-element)

Beispiel für den Rückgabewert eines Integer-Arrays:


(Vartype(array) = 8192) + (VarType(integer) = 2) = 8194
71

2 Aufgaben und Ziele


Der Begriff Controlling kommt von dem englischen Verb to control und kann mit steuern,
lenken, beherrschen, kontrollieren, regeln oder überwachen übersetzt werden. Mit der
Industrialisierung beginnt auch die Geschichte des Controllings.

2.1 Controlling und Excel


2.1.1 Die Entstehung des Controllings
In den dreißiger Jahren des zwanzigsten Jahrhunderts waren in den großen US-Unternehmen
bereits Controller im Einsatz. Ihre Aufgaben waren zukunftsorientierte Analysen und
Beratungsfunktionen zur Bewältigung von Koordinierungsaufgaben. Da die Daten meist aus
dem Rechnungswesen kamen, wurden sie diesem Bereich oft übergeordnet. Die Gründung des
„Controllers Institute of America“ im Jahre 1931 etablierte den Berufsstand endgültig.
In Deutschland wurden erste Controller mit dem Wirtschaftsaufschwung in den sechziger
Jahren eingesetzt. Auch in Deutschland wurden einige Controlling-Organisationen gegründet,
wie z. B. der Controller Verein e. V., die Controller-Akademie in Köln, u.a.
Die Rolle des Controllers unterlag seither einem ständigen Wandel. War er am Anfang ein
Registrator, der Zahlen sammelte, sie auswertete und präsentierte, so kam die Rolle eines
Navigators hinzu, mit handlungs- und zukunftsorientierten Aufgaben. Ein Controller versteht
sich heute als Berater für Vorstand, Unternehmensleitung und Führung (Bild 2-1). Seine
Kernaufgabe ist es dazu beizutragen, dass ein Unternehmen möglichst wirtschaftlich arbeitet.
Dazu existiert in der Regel ein internes Planungs- und Berichtswesen, das ständig der
Unternehmensentwicklung angepasst wird.

Bild 2-1
Schnittmenge zwischen
Manager und Controller

2.1.2 Die Entstehung von Excel


Die erste elektronische Tabelle entwickelte 1979 ein Harvard Student namens Dan Bricklin
und nannte sie VisiCalc. Eine Weiterentwicklung war das Programm Multiplan, bevor daraus
1987 die Firma Microsoft die erste Excel-Version auf den Markt brachte.
Damit können
 Berechnungen nach algebraischen Regeln durchgeführt werden
 Daten gesammelt und nach verschiedenen Kriterien gefiltert und sortiert werden
 Daten mithilfe von Grafiken und Diagrammen visualisiert werden
 Datenbereiche mithilfe umfangreicher Funktionen analysiert werden
 unzählige Mustervorlagen genutzt werden
Diese Aufgaben hat ein Controller täglich zu absolvieren. Kein Wunder also, dass Excel sehr
schnell zu deren Werkzeug wurde und heute aus dem Berufsalltag eines Controllers nicht

© 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.

2.2 Aufgaben des Controllings


Es gibt noch immer keine einheitliche allgemeingültige Definition des Controllings, zumal
zwischen wissenschaftlicher Beschreibung und praktizierten Aufgaben erhebliche
Unterschiede bestehen.
Für den Einsatz und das Wirken des Controllings werden zwei Ausrichtungen unterschieden,
das strategische und das operative Controlling (Tabelle 2-1). Eine strenge Trennung ist aber
nicht immer möglich, denn sie arbeiten gleichzeitig und in Wechselwirkung. Vereinfacht
durchläuft das Controlling einen ständigen Regelkreis.
Tabelle 2-1 Abgrenzung der Controlling Bereiche

Strategisches Controlling Operatives Controlling


Ausrichtung auf Chancen / Risiken Kosten / Aufwand
Information aus externen Analysen und internen Szenarien internen Analysen
Ziele fördern Existenz & Erfolg Rentabilität & Gewinn
Zeitraum langfristig kurzfristig
Ergebnisse Prognosen Reports

2.2.1 Aufgaben des strategischen Controllings


Das strategische Controlling zielt auf längerfristige Ziele eines Vorhabens, wie die nachhaltige
Existenzsicherung eines Unternehmens, die dauerhafte Verwendung erreichter Projektziele,
etc. Es unterstützt das Management in seinen Entscheidungen durch Prognosen. Die Methoden
sind daher eher bereichsorientiert:
 Umfangsmanagement
 Personalmanagement
 Qualitätsmanagement
 Kostenmanagement
 Risikomanagement
 Projektmanagement
 Beschaffungsmanagement
 Zeitmanagement
 usw.
Neben den Standardfunktionen verwendet das strategische Controlling Methoden, die sich
universell für verschiedenste Analysen einsetzen lassen.
Beispiele dafür sind
2.2 Aufgaben des Controllings 73

 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.

2.2.2 Aufgaben des operativen Controllings


Das operative Controlling umfasst Maßnahmen der kurzfristigen Planung, Kontrolle und
Steuerung. In der Literatur wird an erster Stelle immer noch die Funktion der Kontrolle in den
Vordergrund gestellt. Dabei bildet eher ein kybernetisches Modell aus Zielsetzung, Planung,
Kontrolle und Feedback die Grundlage (Bild 2-2).

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

Typische Instrumente sind Prozesskostenrechnungen und Kennzahlen. Bei der


Prozesskostenrechnung werden die in den Kostenstellen eines Unternehmens durchgeführten
Aufgaben in Aktivitäten zerlegt und den sogenannten Kostentreibern zugeordnet. Die so
entstandenen Prozesskostensätze sind ein Schlüssel für die Umlage der Gemeinkosten.
Mit Kennzahlen wird die Effizienz von Prozessen gemessen und Schwachstellen aufgedeckt.
Zu den häufigsten Kennzahlen gehören:
2.2 Aufgaben des Controllings 75

 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.

Bild 2-5 Prozess vs. Projekt

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

Im Projekt-Controlling werden ebenfalls die zwei Bereiche strategisches und operatives


Controlling unterschieden.
76 2 Aufgaben und Ziele

 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.

2.3 Zielbestimmung im Controlling


Was nicht gemessen wird, kann nicht gesteuert werden. Diese wichtige Aussage findet sich in
der Literatur an vielen Stellen. Ziele müssen demnach so formuliert werden, dass sie auch
messbar sind. Nachfolgend betrachten wir Methoden, die eine Zielfindung unterstützen
können.
2.3.1 Die Marktanalyse
Bei der Marktanalyse handelt es sich um eine Informationsrecherche, die aussagefähige Daten,
Fakten und Beispiele zu gestellten Fragen zusammenträgt. Die Informationen stammen aus
der Vergangenheit, aus der Gegenwart und sollten Prognosen für die Zukunft zulassen. Die
Fragen beziehen sich auf Zielgruppen, Wettbewerber, Marktanteile, u.v.a. Damit die Analyse
übersichtlich bleibt, müssen die Informationen hinterfragt werden:
 Sind die Daten relevant für die Analyse?
 Welcher Zeitraum findet Beachtung?
 Wie detailliert müssen sie sein?
 Sind die Daten glaubwürdig?
Die Durchführung erfolgt in nachfolgenden Schritten:
1. Ziele formulieren und daraus Fragen ableiten
2. Marktabgrenzung bestimmen und Zusammenhänge beschreiben
3. Methodik und Instrumente der Vorgehensweise festlegen
4. Zeiten und Ressourcen bestimmen
5. Datenerhebung durchführen, aufbereiten und analysieren
6. Report erstellen
Als Beispiel betrachten wir eine Marktanalyse, die die Frage stellt, wie häufig bestimmte
Systeme genutzt werden.

 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

Tabelle 2-2 Bereichsnamen und Formeln für die Marktanalyse

Range Bereichsname Formel


B2:B8 intensiv
C2:C8 gelegentlich
D2:D8 selten
E2:E8 nie =1-intensiv-gelegentlich-selten

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

 Eine beliebige Zelle der Datentabelle markieren


 Im Register Einfügen, in der Gruppe Diagramme das Gestapelte Balkendiagramm
auswählen
 Eventuell über das Kontextmenü Balkenbreite und Farben ändern

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"

'Excel Objekte instanziieren


Set exlBook = ThisWorkbook
Set exlSheet = exlBook.ActiveSheet

'PP Objekte instanziieren


Set pptApp = CreateObject("PowerPoint.Application")
With pptApp
.Visible = msoTrue
.WindowState = 1
.Activate
'PP öffnen oder erstellen
If sPath = "" Then
Set pptShow = .Presentations.Add
2.3 Zielbestimmung im Controlling 79

Else
If Dir(sPath) = "" Then
Set pptShow = .Presentations.Add
Else
Set pptShow = .Presentations.Open(sPath, msoFalse)
End If
End If
End With

'neue Folie als letzte Folie erstellen


'Layout und Namen zuweisen
Set pptSlide = pptShow.Slides.AddSlide( _
pptShow.Slides.Count + 1, _
pptShow.SlideMaster.CustomLayouts(6))
pptSlide.Shapes(1).TextFrame.TextRange = exlSheet.Name
pptSlide.Select

'Datentabelle übertragen
exlSheet.Range("Daten[#All]").Select
Selection.Copy
pptShow.Application.ActiveWindow.View.Paste

'neue Folie als letzte Folie erstellen


'Layout und Namen zuweisen
Set pptSlide = pptShow.Slides.AddSlide( _
pptShow.Slides.Count + 1, _
pptShow.SlideMaster.CustomLayouts(6))
pptSlide.Select

'Chart übertragen
pptSlide.Shapes(1).TextFrame.TextRange = exlSheet.Name
exlSheet.ChartObjects(1).Copy
pptShow.Application.ActiveWindow.View.Paste

'PP speichern und schließen


pptShow.SaveAs (sPath)
pptApp.Quit
Set exlBook = Nothing
Set exlSheet = Nothing
Set pptShow = Nothing
Set pptApp = Nothing
End Sub

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

1. Bestimmung des Marktes nach Art und Ausweitung


2. Festlegung, welche Aspekte des Marktes untersucht werden sollen
3. Wo und wie sollte die Befragung durchgeführt werden
4. Festlegung der Stichprobengröße
5. Liste der Fragen erstellen
6. Umfrage durchführen und Antworten analysieren
7. Methode der Repräsentation wählen
Als Anwendungsbeispiel betrachten wir eine Marktbefragung zur Verwendung eines
bestimmten Produkts.

 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).

Bild 2-9 Vor- und Nachteile einer Produktanwendung nach Regionen

Zur Visualisierung verwenden wir den Diagrammtyp Linie mit Datenpunkten, der sich
besonders zum Vergleich von zwei und mehr Wertepaaren eignet (Bild 2-10).

Bild 2-10 Visualisierung der Argumente zur Produktverwendung

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

Codeliste 2-2 Word Report aus Excel erstellen


Sub ReportInWord()
Dim exlBook As Excel.Workbook
Dim exlSheet As Excel.Worksheet
Dim exlList As Excel.ListObject
Dim appWord As Object
Dim docTmp As Object
Dim sPath As String
Dim iCount As Integer

'Excel Objekte instanziieren


Set exlBook = ThisWorkbook
Set exlSheet = exlBook.ActiveSheet

'Word Objekte instanziieren


Set appWord = CreateObject("Word.Application")
With appWord
Set docTmp = .Documents.Add
.Selection.Typetext _
Text:="REPORT MARKTBEFRAGUNG" & vbCrLf & vbCrLf
.Selection.Typetext _
Text:=vbCrLf & vbCrLf
.Selection.Typetext _
Text:="Datum " & Date & vbCrLf & vbCrLf

'Tabellen und Diagramme übertragen


iCount = 0
For Each exlList In exlSheet.ListObjects
.Selection.InsertBreak
exlList.Range.Copy
docTmp.PageSetup.Orientation = 1
.Selection.Paste
.Selection.Typetext Text:=vbCrLf & vbCrLf
iCount = iCount + 1
exlSheet.ChartObjects(iCount).Copy
docTmp.PageSetup.Orientation = 1
.Selection.Paste
.Selection.Typetext Text:=vbCrLf & vbCrLf
Next

'Report Dokument speichern


sPath = "C:\Temp\Report.docx"
docTmp.saveas2 Filename:=sPath
.Quit
End With

Set exlBook = Nothing


Set exlSheet = Nothing
Set appWord = Nothing
Set docTmp = Nothing
End Sub
82 2 Aufgaben und Ziele

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

'Excel Objekte instanziieren


Set exlBook = ThisWorkbook
Set exlSheet = exlBook.ActiveSheet

'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

Set exlBook = Nothing


Set exlSheet = Nothing
End Sub

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

Zur Ausgangssituation liegen erreichte Umsätze vor (Bild 2-11).

Bild 2-11 Beispiel realisierter Umsätze zweier Produkte

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).

Bild 2-12 Beispiel realisierter und vorhergesagter Umsätze zweier Produkte

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

Bild 2-16 Beispiel realisierter und vorhergesagter Umsätze zweier Produkte

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

Range Bereichsname Formeln Bemerkung


B2:G2 Halbjahr1
B3:G3 ProduktA
B5:G5 ProduktB
H4 =TREND(ProduktA;Halbjahr1;H2) Nach M4 ziehen
H6 =TREND(ProduktB;Halbjahr1;H2) Nach M6 ziehen

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-18 Beispielwerte möglicher Anweichungen von den Prognosedaten

Mit folgenden Schritten werden die Fehlerindikatoren (Bild 2-19) erzeugt:


 Klick auf die Datenlinie Planung A.
 Rechts neben dem Diagramm auf die + Schaltfläche klicken.
 Auswahl Fehlerindikatoren markieren und den Pfeil nach rechts anklicken.
 In der Liste Weitere Optionen wählen.
 Im Fenster für Fehlerindikatoren einstellen:
 Richtung: Beide
 Linienende: Mit Abschluss
 Fehlerbetrag. Benutzerdefiniert und Wert angeben
 Im Fenster Benutzerdefinierte Fehlerindikatoren als positiven Fehlerwert den
Bereich B7:M7 angeben.
 Genauso mit der Datenlinie Planung B verfahren und den Bereich B8:M8 wählen.

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

Syntax zur VARIATION-Funktion:


=VARIATION(Y_Werte;X_Werte;Neue_X_Werte;Konstante)
Diese Funktion bestimmt einen exponentiellen Trend. Auch hier ist die Konstante ein
Wahrheitswert, der mit 1 den normalem b-Wert in der Gleichung y = b · mx anwendet und mit
0 wird b = 1 gesetzt, so dass dann die Formel y = mx lautet.

 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

Range Formeln Übertragen nach


E2 =WENN(C2="";TREND($E1:E$2;$A1:A$2;A2);C2) E3:E13
F2 =WENN(C2="";SCHÄTZER(A2;$F1:F$2;$A1:A$2);C2) F3:F13
G2 =WENN(C2="";VARIATION($G1:G$2;$A1:A$2;A2);C2) G3:G13
H2 =WENN(C2="";MITTELWERT($H1:H$2)*(B2/B1);C2) H3:H13

Die Spalte H nutzt den Mittelwert des Plananstiegs.


2.3.4 Wertschöpfungskette
Die Wertschöpfungskette, auch kurz als Wertkette bezeichnet, wurde erstmals 1985 von dem
amerikanischen Betriebswirt Michael E. Porter in seinem Buch Competitive Advantage
verwendet. Eine Wertschöpfungskette ist die Darstellung zusammenhängender
Unternehmensaktivitäten eines betrieblichen Gütererstellungsprozesses. Zur Visualisierung
wird oft ein Wertschöpfungskettendiagramm verwendet.
88 2 Aufgaben und Ziele

 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

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.ActiveSheet

'vorhandene Shapes löschen


For Each shpTemp In wshTemp.Shapes
shpTemp.Delete
Next
'neue Shapes erzeugen
lTop = 100
lPosX = 10
lHeight = 80
For iRow = 2 To wshTemp.UsedRange.Rows.Count
lLeft = lPosX
lWidth = wshTemp.Cells(iRow, 2) / 20
lPosX = lPosX + lWidth
Set shpTemp = wshTemp.Shapes.AddShape _
(msoShapePentagon, lLeft, lTop, lWidth, lHeight)
With shpTemp
.TextEffect.Text = ActiveSheet.Cells(iRow, 1) & _
vbCr & ActiveSheet.Cells(iRow, 2) & " Euro"
.Fill.ForeColor.RGB = RGB(0, 110, 190)
.Fill.BackColor.RGB = RGB(170, 170, 170)
.Fill.Solid
2.3 Zielbestimmung im Controlling 89

.Shadow.Type = msoShadow21
End With
Set shpTemp = Nothing
Next iRow
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

Bild 2-22 Beispiel eines Wertschöpfungsketten-Diagramms

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

Das nachfolgende Beispiel zeigt Erfolgsaussichten, Risiken und Kosten unterschiedlicher


Lösungswege (Bild 2-23).

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

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
'Blasendiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(269, xlBubble)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=Range("Machbarkeitsstudie!$B$1:$D$6")
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Machbarkeitsstudie"
With .ChartTitle.Format.TextFrame2.TextRange
.Font.Size = 16
.Font.Fill.Solid
.Font.Bold = msoTrue
End With
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Erfolgsaussicht [%]"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Risiko [%]"
'Legende ausblenden
2.3 Zielbestimmung im Controlling 91

.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

Range Bereichsname Formeln


A2:A10 ZielNr
B2:B10 Anteil
D2:K9 Wichtung
B2:B10 =ZÄHLENWENN(Wichtung;ZielNr)

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

Codeliste 2-6 Kreisdiagramm erstellen


Sub CreateKreisdiagramm()
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

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
wshTemp.DrawingObjects.Delete
'Datenbereich bestimmen
Set rngDaten = wshTemp.Range("Anteil")
'Kreisdiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(262, xl3DPie)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngDaten
2.3 Zielbestimmung im Controlling 93

.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

Bereich Regel Format


=$D$2:$K$10 =UND(D2=$L$1;$L$1>0) AaBbCcYyZz

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

Codeliste 2-9 Ereignisprozedur UserForm_Activate in frmAnzeige


Private Sub UserForm_Activate()
Application.Wait Now() + TimeSerial(0, 0, 3)
Unload Me
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

'Excel Objekte instanziieren


96 2 Aufgaben und Ziele

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.ActiveSheet
wshTemp.Cells(1, 1).Select
'Paretodiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(366, xlPareto)
Set chrTemp = shpTemp.Chart
Set rngDaten = Range("A1:C8")
With chrTemp
'Diagrammtitel
sTitel = wshTemp.Cells(1, 2)
.HasTitle = True
.ChartTitle.Text = sTitel & " im Pareto-Diagramm"
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
'Achsenbeschriftung
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Caption = _
"Ziele"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Caption = _
sTitel
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
'Spalte B und C tauschen
With wshTemp
.Columns("C:C").Select
Selection.Cut
.Columns("B:B").Select
Selection.Insert Shift:=xlToRight
'Löschen vorhandener Diagramme
For Each shpTemp In ActiveSheet.Shapes
shpTemp.Delete
Next shpTemp
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
Call CreateParetodiagramm
End Sub
2.3 Zielbestimmung im Controlling 97

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

Alternativen zu den Pareto-Diagrammen sind gruppierte Säulendiagramme (Bild 2-31 und


Bild 2-32).

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

2.3.8 Ziele definieren


Die Aktivitäten zum Erreichen definierter Ziele stehen in einem Spannungsverhältnis von
Zeit, Kosten und Qualität (Bild 2-33) und man spricht vom Magischen Dreieck. Sie
beeinflussen sich gegenseitig, so dass die Zielgrößen gegeneinander abgewogen werden
müssen, um mögliche Konflikte zu vermeiden.

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

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
wshTemp.Cells(1, 1).Select
'Paretodiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(201, xlColumnClustered)
Set chrTemp = shpTemp.Chart
With chrTemp
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Ziele-Klassifizierung"
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
wshTemp.Cells(1, 1).Select
'Paretodiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(317, xlRadar)
Set chrTemp = shpTemp.Chart
With chrTemp
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Ziele-Klassifizierung"
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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.

Tabelle 3-1 Liste der wichtigsten Grundfunktionen

Excel-Funktion VBA- Anwendung


Anweisung
WENN IF Bedingte Ausführung, ist das Ergebnis der
Bedingung wahr, wird die Dann-Anweisung,
sonst die Sonst-Anweisung ausgeführt
UND AND Zusammenfassung mehrerer Bedingungen, das
Ergebnis ist wahr, wenn alle Bedingungen
erfüllt sind
ODER OR Zusammenfassung mehrerer Bedingungen, das
Ergebnis ist wahr, wenn nur eine Bedingung
erfüllt ist
BEREICH.VERSCHIEBEN OFFSET verschieb Formelbereiche
MIN MIN bestimmt den kleinsten Wert aus einem Bereich
von Zahlen
MAX MAX bestimmt den größten Wert aus einem Bereich
von Zahlen
Syntax zur WENN-Funktion:
=WENN(Prüfung;DannWert;SonstWert)
Aufgabe zur WENN-Funktion:
Ein Controller prüft, ob der Mindestumsatz im Monat erreicht wurde (Bild 3-1). Dazu
verwendet er die WENN-Funktion und trägt in die Überwachungszelle "Ziel erreicht", bzw.
"Ziel verfehlt" ein.

© 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

Tabelle 3-2 Bereichsnamen und Formeln im Worksheet WENN

Bereich Bereichsname Formel


B6:D6 Gesamtumsatz
A9 Bedingung Benutzerdefiniertes Format: "Gesamtumsatz > "#.##0" €"
B9:D9 =WENN(Gesamtumsatz>55000;“Ziel erreicht“;“Ziel verfehlt“)

Als sogenanntes „Helferchen“ steht im Modul modDelete eine Prozedur zur Löschung aller
Bereichsnamen in der aktuellen Arbeitsmappe.

Codeliste 3-1 Prozedur löscht alle Bereichsnamen im aktuellen Workbook


Sub NamenDelete()
Dim Temp
On Error Resume Next
For Each Temp In ActiveWorkbook.Names
Temp.Delete
Next
End Sub

Die jeweiligen Worksheets beinhalten die Prozeduren zur Namensvergabe, zur


Formelerstellung und alternativ zur Wertbestimmung. Vor jedem Aufruf sollten alle
Bereichsnamen gelöscht werden (Prozedur NamenDelete).

Codeliste 3-2 Prozeduren im Worksheet WENN


Private Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Gesamtumsatz", RefersTo:=Range("WENN!B6:D6")
.Add Name:="Bedingung", RefersTo:=Range("WENN!A9")
End With
End Sub

Private Sub FormelnSchreiben()


Range("B9:D9").FormulaR1C1 = _
"=IF(Gesamtumsatz>Bedingung,""Ziel erreicht"", _
""Ziel verfehlt"")"
End Sub
3.1 Grundfunktionen 105

Private Sub WerteZuweisen()


Range("B9:D9") = Evaluate _
("=IF(Gesamtumsatz>Bedingung,""Ziel erreicht"", _
""Ziel verfehlt"")")
End Sub

Syntax zur UND-Funktion:


=UND(Wahrheitswert1;Wahrheitswert2;...)
Aufgabe zur UND-Funktion:
Ein Controller soll die Umsätze eines Verkäufers in einem Vertriebsgebiet aus der
Auftragsliste ermitteln (Bild 3-2). Hierzu fügt er in der Spalte Bemerkung der Liste die
Aussage "gefunden" ein, um im Anschluss mit der Funktion SUMMEWENN die Umsätze zu
summieren, die das Kriterium "gefunden" erfüllen. Um die Markierung zu erstellen, setzt er
eine WENN-Funktion ein, welche in der Prüfung die UND-Funktion enthält, die beide
Kriterien Gebiet und Verkäufer abgleicht.

Bild 3-2
Verkaufsumsätze

Tabelle 3-3 Bereichsnamen und Formeln im Worksheet UND

Bereich Bereichsname Formel


A2:A10 Gebiet
B2:B10 Verkäufer
C2:C10 Umsatz
D2:D10 Bemerkung =WENN(UND(Gebiet=Gebiet1;Verkäufer=Verkäufer1);
"gefunden";"")
B13 Gebiet1
B14 Verkäufer1
B15 =SUMMEWENN(Bemerkung;"gefunden";Umsatz)
106 3 Wichtige Funktionen

Codeliste 3-3 Prozeduren im Worksheet UND


Private Sub NamenVergeben()
Call NamesDelete
With ActiveWorkbook.Names
.Add Name:="Gebiet", RefersTo:=Range("UND!A2:A10")
.Add Name:="Verkäufer", RefersTo:=Range("UND!B2:B10")
.Add Name:="Umsatz", RefersTo:=Range("UND!C2:C10")
.Add Name:="Bemerkung", RefersTo:=Range("UND!D2:D10")
.Add Name:="Gebiet1", RefersTo:=Range("UND!B13")
.Add Name:="Verkäufer1", RefersTo:=Range("UND!B14")
End With
End Sub
Private Sub FormelnSchreiben()
Range("D2:D10").FormulaR1C1 = _
"=IF(AND(Gebiet=Gebiet1,Verkäufer=Verkäufer1), _
""trifft zu"","""")"
Range("B15").FormulaR1C1 = "=SUMIF(Bemerkung,""gefunden"",Umsatz)"
End Sub
Private Sub WerteZuweisen()
Dim iRow As Integer
For iRow = 2 To 10
If Cells(iRow, 1) = Cells(13, 2) And _
Cells(iRow, 2) = Cells(14, 2) Then
Cells(iRow, 4) = "trifft zu"
Else
Cells(iRow, 4) = ""
End If
Next iRow
Range("B15") = Evaluate("=SUMIF(Bemerkung,"“gefunden"",Umsatz)")
End Sub

Syntax zur ODER-Funktion:


=ODER(Wahrheitswert1;Wahrheitswert2;...)
Aufgabe zur ODER-Funktion:
Ein Controller soll den Gesamtumsatz (Bild 3-3) der Regionen Nord und Ost ermitteln.

Bild 3-3
Gebietsumsätze
3.1 Grundfunktionen 107

Tabelle 3-4 Bereichsnamen und Formeln im Worksheet ODER

Bereich Bereichsname Formel


A2:A10 Gebiet
B2:B10 Umsatz
C2:C10 Bemerkung =WENN(ODER(Gebiet=Gebiet1;Gebiet=Gebiet2); "gefunden";"")
B13 Gebiet1
B14 Gebiet2
B15 =SUMMEWENN(Bemerkung;"gefunden";Umsatz)

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.

Codeliste 3-4 Prozeduren im Worksheet ODER


Private Sub NamenVergeben()
Call NamesDelete
With ActiveWorkbook.Names
.Add Name:="Gebiet", RefersTo:=Range("ODER!A2:A10")
.Add Name:="Umsatz", RefersTo:=Range("ODER!B2:B10")
.Add Name:="Bemerkung", RefersTo:=Range("ODER!C2:C10")
.Add Name:="Gebiet1", RefersTo:=Range("ODER!B13")
.Add Name:="Gebiet2", RefersTo:=Range("ODER!B14")
End With
End Sub

Private Sub FormelnSchreiben()


Range("C2:C10").FormulaR1C1 = _
"=IF(OR(Gebiet=Gebiet1,Gebiet=Gebiet2),""relevant"","""")"
Range("B15").FormulaR1C1 = "=SUMIF(Bemerkung,""relevant"",Umsatz)"
End Sub

Private Sub WerteZuweisen()


Dim iRow As Integer
For iRow = 2 To 10
If Cells(iRow, 1) = Cells(13, 2) Or _
Cells(iRow, 1) = Cells(14, 2) Then
Cells(iRow, 3) = "relevant"
Else
Cells(iRow, 3) = ""
End If
Next iRow
Range("B15") = Evaluate("=SUMIF(Bemerkung,""relevant"",Umsatz)")
End Sub
108 3 Wichtige Funktionen

Syntax zur BEREICH.VERSCHIEBEN-Funktion:


=BEREICH.VERSCHIEBEN(Bezug;Zeilen;Spalten;Höhe;Breite)
Aufgabe zur BEREICH.VERSCHIEBEN-Funktion:
Ein Controller möchte eine Summenfunktion (Bild 3-4) auf einen bestimmten Bezug
verschieben. Im ersten Beispiel soll die Summenfunktion in Abhängigkeit des Monats
verschoben werden. Im zweiten Beispiel soll eine weitere Summenfunktion in Abhängigkeit
der Warengruppe verschoben werden. Es könnten auch beide Funktionen kombiniert werden.

Bild 3-4
Warengruppenumsätze

Tabelle 3-5 Bereichsnamen und Formeln im Worksheet BEREICH.VERSCHIEBEN

Bereich Bereichsname Formel


A2:A5 Warengruppe
B1:D1 Quartal
B8 Monat
B12 Position
B9 =SUMME(BEREICH.VERSCHIEBEN(Warengruppe;;Monat))
B13 =SUMME(BEREICH.VERSCHIEBEN(Quartal;Position;))

Codeliste 3-5 Prozeduren im Worksheet BEREICH.VERSCHIEBEN


Private Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Warengruppe", RefersTo:=Range("B2:B5")
.Add Name:="Quartal", RefersTo:=Range("C1:E1")
.Add Name:="Monat", RefersTo:=Range("C8")
.Add Name:="Position", RefersTo:=Range("C12")
End With
End Sub
3.1 Grundfunktionen 109

Private Sub FormelnSchreiben()


Range("C9").FormulaR1C1 = "=SUM(OFFSET(Warengruppe,,Monat))"
Range("C13").FormulaR1C1 = "=SUM(OFFSET(Quartal,Position,))"
End Sub

Private Sub WerteZuweisen()


Range("C9") = Evaluate("=SUM(OFFSET(Warengruppe,,Monat))")
Range("C13") = Evaluate("=SUM(OFFSET(Quartal,Position,))")
End Sub

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

 Das Arbeitsblatt befindet sich im Entwurfsmodus, zu erkennen an der grauen Fläche


gleichen Namens in der Registergruppe Steuerelemente.
 In der Registergruppe Steuerelemente die Methode Eigenschaften wählen
 Im Fenster Eigenschaften folgende Werte einstellen:
 LinkedCell: Monat
 Max: 3
 Min: 1
 SmallChange: 1
 Das Eigenschaftsfenster schließen und in der Registergruppe Steuerelemente den
Entwurfsmodus durch Anklicken ausschalten
Nun ist das Drehfeld mit der Zelle Monat im Arbeitsblatt verlinkt und jedes Anklicken des
Drehfeldes setzt den Wert in Monat nach oben bzw. unten. Alles im Bereich zwischen Min = 1
und Max = 3. Die Schrittweite wurde in SmallChange auf 1 gesetzt.
Ein weiteres Drehfeld für die Warengruppen-Position, erstellt nach dem gleichen Prinzip,
erlaubt die Wahl von Min = 1 bis Max = 4.
110 3 Wichtige Funktionen

Syntax zur MIN-Funktion:


=MIN(Zahl1;Zahl2;...)
Aufgabe zur MIN-Funktion:
Ein Controller soll Folgendes bestimmen (Bild 3-6):
 in der Summe die am wenigsten verkaufte Menge eines Produktes
 die geringste Menge der Produkte 1 und 3
 die geringste Menge bei einer Verkaufsmenge über 300 Stück

Bild 3-6
Produktmengen mit
MIN

Tabelle 3-6 Bereichsnamen und Formeln im Worksheet MIN

Bereich Bereichsname Formel


B2:D13 Mengen
B2:B13 Produkt1
C2:C13 Produkt2
D2:D13 Produkt3
B16 =MIN(Mengen)
B17 =MIN(Produkt1;Produkt3)
B18 {=MIN(WENN(Mengen>300;Mengen))}

Codeliste 3-6 Prozeduren im Worksheet MIN


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Mengen", RefersTo:=Range("B2:D13")
3.1 Grundfunktionen 111

.Add Name:="Produkt1", RefersTo:=Range("B2:B13")


.Add Name:="Produkt2", RefersTo:=Range("C2:C13")
.Add Name:="Produkt3", RefersTo:=Range("D2:D13")
End With
End Sub

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

Syntax zur MAX-Funktion:


=MAX(Zahl1;Zahl2;...)
Aufgabe zur MAX-Funktion:
Dem Controller liegt eine Liste (Bild 3-7) mit Stückzahlen und folgenden Aufgaben vor:
 größte Stückzahl aus der gesamten Liste bestimmen, um somit das leistungsstärkste
Produkt zu finden
 die größte verkaufte Menge bei den Produkten P1 und P3 ermitteln
 die größte Menge unter 300 Stück bestimmen (diesen Schritt mithilfe einer WENN-
Funktion als Matrix-Funktion umsetzen)
 den größten Wert zwischen 650 und 830 bestimmen

Bild 3-7
Produktmengen
mit MAX
112 3 Wichtige Funktionen

Tabelle 3-7 Bereichsnamen und Formeln im Worksheet MAX

Bereich Bereichsname Formel


B2:D13 Mengen
B2:B13 Produkt1
C2:C13 Produkt2
D2:D13 Produkt3
B16 =MAX(Mengen)
B17 =MAX(Produkt1;Produkt3)
B18 {=MAX(WENN(Mengen<300;Mengen))}
B19 {=MAX(WENN(Mengen>=650;WENN(Mengen<=830;
Mengen);))}

Codeliste 3-7 Prozeduren im Worksheet MAX


Sub NamenVergeben()
With ActiveWorkbook.Names
.Add Name:="Mengen", RefersTo:=Range("B2:D13")
.Add Name:="Produkt1", RefersTo:=Range("B2:B13")
.Add Name:="Produkt2", RefersTo:=Range("C2:C13")
.Add Name:="Produkt3", RefersTo:=Range("D2:D13")
End With
End Sub
Sub FormelnSchreiben()
Range("B16").FormulaR1C1 = "=MAX(Mengen)"
Range("B17").FormulaR1C1 = "=MAX(Produkt1,Produkt3)"
Range("B18").FormulaArray = "=MAX(IF(Mengen<500,Mengen))"
End Sub
Sub WerteZuweisen()
Range("B16") = Evaluate("=MAX(Mengen)")
Range("B17") = Evaluate("=MAX(Produkt1,Produkt3)")
Range("B18") = Evaluate("=MAX(IF(Mengen<500,Mengen))")
End Sub

3.2 Summenfunktionen
Tabelle 3-8 Liste der wichtigsten Summenfunktionen

Excel-Funktion VBA-Anweisung Anwendung


SUMME SUM Summe einzelner Zahlen oder ganzer Bereiche
SUMMEWENN SUMIF Summe in Abhängigkeit von einem Kriterium
SUMMEWENNS SUMIFS Summe in Abhängigkeit mehrerer Kriterien
DBSUMME DSUM Summe in Abhängigkeit mehrerer DB-Kriterien
3.2 Summenfunktionen 113

Syntax zur SUMME-Funktion:


=SUMME(Zahl1;Zahl2;...)
Aufgabe zur SUMME-Funktion:
Ein Controller soll den Gesamtumsatz aus den Umsätzen einzelner Warengruppen (Bild 3-8)
bestimmen.

Bild 3-8
Warengruppenumsätze

Tabelle 3-9 Bereichsnamen und Formeln im Worksheet SUMME

Bereich Bereichsname Formel


B2:B5 Januar
B6 =SUMME(Januar)

Codeliste 3-8 Prozeduren im Worksheet SUMME


Sub NamenVergeben()
With ActiveWorkbook.Names
.Add Name:="Januar", RefersTo:=Range("B2:B5")
End With
End Sub

Sub FormelnSchreiben()
Range("B6").FormulaR1C1 = "=SUM(Januar)"
End Sub

Sub WerteZuweisen()
Range("B6") = Evaluate("=SUM(Januar)")
End Sub

Syntax zur SUMMEWENN-Funktion:


=SUMMEWENN(Bereich;Suchkriterien;SummeBereich)
Aufgabe zur SUMMEWENN-Funktion:
Ein Controller soll aus einer Auftragsliste folgendes bestimmen:
 den Umsatz eines bestimmten Kunden
 wie viel Umsatz mit Aufträgen unter 13.500 € generiert wurden
Zur Lösung werden beide möglichen Versionen der SUMMEWENN-Syntax verwendet. Um
den Umsatz eines bestimmten Kunden zu ermitteln (Bild 3-9), wird die lange Syntaxvariante
benutzt und um den Umsatz mit Aufträgen unter 13.500 € Auftragsvolumen zu ermitteln, wird
die Kurzform herangezogen.
114 3 Wichtige Funktionen

Bild 3-9
Kundenumsätze

Tabelle 3-10 Bereichsnamen und Formeln im Worksheet SUMMEWENN

Bereich Bereichsname Formel


A2:A6 Auftraggeber
B2:B6 Umsatz
B9 Kunde
B10 =SUMMEWENN(Auftraggeber;Kunde;Umsatz)
B11 =SUMMEWENN(Umsatz;"<13500")

Codeliste 3-9 Prozeduren im Worksheet SUMMEWENN


Sub NamenVergeben()
With ActiveWorkbook.Names
.Add Name:="Auftraggeber", RefersTo:=Range("A2:A6")
.Add Name:="Umsatz", RefersTo:=Range("B2:B6")
.Add Name:="Kunde", RefersTo:=Range("B9")
End With
End Sub

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

Syntax zur SUMMEWENNS-Funktion:


=SUMMEWENNS(SummeBereich;Bereich1;Kriterium1;Bereich2;Kriterium2;…)
Aufgabe zur SUMMEWENNS-Funktion:
Ein Controller soll die Umsatzsumme der Firma C (Bild 3-10) in der Schweiz bestimmen.
3.2 Summenfunktionen 115

Bild 3-10
Kunden-
Jahresumsätze

Tabelle 3-11 Bereichsnamen und Formel im Worksheet SUMMEWENNS

Bereich Bereichsname Formel


A2:A9 Kunde
B2:B9 Land
B13 Kunde1
B14 Land1
B15 =SUMMEWENNS(Jahresumsatz;Kunde;Kunde1;Land;Land1)

Codeliste 3-10 Prozeduren im Worksheet SUMMEWENNS


Sub NamenVergeben()
Call NamenDelete

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

Syntax zur DBSUMME-Funktion:


=DBSumme(Datenbank;Datenbankfeld;Suchkriterien)
Aufgabe zur DBSUMME-Funktion:
Es liegen dem Controller die Umsätze des Jahres vor (Bild 3-11). Er möchte den
Gesamtumsatz für Deutschland von den Kunden haben, die mehr als 500.000 Euro Umsatz und
mehr als fünf Aufträge haben.

Bild 3-11
Kunden-
Jahresumsätze

Tabelle 3-12 Bereichsnamen und Formel im Worksheet DBSUMME

Bereich Bereichsname Formel


A1:E9 Datenbank
A12:E13 Kriterien
D1 Suche
D14 =DBSUMME(Datenbank;Suche;Kriterien)

Codeliste 3-11 Prozeduren im Worksheet DBSUMME


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Datenbank", RefersTo:=Range("A1:E9")
.Add Name:="Kriterien", RefersTo:=Range("A12:E13")
.Add Name:="Suche", RefersTo:=Range("D1")
End With
End Sub
Sub FormelnSchreiben()
Range("D14").FormulaR1C1 = _
"=DSUM(Datenbank,Suche,Kriterien)"
End Sub
Sub WerteZuweisen()
Range("D14") = Evaluate("=DSUM(Datenbank,Suche,Kriterien)")
End Sub
3.3 Suchfunktionen 117

3.3 Suchfunktionen
Tabelle 3-13 Liste der wichtigsten Suchfunktionen

Excel-Funktion VBA-Anweisung Anwendung


VERWEIS LOOKUP durchsucht einen Bereich nach einem Zielwert
SVERWEIS VLOOKUP durchsucht eine Spalte nach einem Zielwert
WVERWEIS HLOOKUP durchsucht eine Zeile nach einem Zielwert
VERGLEICH MATCH bestimmt die Position eines Wertes in einer Matrix
INDEX INDEX ermittelt den Wert in einer Matrix nach Zeile und
Spalte
KGRÖSSTE LARGE bestimmt den k größten Wert in einer Matrix
KKLEINSTE SMALL bestimmt den k-kleinsten Wert in einer Matrix

Syntax zur Verweis-Funktion:


Vektorversion:
= VERWEIS(Suchkriterium; Suchvektor; [Ergebnisvektor])
Matrixversion:
= VERWEIS(Suchkriterium; Matrix)
Aufgabe zur VERWEIS-Funktion:
Ein Controller soll am Anfang eines jeden neuen Monat den Umsatz einer Warengruppe vom
Vormonat mit dem Umsatz vom Januar vergleichen (Bild 3-12). Zur Bestimmung des
Umsatzes im Monat Januar wird die Vektorversion verwendet und zur Bestimmung des
Umsatzes vom aktuellen Vormonat die Matrixversion.

Bild 3-12
Umsatz
Warengruppen
118 3 Wichtige Funktionen

Tabelle 3-14 Bereichsnamen und Formel im Worksheet VERWEIS

Bereich Bereichsname Formel


A2:A5 Warengruppe
B2:B5 Januar
B9 Warengruppe1
B10 Monat
B14 Warengruppe2
A2:D5 Matrix
B11 =VERWEIS(Warengruppe1;Warengruppe;Januar)
B15 =VERWEIS(Warengruppe2;Matrix)

Codeliste 3-12 Prozeduren im Worksheet VERWEIS


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Warengruppe", RefersTo:=Range("A2:A5")
.Add Name:="Januar", RefersTo:=Range("B2:B5")
.Add Name:="Warengruppe1", RefersTo:=Range("B9")
.Add Name:="Monat", RefersTo:=Range("B10")
.Add Name:="Warengruppe2", RefersTo:=Range("B14")
.Add Name:="Matrix", RefersTo:=Range("A2:D5")
End With
End Sub

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

Syntax zur SVERWEIS-Funktion:


= SVERWEIS(Suchkriterium; Matrix; Spaltenindex; Bereichsverweis)
Aufgabe zur SVERWEIS-Funktion:
Ein Controller muss für eine Warengruppe (Bild 3-13) deren Umsatz zu einem bestimmten
Monat ermitteln.
3.3 Suchfunktionen 119

Bild 3-13
Umsatz
Warengruppen

Tabelle 3-15 Bereichsnamen und Formel im Worksheet SVERWEIS

Bereich Bereichsname Formel


B9 Warengruppe
A2:D5 Matrix
B10 Monat
B11 =SVERWEIS(Warengruppe;Matrix;Monat+1;FALSCH)

Codeliste 3-13 Prozeduren im Worksheet VERWEIS


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Warengruppe", RefersTo:=Range("B9")
.Add Name:="Matrix", RefersTo:=Range("A2:D5")
.Add Name:="Monat", RefersTo:=Range("B10")
End With
End Sub

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

Syntax zur WVERWEIS-Funktion:


= WVERWEIS(Suchkriterium; Matrix; Spaltenindex; Bereichsverweis)
Aufgabe zur WVERWEIS-Funktion:
Ein Controller muss für eine Warengruppe deren Umsatz zu einem bestimmten Monat
ermitteln (Bild 3-14). Es ist die gleiche Aufgabe wie bei SVERWEIS, allerdings sind die
Zeilen und Spalten vertauscht.
120 3 Wichtige Funktionen

Bild 3-14
Umsatz
Warengruppen

Tabelle 3-16 Bereichsnamen und Formel im Worksheet WVERWEIS

Bereich Bereichsname Formel


B9 Warengruppe
B1:E4 Matrix
B10 Monat
B11 =WVERWEIS(Warengruppe;Matrix;Monat+1;FALSCH)

Codeliste 3-14 Prozeduren im Worksheet VERWEIS


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Warengruppe", RefersTo:=Range("B9")
.Add Name:="Matrix", RefersTo:=Range("B1:E4")
.Add Name:="Monat", RefersTo:=Range("B10")
End With
End Sub

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

Syntax zur VERGLEICH-Funktion:


= VERGLEICH(Suchkriterium; Suchmatrix; Vergleichstyp)
Aufgabe zur VERGLEICH-Funktion:
Ein Controller möchte den Umsatz einer Warengruppe (Bild 3-15) in einem Monat dadurch
bestimmen, dass er diese namentlich über die Vergleichsfunktion als Zeilen- und Spaltenwert
3.3 Suchfunktionen 121

findet, um damit über die INDEX-Funktion den Wert auszulesen, die nachfolgend noch
beschrieben wird.

Bild 3-15
Umsatz
Warengruppen

Tabelle 3-17 Bereichsnamen und Formel im Worksheet VERGLEICH

Bereich Bereichsname Formel


B1:D1 Monate
B9 Monat
A2:A5 Warengruppen
B10 Warengruppe
B2:D5 Matrix
B11 SpalteM =VERGLEICH(Monat;Monate;0)
B12 ZeileW =VERGLEICH(Warengruppe;Warengruppen;0)
B13 =INDEX(Matrix;ZeileW;SpalteM)

Codeliste 3-15 Prozeduren im Worksheet VERGLEICH


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Monate", RefersTo:=Range("B1:D1")
.Add Name:="Monat", RefersTo:=Range("B9")
.Add Name:="Warengruppen", RefersTo:=Range("A2:A5")
.Add Name:="Warengruppe", RefersTo:=Range("B10")
.Add Name:="Matrix", RefersTo:=Range("B2:D5")
.Add Name:="SpalteM", RefersTo:=Range("B11")
.Add Name:="ZeileW", RefersTo:=Range("B12")
End With
End Sub
122 3 Wichtige Funktionen

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

Syntax zur INDEX-Funktion:


Matrixversion:
= INDEX(Matrix; Zeile; Spalte)
Bezugsversion:
= INDEX(Bezug; Zeile; Spalte; Bereich)
Aufgabe zur INDEX-Funktion:
Für einen Controller stellen sich folgende Aufgaben:
 Auf der Grundlage einer Tabelle (Bild 3-16) soll ein Diagramm erstellt werden, wobei die
Auswahl über den Monat erfolgen soll (Matrixversion).
 Aus einer Tabelle mit Erlösen und Kosten von Produkten soll eine Gewinnanalyse erstellt
werden, wobei Produkt und Monat ausgewählt werden (Bezugsversion).

Bild 3-16
Warengruppenumsatz
3.3 Suchfunktionen 123

Tabelle 3-18 Bereichsnamen und Formel im Worksheet INDEX

Bereich Bereichsname Formel


A11:D11 Warengruppe
A2:D5 Matrix
B9 Monat
A12:D12 =INDEX(Matrix,COLUMN(),Monat+1)

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.

Codeliste 3-16 Prozeduren im Worksheet INDEX


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Warengruppe", RefersTo:=Range("A11:D11")
.Add Name:="Matrix ", RefersTo:=Range("A2:D5")
.Add Name:="Monat", RefersTo:=Range("B9")
End With
End Sub

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

Tabelle 3-19 Bereichsnamen und Formel im Worksheet INDEX_2

Bereich Bereichsname Formel


B14 Monatszahl
B15 Produktnummer
B17 Erlöse
B18 Kosten
ErlöseTabelle Name der Erlöse Tabelle
KostenTabelle Name der Kosten Tabelle

Codeliste 3-17 Prozeduren im Worksheet INDEX_2


Sub NamenVergeben()
Call NamenDelete

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

Syntax zur KGRÖSSTE-Funktion:


= KGRÖSSTE(Matrix; k)
Aufgabe zur KGRÖSSTE-Funktion:
Ein Controller soll die drei größten Umsätze (Bild 3-18) des Quartals bestimmen und ihre
Summe bilden (Top3).

Bild 3-18
Umsatzanalyse
Top3

Tabelle 3-20 Bereichsnamen und Formel im Worksheet KGRÖSSTE

Bereich Bereichsname Formel


B2:D7 Matrix
B11 =KGRÖSSTE(Matrix;1)
B12 =KGRÖSSTE(Matrix;2)
B13 =KGRÖSSTE(Matrix;3)
B14 =SUMME(B11:B13)

Codeliste 3-18 Prozeduren im Worksheet KGRÖSSTE


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Matrix", RefersTo:=Range("B2:D7")
End With
End Sub
126 3 Wichtige Funktionen

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

Syntax zur KKLEINSTE-Funktion:


= KKLEINSTE(Matrix; k)
Aufgabe zur KKLEINSTE-Funktion:
In der gleichen Umsatzanalyse von KGRÖSSTE (Bild 3-19) soll der Controller auch die drei
niedrigsten Umsätze des Quartals bestimmen und ihre Summe bilden (Down3).

Bild 3-19
Umsatzanalyse
Down3

Tabelle 3-21 Bereichsnamen und Formel im Worksheet KKLEINSTE

Bereich Bereichsname Formel


B2:D7 Matrix
B11 =KKLEINSTE(Matrix;1)
B12 =KKLEINSTE(Matrix;2)
B13 =KKLEINSTE(Matrix;3)
B14 =SUMME(B11:B13)
3.4 Datumsfunktionen 127

Codeliste 3-19 Prozeduren im Worksheet KKLEINSTE


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Matrix", RefersTo:=Range("B2:D7")
End With
End Sub

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

Excel-Funktion VBA-Anweisung Anwendung


JAHR YEAR bestimmt Jahr aus Zahl oder Datum
MONAT MONTH bestimmt Monat aus Zahl oder Datum
TAG DAY bestimmt Tag aus Zahl oder Datum
DATUM DATE definiert ein Datum
KALENDERWOCHE WEEKNUM bestimmt Kalender aus Datum
HEUTE TODAY gibt aktuelles Datum an
JETZT NOW gibt aktuelles Datum und Uhrzeit an

Syntax zur JAHR-Funktion:


= JAHR(Zahl)
Syntax zur MONAT-Funktion:
= MONAT(Zahl)
Syntax zur TAG-Funktion:
= TAG(Zahl)
128 3 Wichtige Funktionen

Aufgabe zu den drei Funktion:


Einem Controller liegt ein Umsatzbericht vor (Bild 3-20), in dem taggenaue Umsätze vermerkt
sind. Zur Übersichtlichkeit möchte er die Datumsangaben aufsplitten.

Bild 3-20
Umsatzbericht

Tabelle 3-23 Bereichsnamen und Formel im Worksheet JAHR.MONAT.TAG

Bereich Bereichsname Formel


A2:A7 Datum
D2:D7 =JAHR(Datum)
E2:E7 =MONAT(Datum)
F2:F7 =TAG(Datum)
G2:G7 =Datum / benutzerdefiniertes Format TTT* TT.MM.JJJJ

Codeliste 3-20 Prozeduren im Worksheet JAHR.MONAT.TAG


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Datum", RefersTo:=Range("A2:A7")
End With
End Sub

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

Syntax zur DATUM-Funktion:


= DATUM(Jahr; Monat; Tag)
Aufgabe zur DATUM-Funktion:
Ein Controller bekommt eine Auftragsliste (Bild 3-21) und möchte daraus für einen
Liquiditätsplan die jeweilige Zahlungshöhe und das Fälligkeitsdatum, entsprechend der
Zahlungsmoral des Kunden (durchschnittliche Dauer in Tagen), bestimmen.

Bild 3-21
Auftragsliste

Tabelle 3-24 Bereichsnamen und Formel im Worksheet DATUM

Bereich Bereichsname Formel


B2:B5 Wert
C2:C5 Datum
D2:D5 Skonto
E2:E5 Dauer
F2:F5 =Wert*(1-Skonto)
G2:G5 =DATUM(JAHR(Datum);MONAT(Datum); TAG(Datum)+Dauer)

Codeliste 3-21 Prozeduren im Worksheet DATUM


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Wert", RefersTo:=Range("B2:B5")
.Add Name:="Datum", RefersTo:=Range("C2:C5")
.Add Name:="Skonto", RefersTo:=Range("D2:D5")
.Add Name:="Dauer", RefersTo:=Range("E2:E5")
End With
End Sub

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

Syntax zur KALENDERWOCHE-Funktion:


= KALENDERWOCHE(Datum; Rückgabe)
Aufgabe zur KALENDERWOCHE-Funktion:
Ein Controller möchte zu den Einträgen im Umsatzbericht (Bild 3-22) die entsprechende
Kalenderwoche bestimmen.

Bild 3-22
Auftragsliste

Tabelle 3-25 Bereichsnamen und Formel im Worksheet KALENDERWOCHE

Bereich Bereichsname Formel


A2:A7 Datum
D2:D7 =KALENDERWOCHE(TabelleKW[@Datum];2)

Codeliste 3-22 Prozeduren im Worksheet KALENDERWOCHE


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Datum", RefersTo:=Range("A2:A7")
End With
End Sub

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

Syntax zur HEUTE-Funktion:


= HEUTE()
Aufgabe zur HEUTE-Funktion:
Ein Controller soll wöchentlich bestimmte Aufgaben ausführen. Dazu legt er am aktuellen Tag
eine ToDo-Liste an (Bild 3-23), formatiert die Datumszellen mit dem benutzerdefinierten
Format „TTT* TT.MM.JJ“ und wendet die Formatvorlage Notiz an.
3.4 Datumsfunktionen 131

Bild 3-23
ToDo-Liste

Codeliste 3-23 Prozeduren im Worksheet HEUTE


Sub NamenVergeben()
Call NamenDelete
End Sub

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

Syntax zur JETZT-Funktion:


= JETZT()
Aufgabe zur JETZT-Funktion:
Ein Controller möchte in einer Zelle (Bild 3-24) seines Berichts Datum und Uhrzeit vermerken.
Die oberste Zeile zeigt das Ergebnis der JETZT-Funktion in der Standardformatierung.
132 3 Wichtige Funktionen

Darunter ist ebenfalls das Ergebnis der JETZT-Funktion zu sehen, allerdings mit dem
benutzerdefinierten Format: TTT* TT.MM.JJJJ.

Bild 3-24
JETZT-Funktion

Codeliste 3-24 Prozeduren im Worksheet HEUTE


Sub NamenVergeben()
Call NamenDelete
End Sub

Sub FormelnSchreiben()
ActiveCell.FormulaR1C1 = "=NOW()"
End Sub

Sub WerteZuweisen()
Dim rCell As Range

Set rCell = ActiveCell


rCell = Evaluate("=NOW()")
rCell.NumberFormat = "ddd* dd/mm/yyyy"
Set rCell = Nothing
End Sub

3.5 Zählfunktionen
Tabelle 3-26 Liste der wichtigsten Zählfunktionen

Excel-Funktion VBA- Anwendung


Anweisung
ANZAHL COUNT bestimmt die Anzahl aller Zahlen in einem Bereich
ANZAHL2 COUNTA zählt alle Zellen im festgelegten Bereich, die eine
Information enthalten
ZÄHLENWENN COUNTIF zählt alle Werte die ein Suchkriterium erfüllen
ZÄHLENWENNS COUNTIFS zählt alle Werte die mehrere Suchkriterien erfüllen
ZEILE ROW gibt die Zeilennummer einer Zelle wieder.
SPALTE COLUMN gibt die Spaltennummer einer Zelle wieder.
ADRESSE ADDRESS gibt die Adresse einer Zelle wieder.

Syntax zur ANZAHL-Funktion:


= ANZAHL(Wert1; Wert2; …)
Syntax zur ANZAHL2-Funktion:
= ANZAHL2(Wert1; Wert2; …)
3.5 Zählfunktionen 133

Aufgabe zu den ANZAHL-Funktionen:


Ein Controller möchte in der Umsatzliste (Bild 3-25) bestimmen, wieviel Umsätze,
Umsatzeinträge und Produkteinträge vorhanden sind.

Bild 3-25
Umsatzliste

Tabelle 3-27 Bereichsnamen und Formel im Worksheet ANZAHL

Bereich Bereichsname Formel


A2:A8 Datum
B2:B8 Umsatz
C2:C8 Produkt
B11 =ANZAHL(Umsatz)
B12 =ANZAHL2(Umsatz)
B13 =ANZAHL2(Produkt)

Codeliste 3-25 Prozeduren im Worksheet ANZAHL


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Datum", RefersTo:=Range("A2:A8")
.Add Name:="Umsatz", RefersTo:=Range("B2:B8")
.Add Name:="Produkt", RefersTo:=Range("C2:C8")
End With
End Sub

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

Syntax zur ZÄHLENWENN-Funktion:


= ZÄHLENWENN(Bereich; Kriterien)
Aufgabe zu den ZÄHLENWENN-Funktionen:
Ein Controller möchte die Anzahl Einträge (Bild 3-26) zum Produkt P2 bestimmen und die
Anzahl Umsätze die über den Wert von 32.000 liegen.

Bild 3-26
Umsatzliste

Tabelle 3-28 Bereichsnamen und Formel im Worksheet ZÄHLENWENN

Bereich Bereichsname Formel


B2:B8 Umsatz
C2:C8 Produkt
B11 =ZÄHLENWENN(Produkt;"P2")
B12 =ZÄHLENWENN(Umsatz;">32000")

Codeliste 3-26 Prozeduren im Worksheet ZÄHLENWENN


Sub NamenVergeben()
Call NamenDelete
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
3.5 Zählfunktionen 135

Sub WerteZuweisen()
Range("B11") = Evaluate("=COUNTIF(Produkt,""P2"")")
Range("B12") = Evaluate("=COUNTIF(Umsatz,"">32000"")")
End Sub

Syntax zur ZÄHLENWENNS-Funktion:


= ZÄHLENWENNS(Bereich1; Kriterien1;Bereich2;Kriterien2;…)
Aufgabe zu den ZÄHLENWENNS-Funktionen:
Ein Controller möchte aus einer Verkaufsstatistik (Bild 3-27) die Anzahl Umsätze zählen, die
im Januar >= 20.000 €, im Februar >=21.000 und im März >= 22.000 aufweisen.

Bild 3-27
Umsatzliste

Tabelle 3-29 Bereichsnamen und Formel im Worksheet ZÄHLENWENNS

Bereich Bereichsname Formel


B2:B8 Umsatz
C2:C8 Produkt
B11 =ZÄHLENWENN(Produkt;"P2")
B12 =ZÄHLENWENN(Umsatz;">32000")

Codeliste 3-27 Prozeduren im Worksheet ZÄHLENWENNS


Sub NamenVergeben()
Call NamenDelete

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

Syntax zur ZEILE-Funktion:


= ZEILE(Bezug)
Syntax zur SPALTE-Funktion:
= SPALTE(Bezug)
Aufgabe zu den SPALTE- und ZEILE-Funktionen:
Einem Controller liegt eine Mengenliste erzeugter Produkte (Bild 3-28) vor, in der einige
Zellen nicht ausgefüllt sind. Zur Bearbeitung soll eine Liste mit Zeilen- und Spaltenangaben
erstellt werden.

Bild 3-28
Produktmengen

Tabelle 3-30 Bereichsnamen und Formeln im Worksheet ZEILE & SPALTE

Bereich Bereichsname Formel


B2:D13 Werte
Ab A15 fortlaufend =ZEILE($C$3)
Ab B15 Forlaufend =SPALTE($C$3)

Codeliste 3-28 Prozeduren im Worksheet ZEILE & SPALTE


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Werte", RefersTo:=Range("B2:D13")
End With
End Sub
3.5 Zählfunktionen 137

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

Syntax zur ADRESSE-Funktion:


= ADRESSE(Zeile;Spalte;[Abs];[A1];[Tabellenname])
Aufgabe zur ADRESSE-Funktionen:
Ein Controller möchte die fehlenden Werte in der Liste der Produktmengen (Bild 3-29) durch
einen Kommentar mit Zeilen- und Spaltenangabe kennzeichnen.

Bild 3-29
Produktmengen

Tabelle 3-31 Bereichsnamen und Formel im Worksheet ADRESSE

Bereich Bereichsname Formel


B2:D13 Werte
138 3 Wichtige Funktionen

Ab A15 fortlaufend =ZEILE($C$3)


Ab B15 Forlaufend =SPALTE($C$3)

Codeliste 3-29 Prozeduren im Worksheet ADRESSE


Sub NamenVergeben()
Dim rCell As Range
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Werte", RefersTo:=Range("B2:D13")
End With
For Each rCell In Range("Werte").Cells
rCell.ClearComments
Next
End Sub

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

Excel- VBA- Anwendung


Funktion Anweisung
RMZ PMT RMZ ist die Kurzform für regelmäßige Zahlung und bestimmt
diese pro Periode bei konstanten Zinsen
BW PV bestimmt den Barwert einer Investition
ZW FV bestimmt den zukünftigen Wert bei einer Reihe konstanter
Zahlungen mit gleichbleibendem Zins
ZINS RATE berechnet den Zinssatz einer konstanten Zahlung je Periode
ZINSZ IPMT bestimmt den Zinsanteil einer regelmäßigen Zahlung
ZZR NPR berechnet die Anzahl notwendiger Perioden, um bei konstanter
monatlicher Zahlung mit gleichbleibendem Zinssatz einen Wert zu
erreichen
NBW NPV berechnet die Summe der Barwerte einer Investition nach den
jeweiligen Ein- bzw. Auszahlungen
3.6 Barwertfunktionen 139

Syntax zur RMZ-Funktion:


= RMZ(Zins; Zzr;Bw; Zw; F)
Aufgabe zur RMZ-Funktion:
Ein Controller soll die monatliche Rate für einen Kredit von 50.000 € bestimmen, bei einem
Zinssatz von 3,5 %, einer Laufzeit von 48 Monaten und einem Restbetrag von 8.000 €. Die
Zahlung erfolgt am Periodenstart (Bild 3-30).

Bild 3-30
Kreditberechnung

Tabelle 3-33 Bereichsnamen und Formel im Worksheet RMZ

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Restwert
B4 Zinssatz
B5 Laufzeit
B6 Kreditbetrag
B7 =RMZ(Zinssatz/12,Laufzeit,Kreditbetrag,Restwert,Fälligkeit)

Codeliste 3-30 Prozeduren im Worksheet RMZ


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Zinssatz", RefersTo:=Range("B4")
.Add Name:="Laufzeit", RefersTo:=Range("B5")
.Add Name:="Kreditbetrag", RefersTo:=Range("B6")
End With
End Sub

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

Syntax zur BW-Funktion:


= BW(Zins; Zzr;RMZ; Zw; F)
Aufgabe zur BW-Funktion:
Ein Controller berechnet für eine Kapitalanlage (Bild 3-31) von 50.000 € das Startkapital,
wenn zu jedem Monatsanfang eine Zahlung von 600 € über 48 Monate bei einem Zinssatz von
3,5 % erfolgt.

Bild 3-31
Kreditberechnung
mit der BW-
Funktion

Tabelle 3-34 Bereichsnamen und Formel im Worksheet BW

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Zahlung
B4 Laufzeit
B5 Zielwert
B6 Zinssatz
B7 =BW(Zinssatz/12,Laufzeit,Zahlung*-1,Zielwert,Fälligkeit)

Codeliste 3-31 Prozeduren im Worksheet BW


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Zahlung", RefersTo:=Range("B3")
.Add Name:="Laufzeit", RefersTo:=Range("B4")
.Add Name:="Zielwert", RefersTo:=Range("B5")
.Add Name:="Zinssatz", RefersTo:=Range("B6")
End With
End Sub
3.6 Barwertfunktionen 141

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

Syntax zur ZW-Funktion:


= ZW(Zins; Zzr;RMZ; Bw; F)
Aufgabe zur ZW-Funktion:
Ein Controller bestimmt die Restschuld des Unternehmens (Bild 3-32), für ein
Annuitätendarlehen über 50.000 €, bei einem Zinssatz von 3,5 % und einer Laufzeit von 48
Monaten. Die Zahlung von 1.200 Euro erfolgt jeweils am Monatsanfang.

Bild 3-32
Kreditberechnung mit
der ZW-Funktion

Tabelle 3-35 Bereichsnamen und Formel im Worksheet ZW

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Zahlung
B4 Zinssatz
B5 Laufzeit
B6 Kreditbetrag
B7 =ZW(Zinssatz/12;Laufzeit;Zahlung*-1;Kreditbetrag;Fälligkeit)

Codeliste 3-32 Prozeduren im Worksheet ZW


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Zahlung", RefersTo:=Range("B3")
.Add Name:="Zinssatz", RefersTo:=Range("B4")
.Add Name:="Laufzeit", RefersTo:=Range("B5")
.Add Name:="Kreditbetrag", RefersTo:=Range("B6")
142 3 Wichtige Funktionen

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

Syntax zur ZINS-Funktion:


= ZINS(Zzr; RMZ; Bw; Zw; F; Schätzwert)
Aufgabe zur ZINS-Funktion:
Ein Controller bestimmt den Zinssatz eines Kredits über 50.000 € mit einem Restbetrag von
4.000 € (Bild 3-33). Die am Anfang jeden Monats fällige Rate beträgt 1.200 € bei einer
Laufzeit von 48 Monaten. Ein ähnliches Angebot mit 3,5 % Zinssatz liegt bereits vor.

Bild 3-33
Kreditberechnung mit
der ZINS-Funktion

Tabelle 3-36 Bereichsnamen und Formel im Worksheet Zins

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Zahlung
B4 Restwert
B5 Laufzeit
B6 Kreditbetrag
B7 Zins
B8 =ZINS(Laufzeit;Zahlung*-
1;Kreditbetrag;Restwert;Fälligkeit;Zins)*12
3.6 Barwertfunktionen 143

Codeliste 3-33 Prozeduren im Worksheet Zins


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Zahlung", RefersTo:=Range("B3")
.Add Name:="Restwert", RefersTo:=Range("B4")
.Add Name:="Laufzeit", RefersTo:=Range("B5")
.Add Name:="Kreditbetrag", RefersTo:=Range("B6")
.Add Name:="Zins", RefersTo:=Range("B7")
End With
End Sub

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

Syntax zur ZINSZ-Funktion:


= ZINSZ(Zins; Zr; Zzr; Bw; Zw; F)
Aufgabe zur ZINSZ-Funktion:
Ein Controller soll bei einem Annuitätendarlehen über 50.000 €, mit einem Zinssatz von 3,5 %,
einer Laufzeit von 48 Monaten und einer Rate von 1.200 Euro zum Monatsanfang, den
Zinsanteil in der 12. Periode bestimmen (Bild 3-34).

Bild 3-34
Zinsanteil

Tabelle 3-37 Bereichsnamen und Formel im Worksheet ZinsZ

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Zahlung
144 3 Wichtige Funktionen

B4 Zinssatz
B5 Laufzeit
B6 Kreditbetrag
B7 Restwert
B9 Periode
B10 =IPMT(Zinssatz/12,Periode,Laufzeit,Kreditbetrag,Restwert,
Fälligkeit)

Codeliste 3-34 Prozeduren im Worksheet ZinsZ


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Zahlung", RefersTo:=Range("B3")
.Add Name:="Zinssatz", RefersTo:=Range("B4")
.Add Name:="Laufzeit", RefersTo:=Range("B5")
.Add Name:="Kreditbetrag", RefersTo:=Range("B6")
.Add Name:="Restwert", RefersTo:=Range("B7")
.Add Name:="Periode", RefersTo:=Range("B9")
End With
End Sub

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

Syntax zur ZZR-Funktion:


= ZZR(Zins; RMZ; Bw; Zw; F)
Aufgabe zur ZZR-Funktion:
Ein Controller berechnet die Anzahl Monate zur Tilgung eines Darlehens von 50.000 € auf
einen Restwert von 4.000 €, bei einem Zins von 3,5 % und einer zum Monatsanfang fälligen
Rate von 600 € (Bild 3-35).
3.6 Barwertfunktionen 145

Bild 3-35
Laufzeit

Tabelle 3-38 Bereichsnamen und Formel im Worksheet Zzr

Bereich Bereichsname Formel


B2 Fälligkeit
B3 Zahlung
B4 Restwert
B5 Zinssatz
B6 Kreditbetrag
B7 =NPER(Zinssatz/12,Zahlung*-1,Kreditbetrag,Restwert,Fälligkeit)

Codeliste 3-35 Prozeduren im Worksheet Zzr


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Fälligkeit", RefersTo:=Range("B2")
.Add Name:="Zahlung", RefersTo:=Range("B3")
.Add Name:="Restwert", RefersTo:=Range("B4")
.Add Name:="Zinssatz", RefersTo:=Range("B5")
.Add Name:="Kreditbetrag", RefersTo:=Range("B6")
End With
End Sub

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

Syntax zur NBW-Funktion:


= NBW(Zins; Wert1; Wert2; …)
Aufgabe zur NBW-Funktion:
Ein Controller bestimmt den Kapitalwert einer Anlage (Bild 3-36), mit den
Anschaffungskosten von 50.000 € und einem kalkulatorischen Zinssatz von 3,5 %.

Bild 3-36 Zwei Wege zur Berechnung des Kapitalwerts

Tabelle 3-39 Bereichsnamen und Formeln im Worksheet NBW

Bereich Bereichsname Formel


B2 AnKosten
B3 Zinssatz
D2:D6 Periode
E2:E6 Einzahlung
F2:F6 Auszahlung
G2:G6 Überschuss =Einzahlung-Auszahlung
H2:H6 Abzins =(1+Zinssatz)^(-Periode)
I2:I6 Barwert =Überschuss*Abzins
I7 SuBarwert =SUMME(Barwert)
I9 =SuBarwert-AnKosten
I10 =NBW(Zinssatz;Überschuss)-AnKosten
B4 =SUMME(Barwert)
B5 =NBW(Zinssatz;Überschuss)-AnKosten

Codeliste 3-36 Prozeduren im Worksheet NBW


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Zinssatz", RefersTo:=Range("B3")
3.7 Abschreibungsfunktionen 147

.Add Name:="Periode", RefersTo:=Range("D2:D6")


.Add Name:="Einzahlung", RefersTo:=Range("E2:E6")
.Add Name:="Auszahlung", RefersTo:=Range("F2:F6")
.Add Name:="Überschuss", RefersTo:=Range("G2:G6")
.Add Name:="Abzins", RefersTo:=Range("H2:H6")
.Add Name:="Barwert", RefersTo:=Range("I2:I6")
.Add Name:="SuBarwert", RefersTo:=Range("I7")
End With
End Sub

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

Excel- VBA- Anwendung


Funktion Anweisung
LIA SLN berechnet die lineare Abschreibung eines Anlagegutes
DIA SYD berechnet die arithmetisch degressive Abschreibung einer
bestimmten Periode
GDA DDB berechnet die degressive Doppelraten-Abschreibung eines
Anlagegutes für eine bestimmte Periode
148 3 Wichtige Funktionen

GDA2 DB berechnet die geometrisch degressive Abschreibung eines


Anlagegutes für eine bestimmte Periode
VDB VDB berechnet die degressive Doppelraten-Abschreibung für eine
bestimmte Periode (Teilperiode)
Syntax zur LIA-Funktion:
= LIA(AnschWert; Restwert; Nutzungsdauer)
Aufgabe zur LIA-Funktion:
Ein Controller berechnet eine lineare Abschreibung auf 5 Jahre (Bild 3-37). Die Anschaffungs-
kosten betragen 22.000 € der Restwert ist 1.600 € für eine Nutzungsdauer von 5 Jahren.

Bild 3-37
Abschreibung

Tabelle 3-41 Bereichsnamen und Formel im Worksheet LIA

Bereich Bereichsname Formel


B2 AnKosten
B3 Restwert
B4 Dauer
B5 =LIA(AnKosten,Restwert,Dauer)

Codeliste 3-37 Prozeduren im Worksheet LIA


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Dauer", RefersTo:=Range("B4")
End With
End Sub

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

Syntax zur DIA-Funktion:


= DIA(AnschWert; Restwert; Nutzungsdauer)
Aufgabe zur DIA-Funktion:
Ein Controller berechnet eine arithmetisch degressive Abschreibung für das dritte Jahr. Die
Anschaffungskosten betragen 22.000 €, der Restwert ist 1.600 € für eine Nutzungsdauer von 6
Jahren (Bild 3-38).

Bild 3-38
Abschreibung

Tabelle 3-42 Bereichsnamen und Formel im Worksheet DIA

Bereich Bereichsname Formel


B2 AnKosten
B3 Restwert
B4 Zeitpunkt
B5 Dauer
B6 =SYD(AnKosten,Restwert,Dauer,Zeitpunkt)

Codeliste 3-38 Prozeduren im Worksheet DIA


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Zeitpunkt", RefersTo:=Range("B4")
.Add Name:="Dauer", RefersTo:=Range("B5")
End With
End Sub

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

Syntax zur GDA-Funktion:


= GDA(AnschWert; Restwert; Nutzungsdauer; Periode; Faktor)
Aufgabe zur GDA-Funktion:
Ein Controller soll eine geometrisch degressive Abschreibung für das dritte Jahr berechnen.
Die Anschaffungskosten betragen 27.000 €, der Restwert ist 2.500 € für eine Nutzungsdauer
von sechs Jahren. Die Abschreibung nimmt mit dem 1,5-fachen ab (Bild 3-39).

Bild 3-39
Abschreibung

Tabelle 3-43 Bereichsnamen und Formel im Worksheet GDA

Bereich Bereichsname Formel


B2 AnKosten
B3 Restwert
B4 Zeitpunkt
B5 Faktor
B6 Dauer
B7 =DDB(AnKosten,Restwert,Dauer,Zeitpunkt,Faktor)

Codeliste 3-39 Prozeduren im Worksheet GDA


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Zeitpunkt", RefersTo:=Range("B4")
.Add Name:="Faktor", RefersTo:=Range("B5")
.Add Name:="Dauer", RefersTo:=Range("B6")
End With
End Sub
Sub FormelnSchreiben()
Range("B7").FormulaR1C1 = _
"=DDB(AnKosten,Restwert,Dauer,Zeitpunkt,Faktor)"
End Sub
Sub WerteZuweisen()
Range("B7") = _
Evaluate("=DDB(AnKosten,Restwert,Dauer,Zeitpunkt,Faktor)")
End Sub
3.7 Abschreibungsfunktionen 151

Syntax zur GDA2-Funktion:


= GDA2(AnschWert; Restwert; Nutzungsdauer; Periode; Monate)
Aufgabe zur GDA2-Funktion:
Ein Controller soll den Abschreibungsbetrag für das dritte Jahr berechnen (Bild 3-40). Die
Anschaffung im April betrug 27.000 €, der Restwert ist 2.500 € bei einer Nutzungsdauer von
sechs Jahren.

Bild 3-40
Abschreibung

Tabelle 3-44 Bereichsnamen und Formel im Worksheet GDA2

Bereich Bereichsname Formel


B2 AnKosten
B3 Restwert
B4 Zeitpunkt
B5 Monate
B6 Dauer
B7 =DB(AnKosten,Restwert,Dauer,Zeitpunkt,Monate)

Codeliste 3-40 Prozeduren im Worksheet GDA2


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Zeitpunkt", RefersTo:=Range("B4")
.Add Name:="Monate", RefersTo:=Range("B5")
.Add Name:="Dauer", RefersTo:=Range("B6")
End With
End Sub

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

Syntax zur VDB-Funktion:


= VDB(AnschWert; Restwert; Nutzungsdauer; Anfang; Ende; Faktor; Modus)
Aufgabe zur VDB-Funktion:
Ein Controller soll den Abschreibungsaufwand vom dritten bis zum sechsten Jahr
(einschließlich) ermitteln (Bild 3-41). Die Anschaffungskosten betrag 27.000 € und bei einer
Nutzungsdauer von 9 Jahren beträgt der Restwert 1.800 €. Der Abschreibungsfaktor wird mit
1,5 festgelegt. Es soll die Methode der Abschreibung gewechselt werden, wenn die
geometrisch degressive Abschreibung niedriger ist als die lineare Abschreibung.

Bild 3-41
Abschreibung

Tabelle 3-45 Bereichsnamen und Formel im Worksheet VDB

Bereich Bereichsname Formel


B2 AnKosten
B3 Restwert
B4 Zeitpunkt
B5 Ende
B6 Faktor
B7 Dauer
B8 Wechsel
B9 =VDB(AnKosten,Restwert,Dauer,Zeitpunkt,Ende,Faktor,
Wechsel)

Codeliste 3-41 Prozeduren im Worksheet VDB


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="AnKosten", RefersTo:=Range("B2")
.Add Name:="Restwert", RefersTo:=Range("B3")
.Add Name:="Zeitpunkt", RefersTo:=Range("B4")
.Add Name:="Ende", RefersTo:=Range("B5")
.Add Name:="Faktor", RefersTo:=Range("B6")
.Add Name:="Dauer", RefersTo:=Range("B7")
.Add Name:="Wechsel", RefersTo:=Range("B8")
End With
3.8 Rundungsfunktionen 153

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

Excel-Funktion VBA-Anweisung Anwendung


RUNDEN ROUND rundet Werte an der angegebenen Stelle auf oder ab
AUFRUNDEN ROUNDUP rundet Werte an der angegebenen Stelle auf
ABRUNDEN ROUNDDOWN rundet Werte an der angegebenen Stelle ab

Syntax zur RUNDEN-Funktion:


= RUNDEN(Wert; AnzahlStellen)
Aufgabe zur RUNDEN-Funktion:
Ein Controller soll die vorliegenden Buchungsdaten (Bild 3-42) lesbarer machen und sie auf
hundert Euro runden.

Bild 3-42
Werte runden

Tabelle 3-47 Bereichsnamen und Formel im Worksheet RUNDEN

Bereich Bereichsname Formel


B2:B7 Wert
E2:E7 =RUNDEN(Wert;-2)
154 3 Wichtige Funktionen

Codeliste 3-42 Prozeduren im Worksheet RUNDEN


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Wert", RefersTo:=Range("B3:B7")
End With
End Sub

Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUND(Wert,-2)"
End Sub

'In den Werten muss das Komma


'durch einen Punkt ersetzt werden
Sub WerteZuweisen()
Dim iRow As Integer
Dim dWert As Double
Dim sDo As String

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

Syntax zur AUFRUNDEN-Funktion:


= AUFRUNDEN(Wert; AnzahlStellen)
Aufgabe zur AUFRUNDEN-Funktion:
Ein Controller soll die vorliegenden Buchungsdaten (Bild 3-43) einem Geschäftskunden
präsentieren und rundet daher die Werte zu hundert Euro auf.

Bild 3-43
Werte aufrunden

Tabelle 3-48 Bereichsnamen und Formel im Worksheet RUNDEN

Bereich Bereichsname Formel


B2:B7 Wert
E2:E7 =AUFRUNDEN(Wert;-2)
3.8 Rundungsfunktionen 155

Codeliste 3-43 Prozeduren im Worksheet RUNDEN


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Wert", RefersTo:=Range("B3:B7")
End With
End Sub

Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUNDUP(Wert,-2)"
End Sub

'In den Werten muss das Komma


'durch einen Punkt ersetzt werden
Sub WerteZuweisen()
Dim iRow As Integer
Dim dWert As Double
Dim sDo As String

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

Syntax zur ABRUNDEN-Funktion:


= ABRUNDEN(Wert; AnzahlStellen)
Aufgabe zur ABRUNDEN-Funktion:
Ein Controller soll die vorliegenden Buchungsdaten (Bild 3-44) auf einer PowerPoint-Folie
repräsentieren und rundet daher die Werte zu hundert Euro ab.

Bild 3-44
Werte abrunden

Tabelle 3-49 Bereichsnamen und Formel im Worksheet RUNDEN

Bereich Bereichsname Formel


B2:B7 Wert
E2:E7 =ABRUNDEN(Wert;-2)
156 3 Wichtige Funktionen

Codeliste 3-44 Prozeduren im Worksheet RUNDEN


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Wert", RefersTo:=Range("B3:B7")
End With
End Sub

Sub FormelnSchreiben()
Range("E3:E7").FormulaR1C1 = "=ROUNDDOWN(Wert,-2)"
End Sub

'In den Werten muss das Komma


'durch einen Punkt ersetzt werden
Sub WerteZuweisen()
Dim iRow As Integer
Dim dWert As Double
Dim sDo As String

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.

4.1 Daten konsolidieren


Wie die Methode Daten konsolidieren funktioniert habe ich ausführlich in meinem Buch [16]
beschrieben. Mit VBA kann der Vorgang noch universeller gestaltet werden. Letztlich bedeutet
Konsolidieren die Summenbildung von Werten gleicher Begriffe in unterschiedlichen Listen.
Ein wichtiger Grundsatz sollte dabei immer beachtet werden: Niemals die Quelldaten
verändern. Ergebnisse werden daher in weiteren Tabellenblättern dargestellt.

 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

For Each wshTemp In ThisWorkbook.Worksheets


If Left(wshTemp.Name, 4) = "Werk" Then
Debug.Print wshTemp.Name
End If
Next
End Sub

Befinden sich die Listen in unterschiedlichen geöffneten Arbeitsmappen, dann muss die
Objektebene bei den Workbooks angesetzt werden.

Codeliste 4-2 Prozedur sucht Arbeitsblätter in verschiedenen Mappen im gleichen Ordner


Sub MappenListenLesen()
Dim wbkBook As Workbook
Dim wshTemp As Worksheet
For Each wbkBook In Application.Workbooks
For Each wshTemp In wbkBook.Worksheets
If Left(wshTemp.Name, 4) = "Werk" Then
Debug.Print wbkBook.Name & "." & wshTemp.Name
End If
Next wshTemp
Next wbkBook
End Sub

Sind die entsprechenden Arbeitsmappen nicht geöffnet, dann muss der Pfad dazukommen.

Codeliste 4-3 Prozedur sucht Arbeitsblätter in Arbeitsmappen im Ordner mit Pfadangabe


Sub MappenOrdnerLesen()
Dim wbkBook As Workbook
Dim wshTemp As Worksheet
Dim sPfad As String
Dim sFile As String

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

Codeliste 4-4 Prozedur konsolidiert Listen in einer Mappe


Sub ListenKonsolidieren()
Dim wshSum As Worksheet
Dim wshTemp As Worksheet
Dim rngData As Range
Dim sArtikel As String
Dim lRow As Long
Dim lRowMax As Long
Dim lCol As Long
Dim lColMax As Long
Dim lSum As Long
Dim lRowSum As Long
Dim lIstDa As Long
'Summen-Arbeitsblatt
'am Ende der Listen erstellen
With ThisWorkbook
Set wshSum = .Worksheets.Add _
(after:=.Worksheets(.Worksheets.Count))
wshSum.Name = "Summen"
lRowSum = 1
'Listen lesen und Summen bilden
For Each wshTemp In .Worksheets
If Left(wshTemp.Name, 4) = "Werk" Then
lRowMax = wshTemp.UsedRange.Rows.Count
lColMax = wshTemp.UsedRange.Columns.Count
'Überschrift
If lRowSum = 1 Then
For lCol = 1 To lColMax
wshSum.Cells(1, lCol) = wshTemp.Cells(1, lCol)
Next lCol
End If
'Liste auswerten
For lRow = 2 To lRowMax
sArtikel = wshTemp.Cells(lRow, 1)
If Not sArtikel = "" Then
lIstDa = 0
If lRowSum > 0 Then
For lSum = 1 To lRowSum
If wshSum.Cells(lSum, 1) = sArtikel Then
lIstDa = lSum
Exit For
End If
Next lSum
End If
'Eintrag vorhanden
If lIstDa > 0 Then
For lCol = 2 To lColMax
wshSum.Cells(lIstDa, lCol) = _
wshSum.Cells(lIstDa, lCol) + _
wshTemp.Cells(lRow, lCol)
Next lCol
'neuer Eintrag
Else
lRowSum = lRowSum + 1
wshSum.Cells(lRowSum, 1) = sArtikel
160 4 Datenaufbereitung

For lCol = 2 To lColMax


wshSum.Cells(lRowSum, lCol) = _
wshTemp.Cells(lRow, lCol)
Next lCol
End If
End If
Next lRow
End If
Next
End With

'Summenbereich formatieren und sortieren


With wshSum
Set rngData = .Range(.Cells(2, 2), _
.Cells(lRowSum, lColMax))
rngData.NumberFormat = "#,##0.00 _€"
Set rngData = Nothing
Set rngData = .Range(.Cells(2, 1), _
.Cells(lRowSum, lColMax))
rngData.EntireColumn.AutoFit
.Range("A2").Select
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("A2"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange rngData
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'einfaches Balkendiagramm
.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=rngData
End With
Set wshTemp = Nothing
Set wshSum = Nothing
Set rngData = Nothing
End Sub

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-2 Visualisierung der konsolidierten Umsätze

Die manuelle Erstellung lässt sich ebenfalls einfach bewerkstelligen:


 Wie schon beschrieben, bekommen alle drei Datentabellen die Namen Werk1, Werk2
und Werk3.
 Neues Blatt anlegen und Zelle A2 markieren
 Im Register Daten in der Gruppe Datentools die Methode Konsolidieren wählen
 Im Dialogfenster Konsolidieren (Bild 4-3) die drei Werke eintragen und linke Spalte
wählen
 Mit der Schaltfläche OK startet die Konsolidierung und der Bereich bleibt markiert.
 Unter Register Einfügen in der Gruppe Diagramme das gruppierte Säulendiagramm
wählen

Bild 4-3
Dialogfenster
Konsolidieren
162 4 Datenaufbereitung

4.2 Daten filtern


Die Handhabung des Autofilters ist in VBA relativ einfach. Als Beispiel verwenden wir die
zuvor konsolidierten Daten und filtern nach allen Schrauben- und Muttern-Sorten.

Codeliste 4-5 Prozedur erstellt einen Autofilter mit Kriterien


Sub SetAutofilter()
Dim wshSum As Worksheet

Set wshSum = ActiveSheet


'Filter aufheben, falls vorhanden
wshSum.Cells(2, 1).Select
Selection.AutoFilter
'neuer Filter
wshSum.UsedRange.AutoFilter Field:=1, _
Criteria1:=Array("*schrauben", "*muttern"), _
Operator:=xlFilterValues
Set wshSum = Nothing
End Sub

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

Codeliste 4-6 Prozedur erstellt einen Spezialfilter mit Kriterien


Sub SetSpezialfilter()
Dim wshSum As Worksheet
Dim rngSummen As Range
Dim rngKriterien As Range

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

Bild 4-7 Auszug aus einer Auftragsliste

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

Set wshListe = Worksheets("Auftragsliste")


lRowMax = wshListe.UsedRange.Rows.Count
Set rngListe = wshListe.Range("A2:G" & Trim(Str(lRowMax)))
wshListe.Activate
wshListe.Select
wshListe.Copy after:=Worksheets(2)
Set wshTeilsummen = Worksheets(3)
wshTeilsummen.Name = "Teilsummen"
wshTeilsummen.Sort.SortFields.Clear
wshTeilsummen.Sort.SortFields.Add _
Key:=Range("A2"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
With wshTeilsummen.Sort
.SetRange rngListe
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Gliederung
wshTeilsummen.Select
Selection.Subtotal GroupBy:=1, Function:=xlSum, _
TotalList:=Array(5), _
Replace:=True, _
PageBreaks:=False, SummaryBelowData:=True
wshTeilsummen.Outline.ShowLevels RowLevels:=2
'Spalten anpassen und ausblenden
lRowMax = wshTeilsummen.UsedRange.Rows.Count
lColMax = wshTeilsummen.UsedRange.Columns.Count
wshTeilsummen.Columns _
4.4 Datenschnitte 165

("A:" & Chr(64 + lColMax)).EntireColumn.AutoFit


For lCol = 2 To lColMax
If wshTeilsummen.Cells(lRowMax, lCol) = "" Then
wshTeilsummen.Cells(lRowMax, lCol).Columns.Hidden = True
End If
Next lCol
Set rngListe = Nothing
Set wshListe = Nothing
Set wshTeilsummen = Nothing
End Sub

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).

Tabelle 4-1 Liste der wichtigsten Funktionskonstanten

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).

Bild 4-9 Auftragsliste als Datentabelle (Filter ausgeschaltet)

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

Bild 4-11 Datentabelle mit Datenschnitte

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

Tabelle 4-2 Formeln

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).

Codeliste 4-8 Prozedur erstellt neue Datenschnitte


Sub SetDatenschnitte()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim scsTemp As SlicerCache

Set wbkTemp = ThisWorkbook


Set wshTemp = Worksheets("Datenschnitte")
wshTemp.Activate
'vorh. Datenschnitte löschen
For Each scsTemp In wbkTemp.SlicerCaches
scsTemp.Delete
Next
'neue Datenschnitte
With wbkTemp
.SlicerCaches.Add2(ActiveSheet.ListObjects("Auftragsliste"), _
"Region").Slicers.Add ActiveSheet, , "Region", _
"Region", 20, 500, 140, 180
.SlicerCaches.Add2(ActiveSheet.ListObjects("Auftragsliste"), _
"Verkäufer").Slicers.Add ActiveSheet, , "Verkäufer", _
"Verkäufer", 20, 640, 140, 180
.SlicerCaches.Add2(ActiveSheet.ListObjects("Auftragsliste"), _
"Kunde").Slicers.Add ActiveSheet, , "Kunde", _
"Kunde", 200, 500, 140, 180
.SlicerCaches.Add2(ActiveSheet.ListObjects("Auftragsliste"), _
"Produktkategorie").Slicers.Add _
ActiveSheet, , "Produktkategorie", _
"Produktkategorie", 200, 640, 140, 180
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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.

Bild 4-13 Datentabelle und Pivot-Schema

 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-14 Auszug aus einer Auftragsliste als Datentabelle


170 4 Datenaufbereitung

Zur Pivot-Tabelle gelangen wir in folgenden Schritten:


 Eine beliebige Zelle in der Datentabelle anklicken. Dadurch erkennt Excel den Umfang
der Datentabelle Quelldaten (Anzahl Zeilen und Spalten).
 Unter dem Register Einfügen in der Gruppe Tabellen die Methode PivotTable auswählen
 Im sich öffnenden Dialogfenster PivotTable erstellen (Bild 4-15) lediglich die
Bestätigungstaste OK anklicken, denn die wichtigste Auswahl Neues Arbeitsblatt ist
bereits vorgegeben

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.

Codeliste 4-10 Funktion FieldToRowField überträgt ein Feld in das Zeilenfeld


Function FieldToRowField(iPos, sName) As Variant
Dim pvt As PivotTable
Dim pvf As PivotField
Dim vReturn As Variant
'neues Datenfeld
Set pvt = ActiveSheet.PivotTables(1)
Set pvf = pvt.PivotFields(sName)
With pvf
.Orientation = xlRowField
.Position = iPos
End With
'aufräumen
Set pvt = Nothing
Set pvf = Nothing
End Function

Die nächste Funktion (Codeliste 4-11) überträgt ein Feld in das Ergebnisfeld, auch Datenfeld
genannt.

Codeliste 4-11 Funktion FieldToDataField überträgt ein Feld in das Ergebnisfeld


Function FieldToDataField(sName) As Variant
Dim pvt As PivotTable
Dim pvf As PivotField
Dim vReturn As Variant
4.5 Pivot-Tabellen 173

'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

Bild 4-19 Pivot-Tabelle mit Produktkategorie-Umsätzen

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).

Bild 4-21 Produktumsätze mit verschiedenen Darstellungsformen


4.5 Pivot-Tabellen 175

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).

Bild 4-22 Einzelpositionen von Umsatzanteilen an Gelenkbolzen

Nachfolgend noch einmal die Umformung mit VBA (Codeliste 4-13).


Codeliste 4-13 Umformung der vier Umsatzspalten
Sub UmsatzView()
'erste Wertspalte
Range("B4").Value = "Umsatzsumme"
Range("B5:B20").NumberFormat = "#,##0.00 $"
With ActiveSheet.PivotTables(1)
'zweite Wertspalte
With .PivotFields("Summe von Umsatz2")
.Function = xlCount
End With
Range("C4") = "Umsatzanzahl"
'dritte Wertspalte
With .PivotFields("Summe von Umsatz3")
.Calculation = xlPercentOfTotal
End With
Range("D4") = "Umsatzanteil"
'vierte Wertspalte
With .PivotFields("Summe von Umsatz4")
.Calculation = xlPercentOf
.BaseField = "Produktkategorie"
.BaseItem = "Gelenkbolzen"
End With
Range("E4") = "Umsatzanteil von GB"
End With
End Sub

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.

Codeliste 4-14 Funktion FieldToColumnField überträgt ein Feld in das Spaltenfeld


Function FieldToColumnField(iPos, sName) As Variant
Dim pvt As PivotTable
Dim pvf As PivotField
Dim vReturn As Variant
176 4 Datenaufbereitung

'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).

Bild 4-23 Produktumsätze nach Regionen geordnet

Codeliste 4-15 Testprozedur


Sub Test2()
Dim vReturn As Variant
Call CreatePivotTable
vReturn = FieldToRowField(1, "Produktkategorie")
vReturn = FieldToColumnField(1, "Region")
vReturn = FieldToDataField("Umsatz")
End Sub

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

Codeliste 4-16 Testprozedur Pivot-Tabelle Verkäuferumsätze


Sub Test3()
Dim vReturn As Variant
Call CreatePivotTable
vReturn = FieldToRowField(1, "Region")
vReturn = FieldToRowField(2, "Verkäufer")
vReturn = FieldToDataField("Umsatz")
End Sub

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.

Codeliste 4-17 Testprozedur zum Ein- und Ausschalten der Teilergebnisse


Sub Test4()
Dim pvt As PivotTable
Set pvt = ActiveSheet.PivotTables(1)
pvt.PivotFields("Region").Subtotals(1) = True
pvt.PivotFields("Region").Subtotals(1) = False
Set pvt = Nothing
End Sub
178 4 Datenaufbereitung

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

Bild 4-28 Auszug Verkäuferumsätze nach Quartalen

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.

Codeliste 4-18 Funktion FieldToPageField überträgt ein Feld in das Seitenfeld


Function FieldToPageField(iPos, sName) As Variant
Dim pvt As PivotTable
Dim pvf As PivotField
Dim vReturn As Variant
'neues Datenfeld
Set pvt = ActiveSheet.PivotTables(1)
Set pvf = pvt.PivotFields(sName)
With pvf
.Orientation = xlPageField
.Position = iPos
End With
'aufräumen
Set pvt = Nothing
Set pvf = Nothing
End Function

Die neue Pivot-Tabelle (Bild 4-30) erhält folgende Feldzuweisungen:


 Produktkategorie ins Zeilenfeld
 Auftragseingang (Jahre) ins Spaltenfeld
 Umsatz ins Ergebnisfeld
 Region ins Seitenfeld
 Kunde ins Seitenfeld

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.

Tabelle 4-3 Bereichsnamen und Formeln zur Pivot-Tabelle Produktumsätze

Bereich Name Formel


A5:A19 Produkte
B5:B19 Umsatz
B20 Gesamt
C4 =″Anteil″
C5:C19 Anteil =Umsatz/Gesamt
C20 =SUMME(Anteil)
C5:C20 Anteile
4.6 Pivot-Diagramme 183

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

Codeliste 4-19 Prozedur erstellt ein Fächerdiagramm mit den Beispieldaten


Sub CreateFächerdiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngDaten As Range
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
wshTemp.DrawingObjects.Delete 'Dias löschen
Set rngDaten = wshTemp.Range("Anteile")
'Kreisdiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(251, xlPie)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngDaten
.ChartGroups(1).FirstSliceAngle = 270 'Drehung
.FullSeriesCollection(1).Points(16).Format.Fill.Visible = _
msoFalse 'wird unsichtbar
.FullSeriesCollection(1).ApplyDataLabels 'Datenbeschriftung
'Beschriftung 100 % löschen
.FullSeriesCollection(1).Points(16).DataLabel.Delete
'Beschriftung mit Produktnamen
.FullSeriesCollection(1).XValues = Range("Produkte")
'Legende anpassen
.SetElement (msoElementLegendRight)
.Legend.Top = 1.9
.Legend.Height = 248
.Legend.Width = 106
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Produktumsätze"
.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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.

Codeliste 4-20 Prozedur erstellt eine Skala


Sub Skala()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngDaten As Range
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
Set rngDaten = wshTemp.Range("E5:E15")
'Kreisdiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(251, xlDoughnut)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngDaten
.ChartGroups(1).FirstSliceAngle = 270 'drehen
.ChartGroups(1).DoughnutHoleSize = 50 'Innenring
.ChartTitle.Delete 'Titel löschen
.Legend.Delete 'Legende löschen
'Anteil 100 ausblenden
With .FullSeriesCollection(1).Points(11)
.Format.Line.Visible = msoFalse
.Format.Fill.Visible = msoFalse
End With
'Farbzuordnung
With .FullSeriesCollection(1)
.Points(1).Format.Fill.ForeColor.RGB = RGB(220, 0, 0)
.Points(2).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
.Points(3).Format.Fill.ForeColor.RGB = RGB(255, 80, 0)
.Points(4).Format.Fill.ForeColor.RGB = RGB(255, 180, 0)
.Points(5).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
.Points(6).Format.Fill.ForeColor.RGB = RGB(255, 255, 80)
.Points(7).Format.Fill.ForeColor.RGB = RGB(180, 255, 180)
.Points(8).Format.Fill.ForeColor.RGB = RGB(130, 240, 70)
.Points(9).Format.Fill.ForeColor.RGB = RGB(100, 225, 40)
.Points(10).Format.Fill.ForeColor.RGB = RGB(0, 190, 0)
End With
186 4 Datenaufbereitung

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.

Tabelle 4-4 Formeln zum Hilfsfeld-Zeiger

Bereich Formel Bemerkung


H7 =100-H5 Die Formel sorgt dafür, dass in H8 immer 100 stehen.
H8 =SUMME(H5:H7)

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

Codeliste 4-21 Prozedur erstellt eine Skala


Sub Zeiger()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngDaten As Range
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
Set rngDaten = wshTemp.Range("H5:H8")
'Kreisdiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(251, xlPie)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngDaten
.ChartGroups(1).FirstSliceAngle = 270 'Drehung
'Formatvorlage 10
.ClearToMatchStyle
.ChartStyle = 260
.ChartTitle.Delete 'Titel löschen
'Datenbeschriftun löschen
.FullSeriesCollection(1).DataLabels.Delete
.ChartArea.Format.Fill.Visible = msoFalse
'1. Datenelement ausblenden
With .FullSeriesCollection(1).Points(1)
.Format.Fill.Visible = msoFalse
.Format.Line.Visible = msoFalse
End With
'2. Datenelement färben
.FullSeriesCollection(1).Points(2) _
.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
'3. Datenelement ausblenden
With .FullSeriesCollection(1).Points(3)
.Format.Fill.Visible = msoFalse
.Format.Line.Visible = msoFalse
End With
'4. Datenelement ausblenden
With .FullSeriesCollection(1).Points(4)
.Format.Fill.Visible = msoFalse
.Format.Line.Visible = msoFalse
End With
End With
'Position und Größe sorgt für eine Überlagerung
'mit der Skala
With shpTemp
.Top = 130
.Left = 360
.Height = 250
.Width = 250
End With
'Drehpunkt
wshTemp.Shapes.AddShape(msoShapeOval, 480, 250, 10, 10).Select
188 4 Datenaufbereitung

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

Tabelle 4-5 Bereichsnamen und Formeln zum Beispiel

Bereich Name Formel Bemerkung


A5:C19 Matrix Basis für einen SVERWEIS
I4 Produkt Suchfeld für Matrix
I5 =H5 Benutzerdefinierte Formatierung: 0,0“ %“

Unterhalb des Tachometers erstellen wir ein ActiveX-Steuerelement vom Typ


Kombinationsfeld.
4.6 Pivot-Diagramme 189

Es bekommt folgende Eigenschaftswerte:


 Name: cbbProdukt
 LinkedCell: Produkt
 ListFillRange: Matrix
 Font: Calibri / 12
 SpecialEffect: 0 - fmSpecialEffectFlat
Noch im Entwurfsmodus rufen wir mit einem Doppelklick auf das Steuerelement das Codefeld
das aktiven Arbeitsblattes Tachometer2 auf und finden dort die Ereignisprozedur
cbbProdukt_Change, die immer dann aufgerufen wird, wenn sich der Text im
Kombinationsfeld ändert. Diese Prozedur (Codeliste 4-22) füllen wir nun mit Leben.

Codeliste 4-22 Ereignisprozedur im Worksheet Tachometer2


Private Sub cbbProdukt_Change()
Range("Produkt") = cbbProdukt.Text
Range("H5") = Evaluate("=VLookup(Produkt,Matrix, 3)*100")
End Sub

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).

Codeliste 4-23 Prozedur erstellt ein Treemap


Sub CreateTreeMap()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte instanziieren
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
190 4 Datenaufbereitung

'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).

Bild 4-43 Pivot-Tabelle mit Oberflächendiagramm

Codeliste 4-24 Prozedur erstellt ein Oberflächendiagramm


Sub CreateSurface()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel Objekte instanziieren


Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.ActiveSheet
'Diagramm erstellen
Range("A5:E19").Select
Set shpTemp = wshTemp.Shapes.AddChart2(307, xlSurface)
Set chrTemp = shpTemp.Chart
With chrTemp
.HasTitle = True
.ChartTitle.Text = "Umsätze Produkt / Region"
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
192 4 Datenaufbereitung

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

 Im nächsten Dialogfenster Arbeitsmappe auswählen keine Auswahl treffen (wichtig!),


sondern einfach das Dialogfenster schließen. Damit wird der Abfrage-Assistent sichtbar
(Bild 4-45). Mit ihm können wir nun unsere Abfrage gestalten.
 Mit der Schaltfläche neue Abfrage wird das Dialogfenster Datenquelle auswählen wieder
geöffnet, und nun wählen wir mit dem nächsten Dialogfenster Arbeitsmappe auswählen
die Arbeitsmappe XCT_04-09_Produktionsdaten.xlsm.
 Im Dialogfenster Spalten auswählen (Bild 4-46) wählen wir aus den verfügbaren Spalten
die gewünschten durch Markieren und die Taste > in den Bereich Spalten in der Abfrage.
4.7 Relationen 193

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

 Im Dialogfenster Sortierreihenfolge (Bild 4-48) geben wir die Reihenfolge Produkt,


Bauteil und Anzahl aufsteigend vor.

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

Bild 4-53 Erweiterung der Datentabelle Personalkosten

Tabelle 4-6 Formeln zur erweiterten Datentabelle Produktion

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.

Mehrere Suchkriterien in SVERWEIS


Zunächst aber betrachten wir die WAHL-Funktion, die neben SVERWEIS und INDEX eine
unscheinbare und unerkannte Existenz fristet, mit ungeahnten Möglichkeiten.
Syntax der WAHL-Funktion:
=WAHL(Index;Wert1;Wert2;…)
Der Index gibt an, welcher Wert aus der Liste zu wählen ist, also bei Index = 2 den Wert2, etc.
Das Besondere an der WAHL-Funktion ist, dass die aufgeführten Werte, auch Texte,
Zellbezüge, Bereichsnamen, Formeln und sogar Funktionen sein können.
Als weitere Voraussetzung betrachten wir die Matrixschreibweise einer Tabelle (Bild 4-54).
Um die Summe der Beispiel-Matrix zu bestimmen, gibt es drei Schreibweisen:
1. Mit der Angabe des Zellbereichs =SUMME(A1:C3), Ergebnis 45.
2. Mit der Aufzählung der Werte =SUMME(1;3;5;2;4;6;7;9;8), Ergebnis 45.
3. Mit der Kurzschreibform einer Matrix =SUMME({1.3.5:2.4.6;7.9.8}), Ergebnis 45.
198 4 Datenaufbereitung

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

Schauen wir noch einmal auf die Syntax von SVERWEIS


=SVERWEIS(Suchkriterium;Matrix;Spaltenindex;[Bereich_Verweis])
und fassen das Suchkriterium wie folgt zusammen:
Personalkosten!$F2&Personalkosten!$G2.
4.8 Verweise 199

Die Matrix hat die Form:


WAHL({1.2};Maschinen[MNr]&Maschinen[WNr];Maschinen[Stundensatz]).
Mit der WAHL-Funktion stellen wir die Matrix so zusammen, dass die erste Spalte aus
Maschinennummer und Werkzeugnummer besteht, und die zweite Spalte aus Stundensatz.
Folglich muss auch für den Rückgabewert die zweite Spalte ausgewählt werden. Das Ergebnis
wird dann ähnlich wie beim Beispiel vorher gebildet (Bild 4-57).

Bild 4-57
Ergebnis der
Kostenbestimmung

Tabelle 4-7 Formeln zur erweiterten Datentabelle Produktion

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.

Mehrere Suchergebnisse in SVERWEIS


Die SVERWEIS-Funktion findet immer den ersten Wert, wenn er vorhanden ist. Mehrfach
gleiche Einträge haben hier keine Chance. Doch auch dafür wollen wir uns eine Lösung
anschauen.

 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

Tabelle 4-8 Formeln zur Mittelwertbildung

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.

Variable Spalten in SVERWEIS und INDEX


Wie variabel SVERWEIS in Verbindung mit anderen Funktionen sein kann, zeigt folgende
Problemstellung. SVERWEIS sucht normalerweise in der ersten Spalte einer Matrix, um dann
einen beliebigen Wert rechts davon zurück zu geben. Was aber, wenn das Suchkriterium in
einer beliebigen Spalte einer Tabelle steht und die Ergebnisspalte in der gleichen Tabelle aber
links davon?

 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

Bild 4-61 Auftragsliste

Tabelle 4-10 Bereichsnamen und Formeln zur Suche

Bereich Bereichsname Formel


C2:C24 Auftragswert
E2:E24 AuftragsNr
H1 AuftragNr
=SVERWEIS(AuftragNr;WAHL({2.1};
H2
Auftragswert;AuftragsNr);2;0)
=INDEX(Auftragswert;
H3
VERGLEICH(AuftragNr;AuftragsNr;0))
203

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.

Tabelle 5-1 Liste integrierter Analyse-Methoden

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

In den nachfolgenden Unterkapiteln betrachten wir den Einsatz dieser Methoden im


strategischen und operativen Controlling anhand einfacher Beispiele.

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.

Tabelle 5-2 Liste der Szenarien-Werte

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).

Bild 5-4 Szenario Bericht

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.

Codeliste 5-1 Prozedur erstellt einen Szenario Bericht


Sub SzenarienAnalyse()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim scnTemp As Scenario
Dim vTemp As Variant
Dim sName As String
Dim iCount As Integer

'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).

Codeliste 5-2 Prozedur visualisiert Szenarien mit einem Liniendiagramm


Sub SzenarienDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim rngDaten As Range
Dim iCount As Integer
Dim sDaten As String
Dim sNum As String

'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

sNum = Trim(Str(iCount + 5))


sDaten = "=Szenariobericht!D" & sNum & ":H" & sNum
.SeriesCollection.NewSeries
.FullSeriesCollection(iCount).Values = sDaten
Next iCount
'Verkaufspreis
.SeriesCollection.NewSeries
With .FullSeriesCollection(7)
.Values = "=Szenariobericht!D13:H13"
.AxisGroup = 2
With .Format.Line
.ForeColor.RGB = RGB(255, 0, 0)
.DashStyle = msoLineSysDash
End With
End With
.Axes(xlValue, xlSecondary).TickLabels.NumberFormat = _
"#.##0,00 €"
.Axes(xlValue, xlSecondary).HasTitle = True
.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = _
"Verkaufspreis"
'Legende
.FullSeriesCollection(1).Name = "=""Entwicklung"""
.FullSeriesCollection(2).Name = "=""Material"""
.FullSeriesCollection(3).Name = "=""Fertigung"""
.FullSeriesCollection(4).Name = "=""Verwaltung"""
.FullSeriesCollection(5).Name = "=""Marketing"""
.FullSeriesCollection(6).Name = "=""Vertrieb"""
.FullSeriesCollection(7).Name = "=""Verkaufspreis"""
.SetElement (msoElementLegendRight)
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

Bild 5-5 Visualisierte Szenarien


208 5 Integrierte Analyse-Methoden

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

Tabelle 5-3 Bereichsnamen und Formeln im Tilgungsplan

Bereich Name Formel


C1 Anfangskapital
C2 Endkapital
C3 Zinssatz
C4 Laufzeit
C5 Tilgung
B8 =Anfangskapital
C8 =b8*Zinssatz
D8 =Tilgung
E8 =C8+D8
F8 =B8-D8
B9 =F8
C9:F9 =C8:F8
B10:F13 =B9:F9
5.2 Zielwertsuche 209

Um dieses Problem zu lösen, bietet Excel die Methode der Zielwertsuche:


 Die Zelle mit dem letzten Endkapital (F13) markieren
 Die Zielwertsuche unter dem Register Daten und der Gruppe Prognose mit Was-wäre-
wenn-Analyse aufrufen (Bild 5-7)

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).

Codeliste 5-3 Prozedur führt die Zielwertsuche durch


Sub ZielWertSuche()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim rngDaten As Range
Dim sDaten As String
Dim sNum As String

'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.

Codeliste 5-4 Prozedur erstellt ein gestapeltes Säulendiagramm zur Zielwertsuche


Sub CreateDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim rngDaten As Range
Dim sDaten As String
Dim sNum As String

'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

5.3 Datentabelle mit einer Variablen


Das vorangegangene Kapitel hat gezeigt, dass unterschiedliche Werte in nur einer Zelle
erhebliche Veränderungen bewirken können. Excel stellt dazu unter der Was-wäre-wenn-
Analyse die Methode Datentabelle bereit. Mit ihr können die Ergebnisse mehrerer Eingaben
gleichzeitig dargestellt werden. Die Methode ist nicht zu verwechseln mit einer Datentabelle,
wie wir sie unter Kapitel 2.3.1 definiert haben.

 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 lässt sich direkt mit der RMZ-Funktion bestimmen.

Tabelle 5-4 Bereichsnamen und Formeln zum Kredit

Bereich Name Formel


B1 Anzahlung
B2 Zinssatz
B3 Laufzeit
B4 Darlehen
E2 = RMZ(Zinssatz/12;Laufzeit;-Darlehen+Anzahlung)

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.

Codeliste 5-5 Prozedur erstellt eine Datentabelle mit einer Variablen


Sub Table1Var()
Range("D2:E10").Select
Selection.Table ColumnInput:=Range("B2")
End Sub
5.4 Datentabelle mit zwei Variablen 213

5.4 Datentabelle mit zwei Variablen


War im vorangegangenen Beispiel die Laufzeit fest vorgegeben, so soll sie jetzt ebenfalls als
zweite Variable in die Bestimmung der Zahlungen eingehen. Entsprechend erhält die
Datentabelle eine zweidimensionale Form (Bild 5-14).

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

Codeliste 5-6 Prozedur erstellt eine Datentabelle mit einer Variablen


Sub Table2Var()
Range("E2:I10").Select
Selection.Table _
RowInput:=Range("B3"), _
ColumnInput:=Range("B2")
End Sub

5.5 Datentabelle mit mehr als zwei Variablen


Obwohl Datentabellen für maximal zwei Variable ausgelegt sind, können durch einen Trick
auch mehr als zwei verwendet werden. Eine Formel benutzt über die Zelladresse deren Inhalt.
Einige Funktionen akzeptieren als Parameter auch Text. In einem Text kann auch mehr als ein
Wert stehen, vorausgesetzt, sie sind durch ein Trennzeichen geteilt. Dies kann ein Semikolon
sein, ein Schrägstrich oder ein anderes Sonderzeichen. Alle im Text verwendbaren Zeichen
sind in einer ASCII-Tabelle durch einen Wert von 0 bis 255 codiert. Die Funktion
214 5 Integrierte Analyse-Methoden

=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

Zur Bestimmung der Rückflüsse dient eine Liste (Bild 5-18).

Bild 5-18
Bestimmung
der
Rückflüsse
5.5 Datentabelle mit mehr als zwei Variablen 215

Tabelle 5-5 Bereichsnamen und Formeln zur Investition

Bereich Name Formel


B1 Werte =″-125.000 €″ & ZEICHEN(10) & ″5.000 €″
B2 LZeit
A5:A17 Jahr
B5:B17 Rückfluss
B5 =LINKS(Werte;-1+FINDEN(ZEICHEN(10);Werte))*1
B6:B17 =WENN(Jahr<=LZeit;
TEIL(Werte;FINDEN(ZEICHEN(10);Werte)+1;99)*1;0)
C5 =IKV(B5:B17)

In einer Datentabelle sollen nun zu den Variablen Investition, Rückfluss und Laufzeit, der
interne Zinsfuß und der Nettobarwert bestimmt werden (Bild 5-19).

Bild 5-19 Visualisierte Szenarien

Tabelle 5-6 Bereichsnamen und Formeln zur Datentabelle

Bereich Name Formel


E6:E17 Invest
F6:F17 Rück
216 5 Integrierte Analyse-Methoden

G5 =TEXT(IKV(Rückfluss);"0,0 %") & ZEICHEN(10) &


TEXT(NBW(6%;Rückfluss);"#.##0,00 €")
G6:G17 =TEXT(Invest;"#.##0,00 €") & ZEICHEN(10) &
TEXT(Rück;"#.##0,00 €")
Die Investitionen (Invest) und Rückflüsse (Rück) im Bereich E6:F17 stellen die Werte dar, die
untersucht werden sollen. Sie werden nach dem gleichen Prinzip zusammengefasst. Das
Ergebnis, das die Datentabelle ausgeben soll, wird in G5 bestimmt. Anschließend wird der
Bereich G5:R17 markiert und die Datentabelle aufgerufen.
Das Ergebnis (Bild 5-20) liefert mit drei Variablen gleich zwei Ergebnisse, die dazu aus der
Formelkonstruktion heraus formatiert werden.

Bild 5-20 Ergebnistabelle

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

Nach der Datum-Korrektur im Eingabefeld Prognoseende (31.12.2019) und dem Aufruf


Erstellen, legt die Methode ein zweites Arbeitsblatt mit den Daten als Datentabelle an. Ebenso
enthält das Arbeitsblatt die Visualisierung der Prognose als Liniendiagramm mit den
Konfidenzgrenzen (Bild 5-23).
218 5 Integrierte Analyse-Methoden

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.

Codeliste 5-7 Prozedur erstellt ein Prognoseblatt


Sub CreateForecast()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Umsatzdaten")
'Prognoseblatt und Chart erstellen
wshTemp.Range("A3").Select
wbkTemp.CreateForecastSheet _
Timeline:=Sheets("Umsatzdaten"). _
Range("A1:A29"), _
Values:=Sheets("Umsatzdaten").Range("B1:B29"), _
ForecastEnd:="31.12.2019", _
ConfInt:=0.95, _
Seasonality:=1, _
ChartType:=xlForecastChartTypeLine, _
Aggregation:=xlForecastAggregationAverage, _
DataCompletion:=xlForecastDataCompletionInterpolate, _
ShowStatsTable:=False
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
5.7 Lineare Optimierung 219

Alternativ lässt sich mit dem Charttyp xlForecastChartTypeColumn auch ein Säulendiagramm
(Bild 5-24) erstellen.

Bild 5-24
Säulendiagram
m zur Prognose

5.7 Lineare Optimierung


In vielen wirtschaftlichen Problemen gilt es für eine Ziel- und Kostenfunktion mit n Variablen
𝑓 = 𝑐 + 𝑐 𝑥 + 𝑐 𝑥 + ⋯+ 𝑐 𝑥 (5.1)
einen Extremwert (minimale Kosten, maximale Ausnutzung, usw.) zu finden, für die zusätzlich
gegebene Nebenbedingungen (Gleichungen oder Ungleichungen) erfüllt sind.
𝑎 𝑥 + 𝑎 𝑥 + ⋯+ 𝑎 𝑥 = 𝑎
𝑎 𝑥 + 𝑎 𝑥 + ⋯+ 𝑎 𝑥 = 𝑎 (5.2)
usw.
mit x1 > = 0, …, xn > = 0.
Zur Lösung gibt es einige Verfahren, wie z. B. die Simplex-Methode von Dantzig [14].
Als Anwendungsbeispiel betrachten wir die Herstellung von zwei Produkten P1 und P2, die auf
zwei Maschinengruppen M1 und M2 hergestellt werden (Tabelle 5-7). Die Produktion arbeitet
40 h/Woche und verfügt über vier Maschinen der Gruppe M1 und drei Maschinen der Gruppe
M2. Unter der Annahme, dass immer die ganze Produktion verkauft werden kann, ist der
maximale Gewinn gefragt.

Tabelle 5-7 Produktionsübersicht

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

Tabelle 5-8 Formeln zur Matrizenrechnung

Bereich Formel Bemerkung


D5 {=MDET(B2:C3)} Determinante<>0, es gibt eine Lösung
F2:F3 {=MMULT(MINV(B2:C3);D2:D3)} Matrizenmultiplikation

5.8 Deterministische Simulation


Deterministische Simulationen bieten sich besonders für gewöhnliche Differentialgleichungen
an, die in allen Wissensbereichen vorkommen. Sie beschreiben Zustandsänderungen von
Systemen und Modellen. Differentialgleichungen sind Gleichungen, in denen Funktionen und
ihre Ableitung vorkommen. Oft sind es Ableitungen nach der Zeit, ausgedrückt durch den
Differentialquotienten

≈ (5.7)

der zur Simulation angenähert durch einen Differenzenquotienten ersetzt wird. Mit kleinem Δt
erhält man zu Beginn der Simulation sehr gute Aussagewerte, die mit der Zeit immer größere
Abweichungen erfahren.

 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)

Die Differentialgleichung (5.8) in der Form

= 𝑘(𝐺 − 𝑓(𝑡)) (5.10)

stellen wir als Differenzengleichung um nach


∆𝑓 = 𝑘(𝐺 − 𝑓(𝑡)) ∙ ∆𝑡 (5.11)
so dass sich im Zeitraum Δt eine neue Kundenzahl
𝑓 = 𝑓 + ∆𝑓 (5.12)
bildet. Mithilfe einer Exceltabelle (Bild 5-27) betrachten wir einen Zeitraum von zwei Jahren
(728 Tage).
222 5 Integrierte Analyse-Methoden

Bild 5-27
Kundenwachstum

Tabelle 5-9 Formeln zum Kundenwachstum

Bereich Formel Bemerkung


B3 =0,00357143*(400-C2)*7 Kundenzunahme in 7 Tagen
C3 =C2+B3 Neue Kundenzahl

Die Visualisierung im Liniendiagramm (Bild 5-28) zeigt eine langsame Annäherung an die
Zielgröße.

Bild 5-28
Kundenwachstum

5.9 Probabilistische Simulation


Auch die Probabilistische Simulation verwendet den Differenzenquotienten für eine
schrittweise Berechnung. Doch hier spielt noch etwas Wichtigeres mit, ein Zufallsereignis. Um
dieses simulieren zu können, benötigen wir Pseudozufallszahlen. Pseudo deshalb, weil sie nicht
zufällig, sondern nach einer Methode entstehen. Pseudozufallszahlen erzeugt Excel im Intervall
(0,1) mit der Eigenschaft, dass bei einer hinreichenden Menge an Zufallszahlen, diese
gleichverteilt im Intervall sind. Gleichverteilt bedeutet, dass, egal in wie viele Teilintervalle
5.9 Probabilistische Simulation 223

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.

Tabelle 5-10 Liste der Zufalls-Funktionen

Excel-Funktion VBA-Anweisung Erläuterung


ZUFALLSZAHL RAND
Erstellt eine Pseudozufallszahl gleichverteilt im
Intervall (0,1)
ZUFALLSBEREICH RANDBETWEEN Erzeugt eine ganze Pseudozufallszahl im
festgelegten Bereich
RANDOMIZE Initialisiert den Zufallszahlengenerator
224 5 Integrierte Analyse-Methoden

Syntax zur ZUFALLSZAHL-Funktion:


=ZUFALLSZAHL ()
Syntax zur ZUFALLSBEREICH-Funktion:
=ZUFALLSBEREICH (Untergrenze;Obergrenze)
Syntax zur RANDOMIZE-Funktion:
=RANDOMIZE ([Zahl])
Nun kommt das Zufallsereignis, bzw. die Wahrscheinlichkeit für das Auftreten eines
Ereignisses ins Spiel. Wir alle kennen die Zählungen an Straßen, mit denen die Häufigkeit des
Fahrzeugaufkommens über die Zeit gemessen wird. Bei einem hinreichend kleinen Intervall,
kann man dann z. B. von einer Wahrscheinlichkeit 0,3 Fahrzeuge / Minute sprechen. Das
bedeutet, dass in drei oder spätestens vier Minuten mit einem Fahrzeug zu rechnen ist, dies
aber nicht unbedingt sein muss. Nur bei einem hinreichend großen Zeitraum wird es im
Mittelwert so sein. Diese Wahrscheinlichkeiten müssen für eine Probabilistische Simulation
bekannt sein.

 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

Tabelle 5-11 Formeln in der Simulation

Bereich Name/Hinweis Formel


B1 Produktionszeit
B2 Umsatz
B3 Ausfallwahrscheinlichkeit
B4 Reparaturzeit
B5 Betrachtungszeitraum
E3 auf E4:E162 übertragen =WENN(ZUFALLSZAHL()<=
Ausfallwahrscheinlichkeit;Reparaturzeit;0)
F3 auf F4:F162 übertragen =WENN(F2>0;F2-1+E3;F2+E3)
G3 auf G4:G162 übertragen =WENN(F3=0;G2+Umsatz/Produktionszeit;G2)
B7 =Umsatz*4
B8 =G162
B9 =B8/B7

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

Codeliste 5-8 Prozedur erstellt eine Probabilistische Simulation


'verwendete Bereichsnamen müssen existieren
Sub UmsatzSimulation()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim lRow As Long
Dim dx As Double

'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.

Tabelle 6-1 Liste der ergänzenden Analyse-Add-Ins-Methoden

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.

6.1 Installation des Analyse-Add-Ins


Vor der Nutzung eines Analyse-Tools muss das Analyse-Add-In installiert werden. Unter dem
Register Datei und dem Eintrag Optionen wird die Übersicht (Bild 6-1) der Excel-Optionen
aufgerufen. Der Eintrag Add-Ins zeigt eine Übersicht aktiver und inaktiver Add-Ins.

© 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

Bild 6-1 Analyse-Add-Ins installieren

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).

Codeliste 6-1 Prozedur erstellt ein Histogramm


Sub CreateHistogramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Messwerte")
'Histogramm
Application.Run "ATPVBAEN.XLAM!Histogram", _
wshTemp.Range("Tabelle1"), "Histogramm", _
wshTemp.Range("Tabelle2"), True, False, False, False
Set wshTemp = Nothing
'Pareto-Diagramm
Set wshTemp = wbkTemp.Worksheets("Histogramm")
wshTemp.Activate
Set shpTemp = wshTemp.Shapes.AddChart2(366, xlPareto)
Set chrTemp = shpTemp.Chart
6.2 Histogramm 231

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

Tabelle 6-2 Bereichsnamen und Formel zur HÄUFIGKEIT-Anwendung

Bereich Bereichsname Formel


B2:E20 Daten2
G2:G19 Klassen2
H2:H10 =HÄUFIGKEIT(Daten2;Klassen2)

Codeliste 6-2 Prozedur bestimmt die Klassenwerte mit der HÄUFIGKEIT-Funktion


Sub BestimmeKlassen()
ActiveSheet.Range("H2:H10").Select
Selection.FormulaArray = "=FREQUENCY(Daten2,Klassen2)"
End Sub

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

Codeliste 6-3 Prozedur erstellt einen Kenngrößenbericht


Sub CreateReport()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Messwerte")
'Histogramm
Application.Run "ATPVBAEN.XLAM!Descr", _
ActiveSheet.Range("Tabelle1"), _
"Kenngrößen", "C", False, True, 1, 1, 95
Set wshTemp = Nothing
'Report-Design
Set wshTemp = wbkTemp.Worksheets("Kenngrößen")
With wshTemp
.Activate
.Columns("B:C").EntireColumn.Hidden = True
.Columns("E:E").EntireColumn.Hidden = True
.Columns("G:G").EntireColumn.Hidden = True
.Columns("I:I").EntireColumn.Hidden = True
.Range("A1").ClearContents
.Range("D1").FormulaR1C1 = "W1"
.Range("F1").FormulaR1C1 = "W2"
.Range("H1").FormulaR1C1 = "W3"
.Range("J1").FormulaR1C1 = "W4"
End With
'aufräumen
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub
234 6 Ergänzende Analyse-Methoden

6.4 Regression und Korrelation


Mitunter vermutet man eine funktionale Beziehung zwischen zwei Einflussfaktoren, zum
Beispiel zwischen Erfolgsaussicht und Risiko (Bild 6-12) zur Erreichung unterschiedlicher
Ziele.

 XCT_06-03_RegressionKorrelation.xlsm

Bild 6-12
Einflussfaktoren

Tabelle 6-3 Bereichsnamen und Formeln zu 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

Einfügen einer Trendlinie:


 Markieren der Datenpunkte
 Im Kontextmenü Trendlinie hinzufügen
 Trendlinienoption Linear
 Formel im Diagramm anzeigen

Angezeigt wird die lineare Gleichung


Risiko = 0,35 * Erfolgsaussicht + 28,65.
Die VBA-Prozedur Punktdiagramm (Codeliste 6-4) erzeugt das Punktdiagramm mit
Trendlinie.

Codeliste 6-4 Prozedur erstellt ein Punktdiagramm mit Trendlinie


Sub Punktdiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shptemp As Shape
Dim chrTemp As Chart
Dim rngTemp As Range

'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).

Bild 6-15 Regressionsanalyse

Codeliste 6-5 Prozedur erstellt eine Regressionsanalyse


Sub Regressionsanalyse()
Application.Run _
"ATPVBAEN.XLAM!Regress", _
ActiveSheet.Range("Risiko"), _
ActiveSheet.Range("Erfolg"), _
False, False, , "Regression", False, False, _
False, False, , False
End Sub

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

Codeliste 6-6 Prozedur erstellt eine Korrelationsanalyse


Sub Korrelationsanalyse()
Application.Run _
"ATPVBAEN.XLAM!Mcorrel", _
ActiveSheet.Range("Daten"), _
"Korrelation", "C", False
End Sub

6.5 VBA-Funktion Korrelationsmatrix.


Liegen mehr als zwei Wertepaare vor, dann lässt sich die nachfolgende Matrix-Funktion zur
Bestimmung der Korrelationsmatrix verwenden. Die vorliegende Beispiel-Tabelle (Bild 6-18)
zeigt Werte der Merkmale p1, p2 und p3 für 15 Individuen.

XCT_06-04_Korrelationsmatrix.xlsm
238 6 Ergänzende Analyse-Methoden

Bild 6-18
Beispiel einer
Merkmalstabelle

Tabelle 6-4 Bereichsname zur 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.

Codeliste 6-7 Prozedur erstellt eine Korrelationsanalyse


Public Function KorMat(ByVal Rng As Excel.Range) As Double()
Dim i As Integer, j As Integer
Dim n As Integer 'Anzahl der Attribute
Dim c1 As Range, c2 As Range

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

Tabelle 6-5 Bereichsnamen und Formeln zum Funktionsschema

Bereich Bereichsname Formel


A2:A9 x_
B2:B9 y_
D2 a_
E2 b_
F2 c_
G2 d_
H2:H9 f_ =a_*x_^3+b_*x_^2+c_*x_+d_
I2:I9 u_ =y_-f_
J2:J9 uu_ =u_^2
J11 Ergebnis =SUMME(uu_)
D2:G2 Koeffizienten

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

Bild 6-23 Solver-Parameter

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

Bild 6-24 Meldung vom Solver

Nach fünf Iterationen ist das Ergebnis gefunden (Bild 6-25). Beide Funktionen sind nahezu
deckungsgleich.

Bild 6-25
Ergebnis
vom Solver

Demnach lautet das Approximationspolynom:


𝑦 = 0,00008 ∙ 𝑥 − 0,021 ∙ 𝑥 + 1,5412 ∙ 𝑥 + 52,286. (6.2)
243

7 Excel Power Plattform


Mit den letzten Excel-Versionen ist der Begriff Excel Power User oder Excel Power BI
aufgekommen. BI ist das Akronym für Business Intelligence und damit beschreitet Excel einen
Weg als Werkzeug zur effektiveren Gestaltung von Geschäftsdaten und ihrem Reporting. Dass
sich mit jeder Excel-Version integrierte und externe Methoden (Add-Ins) ändern deutet auf
einen Entwicklungsprozess hin. Ich beziehe mich in diesem Buch auf die Excel Version 2016
und selbst da gibt es Unterschiede zwischen den verschiedenen Ausprägungen. So befindet
sich Power Pivot nur in der Professional Ausgabe.
Die Ziele von Power BI sind:
 Verschiedene Datenquellen einzubinden
 Datenaufbereitung mit Pivot-Tabellen durchzuführen
 Erstellung von Reports zur internen Kommunikation
 Visualisierte Analysen im Rahmen von BI zu erstellen
 Neue grafische Ausdrucksmittel zu finden
Momentan gibt es diese Begriffe zum Thema Power BI:
 Power BI Desktop
 Power View
 Power Map
 Power Publisher
 Power Query
 Power Pivot
Dabei sind die Tools und Begriffe View (nicht mehr gepflegt) und Map nicht wirklich klar.

7.1 Power BI Desktop


Power BI Desktop ist ein von Microsoft kostenlos zur Verfügung gestelltes eigenständiges
Tool, das nach dem Download und der Installation gestartet werden kann. Mit dem Tool lassen
sich Verbindungen zu lokalen Datenbanken, Excel-Arbeitsmappen und vieles mehr bis hin zu
Clouddiensten herstellen. Es erlaubt die Bereinigung von Daten, wie Aufteilen und
Umbenennung von Spalten und die Änderung von Datentypen. Außerdem lassen sich
Relationen zwischen Spaltenelementen durchführen.

 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.

Bild 7-1 Der Navigator des Power BI Desktop

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.

Bild 7-3 Beziehungen verwalten

Nachdem die Beziehungen erstellt wurden, können in der Datenansicht die erforderlichen
Berechnungen ausgeführt werden (Bild 7-4).

Bild 7-4 Neue Spalten berechnen


246 7 Excel Power Plattform

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).

Bild 7-6 Neue Beziehung durch den Produkt-Schlüssel


7.1 Power BI Desktop 247

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

In den Formeln wurden DAX-Funktionen (RELATED, VALUES, SUMX,


RELATEDTABLE) verwendet. DAX (Data Analysis Expressions) ist eine Sammlung von
Funktionen, Operatoren und Konstanten zum Lösen von Berechnungen und Daten-
Analyseproblemen. DAX ist auch eine Formelsprache, so dass bei ihrer Anwendung eine
Syntax beachtet werden muss. Wenn auch das Importieren von Daten, ihre Transformationen
und die Erstellung eines Berichts ohne DAX auskommt, so können mit DAX die Daten optimal
genutzt werden. Hier tiefer einzusteigen, würde den Rahmen dieses Buches sprengen. Denn in
Power BI Desktop können auch R-Skripte ausgeführt und die daraus resultierenden Datasets
ins Datenmodell importiert werden. Dieses Thema müsste dann auch behandelt werden und das
ist Stoff genug für mehr als ein Buch.
Wir wollen uns abschließend noch mit der Berichtsansicht befassen, der eigentlichen Stärke
von Power BI Desktop. Neben der grafischen Arbeitsfläche befinden sich die Spalten
Visualisierungen und Felder. In Felder stehen die Tabellen mit ihren Feldelementen (Bild 7-8).

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.

7.2 Power Map


Das Tool Power Map ist standardmäßig als Add-In in Excel zu finden. Unter dem Register
Daten mit der Auswahl Optionen unter Add-Ins wird eine Übersicht vorhandener Add-Ins
angezeigt. Im Fußbereich der Übersicht ist es unter Verwalten als COM-Add-In (Bild 7-13) zu
finden.

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

Unter Tour kann dazu auch ein Video erstellt werden.


Inzwischen verfügt Power Map über die Möglichkeit, neben Kartenmaterial auch Grundrisse
und Bilder als Hintergrund zu verwenden. Damit ergeben sich vielfältige neue
Anwendungsmöglichkeiten. Auch dazu ein einfaches Beispiel.

 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

Und auch hier wird ein Video erstellt:

 XCT_07-05_PowerMap.mp4

7.3 Power Query


Mit Power Query können Daten verbunden, transformiert, kombiniert und freigegeben werden.
Ähnlich, wie wir es bereits unter MS Query durchgeführt haben, nur eben etwas eleganter.
7.3 Power Query 255

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.

7.4 Power Pivot


Um Power Pivot nutzen zu können, muss das Add-In ebenfalls unter Com-Add-Ins
freigeschaltet werden. Danach besitzt Excel eine weitere Registerkarte PowerPivot. Unter
dieser Registerkarte kann das PowerPivot-Fenster aufgerufen werden.
7.4 Power Pivot 257

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.

Bild 7-27 Datentabelle mit Diagramm im Arbeitsblatt

Wir übernehmen alle Spalten der beiden Datentabellen Personalkosten und Maschinenkosten.

Bild 7-28 Auszug aus der Tabelle Personalkosten

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.

Bild 7-30 Tabelle Personalkosten mit berechneten Spalten

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.

Tabelle 7-1 Formeln in den ergänzten Spalten

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

Durch Markieren der Zelle im Berechnungsbereich und der Eingabe von


SumLKosten:=SUM([LKosten]), (7.6)
wird das Ergebnis eingestellt. Gleichzeitig existiert dadurch ein neues Element in der Feldliste,
das in einer Pivot-Tabelle verwendet werden kann (Bild 7-37).

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.

8.1 Grundlegende Methoden


Grundlegende Methoden helfen, strategische Ziele zu formulieren, ein strategisches
Management einzuführen und ein erfolgreiches Konzept zu optimieren durch permanent
kritische Betrachtung.
8.1.1 Prozessreife-Bestimmung
Prozesse werden quantitativ durch eine Prozessbewertung und qualitativ durch eine
Prozessbeurteilung gemessen. Zusammen bestimmen sie die Prozessreife. Dokumentiert wird
sie im Allgemeinen in tabellarischer und grafischer Form. Solche Berichte sind ein Maß für die
Beurteilung der Prozessqualität und den Prozessnutzen in einem Unternehmen.

 XCT_08-01_Reifegrad.xlsm

Ein einfacher Bericht wird durch Gruppierungen übersichtlicher (Bild 8-1).

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

Tabelle 8-1 Formeln für die Bewertungstabelle

Bereich Formel Benutzerdefinierte


Zellformatierung
C8 =ANZAHL2(C3:C7) ;;
D8 =ANZAHL2(D3:D7) ;;
E8 =ANZAHL2(E3:E7) ;;
F8 =ANZAHL2(F3:F7) ;;
G8 =ANZAHL2(G3:G7) ;;
H8 =SUMME(D8/4+E8/2+3*F8/4+G8)/ANZAHL2(A3:A7) 0,0%
H2 =MITTELWERT(H8;H12;H18;H22;H28;H32;H35;H39) Bedingte Formatierung
8.1 Grundlegende Methoden 265

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.

Codeliste 8-1 Ereignis-Prozedur verhindert eine Mehrfacheingabe in den Bewertungsfeldern


Private Sub Worksheet_Change(ByVal Target As Range)
Dim iCol As Integer
If Target.Column >= 3 And Target.Column <= 7 And _
Target.Interior.ColorIndex = 19 Then
Application.EnableEvents = False
For iCol = 3 To 7
If Not iCol = Target.Column Then
Cells(Target.Row, iCol) = ""
End If
Next iCol
Application.EnableEvents = True
End If
End Sub

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

Bild 8-5 Diagramm zum Reifegrad

8.1.2 Die VMI-Matrix


Die VMI-Matrix ist eine nützliche Hilfe bei der Prozessplanung. Die Buchstaben VMI stehen
für den Status, den die Mitarbeiter an einem Prozess haben.
 V steht für Verantwortung, die ein Mitarbeiter zur Erreichung eines Zieles unter
Einhaltung der Termine und Ressourcenvorgaben hat.
 M steht für Mitwirkung, die ein Mitarbeiter zuerst nach Anweisungen, aber auch nach
Eigeninitiative und Eigenverantwortung leistet.
 I steht für Informationen, die ein Mitarbeiter zu Ereignissen und zum Ergebnis eines
Arbeitspaketes erhält, ohne seine Mithilfe. Die Bringschuld liegt beim
Prozessverantwortlichen.

 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

Codeliste 8-2 Ereignis-Prozedur reagiert auf die Änderung von Zellinhalten


Private Sub Worksheet_Change(ByVal Target As Range)
Dim iRow As Integer
Dim iCol As Integer
iRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
iCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
If Target.Row <= iRow And Target.Column <= iCol Then
Select Case Target.Value
Case "V"
Target.Interior.ColorIndex = 4
Case "M"
Target.Interior.ColorIndex = 8
Case "I"
Target.Interior.ColorIndex = 6
Case Else
Target.Interior.ColorIndex = 0
End Select
End If
End Sub

Sind alle Zuordnungen getroffen, dann liefert die Prozedur Zählung (Codeliste 8-3) ein
Säulendiagramm mit Prozentangaben (Bild 8-7).

Codeliste 8-3 Ereignis-Prozedur reagiert auf die Änderung von Zellinhalten


Sub Zählen()
Dim rngTemp As Range
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim iRow As Integer
Dim iCol As Integer
Dim dAll As Double
Dim dV As Double
Dim dM As Double
Dim dI As Double
268 8 Strategisches Prozess-Controlling

Dim sData As String


'altes Diagramm löschen
ActiveSheet.DrawingObjects.Delete
'Auswertung
iRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
iCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
dAll = (iRow - 1) * (iCol - 1)
Set rngTemp = Range(Cells(1, 1), Cells(iRow, iCol))
dV = Evaluate("COUNTIF(" & rngTemp.Address & ",""V"")")
dV = dV / dAll * 100
dV = Format(dV, "#0.0")
dM = Evaluate("COUNTIF(" & rngTemp.Address & ",""M"")")
dM = dM / dAll * 100
dM = Format(dM, "#0.0")
dI = Evaluate("COUNTIF(" & rngTemp.Address & ",""I"")")
dI = dI / dAll * 100
dI = Format(dI, "#0.0")
'Daten an Bereichsnamen
sData = "{" & Str(dV) & ";" & Str(dM) & ";" & Str(dI) & "}"
sData = Replace(sData, ";", ",")
ThisWorkbook.Names("Daten").RefersTo = sData
'Diagramm
Set shpTemp = ActiveSheet.Shapes.AddChart2(410, xlColumn)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngTemp
.HasTitle = True
.ChartTitle.Text = "Verteilung"
.Legend.Delete
.SeriesCollection(1).Delete
.SeriesCollection.NewSeries.Values = [Daten]
With .FullSeriesCollection(1)
.Points(1).Format.Fill.ForeColor.RGB = vbGreen
.Points(2).Format.Fill.ForeColor.RGB = vbCyan
.Points(3).Format.Fill.ForeColor.RGB = vbYellow
.XValues = "={""V"",""M"",""I""}"
.DataLabels.ShowValue = True
.DataLabels.ShowCategoryName = False
.DataLabels.Position = xlLabelPositionInsideEnd
.DataLabels.Format.Fill.ForeColor.RGB = vbBlack
End With
End With
'aufräumen
Set rngTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub

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

 Hat eine Person wenig Leerraum, ist sie dann überlastet?


 Bei vielen I, müssen alle wirklich davon wissen?

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).

Tabelle 8-2 SWOT-Begriffe und Erläuterungen

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

W für Schwächen, wie hohe Herstellkosten, mögliche Qualitätsmängel, lange


Weaknesses Entwicklungszeit etc.
O für Chancen, wie der Konkurs eines Mitbewerbers, ein neuer Absatzmarkt, etc.
Opportunities
T für Threats Risiken, wie ein neues Gesetz, Verbot bestimmter Materialien, Verdrängung
durch neue Technologie, etc.
Die SWOT-Methode bietet einen Algorithmus zur automatischen Gewinnung von Strategien
(Bild 8-9).

Bild 8-9 Aus den Begriffen abgeleitete Strategien

 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.

Tabelle 8-3 Bereichsnamen zum Beispiel

Bereich Bereichsname
A3:B12 Intern
A14:B23 Extern

Codeliste 8-4 Ereignis-Prozedur reagiert auf die Änderung von Zellinhalten


Sub CreateNetz()
'Charts löschen
ActiveSheet.DrawingObjects.Delete
'Chart Intern
With ActiveSheet
.Range("Intern").Select
.Shapes.AddChart2(317, xlRadarMarkers).Select
End With
ActiveChart.ChartTitle.Caption = "Intern"
8.1 Grundlegende Methoden 271

'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

Codeliste 8-5 Prozedur erzeugt ein vertikales Liniendiagramm


Sub WettbewerbsAnalyse()
'löscht ein evtl. vorhandenes Diagramm
ActiveSheet.DrawingObjects.Delete
'erstellt ein geschachteltes Balkendiagramm
Range("Liste").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select
With ActiveChart
'Datenbereich
.SetSourceData Source:=Range("Liste")
'Achsenlage bestimmen
.Axes(xlValue).CrossesAt = 0
.Axes(xlCategory).CrossesAt = 1
.Axes(xlValue).Crosses = xlMaximum
'Werte vertauschen
.FullSeriesCollection(3).XValues = Range("eigenes_Unternehmen")
.FullSeriesCollection(3).Values = Range("Position")
.FullSeriesCollection(4).XValues = _
Range("stärkster_Wettbewerber")
.FullSeriesCollection(4).Values = Range("Position")
'Achsen zuordnen
.FullSeriesCollection(3).AxisGroup = 2
.FullSeriesCollection(4).AxisGroup = 2
.FullSeriesCollection(1).AxisGroup = 1
'vertikale Achswerte vertauschen und begrenzen
.Axes(xlValue, xlSecondary).ReversePlotOrder = True
.Axes(xlValue, xlSecondary).MinimumScale = 1
.Axes(xlValue, xlSecondary).MaximumScale = 9
'Positionsfunktion löschen
.FullSeriesCollection(2).Delete
'ersten Eintrag in der Legende löschen
.Legend.LegendEntries(1).Delete
'Diagrammtitel
.ChartTitle.Text = "Wettbewerbsanalyse"
'Diagrammtyp der Datenreihe Hilfsspalte in Balkendiagramm umwandeln
.FullSeriesCollection(1).ChartType = xlBarClustered
'Y-Werte anpassen
.Axes(xlCategory).TickMarkSpacing = 1
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlCategory).AxisBetweenCategories = False
End With
End Sub

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

Als Process Performance Indicators (PPI) werden Schlüsselzahlen bezeichnet, die


Prozessparameter wiedergeben wie zum Beispiel:
 Dauer
 Kosten
 Kapazität
 Auslastung
 Anzahl Fehler/Ausschuss

8.2.1 Key Performance Indicators


Manager und Controller verlieren bei all den Vorgaben und Zielen leicht die Übersicht darüber,
was wirklich wichtig ist. Daher sind wenige und einfache Kennzahlen, die eine erbrachte
Leistung einstufen, wichtig. Sie werden als Key Performance Indicators (KPI) bezeichnet. Mit
diesen Leistungsindikatoren lassen sich einzelne Mitarbeiter, ein Team, eine Abteilung oder
ein Unternehmen messen. Es sollten allerdings möglichst wenige Indikatoren für einen Bereich
8.2 Kennzahlen 275

definiert werden. Andererseits reichen einzelne Kennzahlen in Unternehmen zur Beurteilung


nicht aus.
In der kpilibrary.com haben Unternehmen aus unterschiedlichen Branchen und Manager aus
unterschiedlichen Bereichen tausende möglicher KPIs hinterlegt. Hier einige Beispiele daraus:
Entwicklung
 Anzahl positiv abgeschlossener Prozesse pro Jahr
 Anzahl in der Fertigung übernommener Prozesse in Prozent
 Anzahl aufgenommener Ideen pro Geschäftsjahr
 Anzahl der Änderungen an den Zielvorgaben

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).

Tabelle 8-4 Formeln in der Matrix

Bereich Formel Bemerkung


A2 =RGP(F2:M2) RGP bestimmt die Steigung der Trendlinie
A4 =RGP(F4:M4)
A6 =RGP(F6:M6)
A8 =RGP(F8:M8)
A10 =RGP(F10:M10)
A12 =RGP(F12:M12)
A14 =RGP(F14:M14)

Bild 8-16 KPI Reporting-Matrix

Tabelle 8-5 Bedingte Formatierung in der Matrix

Bereich Regel Farbe / Symbol


=$A$14;$A$12; Wenn Wert Grüner Pfeil nach oben
$A$10;$A$8;$A$6; Wenn < 0,2 Gelber Pfeil nach rechts
$A$4;$A$2 Wenn < -0,2 Roter Pfeil nach unten
F2:M2 =F$2<=F$3 Gelb
F2:M2 =F$2>F$3 Grün
F4:M4 =F$4<=F$5 Grün
F4:M4 =F$4>F$5 Gelb
F6:M6 =F$6<F$7 Gelb
F6:M6 =F$6>=F$7 Grün
F8:M8 =F$8<=F$9 Grün
F8:M8 =F$8<=F$9*1,1 Gelb
8.2 Kennzahlen 277

F8:M8 =F$8>F$9 Rot


F10:M10 =F$10<F$11 Rot
F10:M10 =F$10>=F$11 Grün
F12:M12 =F$12>F$13*1,1 Gelb
F12:M12 =F$12<=F$13*1,1 Grün
F14:M14 =F$14<=F$15 Grün
F14:M14 =F$14<=F$15*1,1 Gelb
F14:M14 =F$14>F$15*1,1 Rot

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.

Bild 8-17 DuPont-Kennzahlenpyramide zum Return On Investment (ROI)


278 8 Strategisches Prozess-Controlling

Bild 8-18 DuPont-Schema zur Bestimmung von ROI

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

Es ist möglich, auf den ersten Blick grundverschiedene, nicht vergleichbare


unternehmensspezifische Prozesse in ihre Teilprozesse und Aktivitäten zu zerlegen und auf
dieser Basis Vergleiche zwischen Unternehmen aus gänzlich unterschiedlichen Branchen zu
8.2 Kennzahlen 279

erlangen. Diese Unternehmen sollten zweckmäßigerweise im direkten Wettbewerb stehen und


somit möglichst in der gleichen Branche sein. Das Ergebnis sind relevante Prozessparameter in
absoluten Zahlen: besser – gleichwertig – schlechter.
Mit einer einfachen Matrix lassen sich Prozesse oder Teilprozesse nach unterschiedlichen
Kriterien beurteilen. Mit der Gewichtung der Kriterien werden die Bewertungen noch
deutlicher.

 XCT_08-07_Benchmarking.xlsm

Bild 8-20
Beispiel einer
gewichteten
Benchmarking-
Matrix

Tabelle 8-6 Bereiche und Formeln in der Benchmarking-Matrix

Bereich Bereichsname Formel Hinweis


D3:I10 Matrix
J3:J10 Punkte
J3 =SUMME(D3:I3) nach J4:J10 übertragen
K3:K10 Wichte
=C3*(D3*D$2+E3*E$2+F3*F$2+ nach K4:K10 übertragen
K3
G3*G$2+H3*H$2+I3*I$2)
L3 =RANG(K3;Wichte) nach L4:L10 übertragen
D11 =SUMME(D3:D10)*D2 nach E11:I11 übertragen
Zur Visualisierung markieren wir nacheinander drei Bereiche und erzeugen drei Pareto-
Diagramme (Bild 8-21, Bild 8-22 und Bild 8-23).

Tabelle 8-7 Bereiche und Diagramme

Wertebereich Beschriftungsbereich Pareto-Diagramm


D11:I11 D1:I1 Gewichtetes Firmenranking
J3:J10 A3:A10 Ungewichtetes Prozessranking
K3:K10 A3:A10 Gewichtetes Prozessranking
280 8 Strategisches Prozess-Controlling

Bild 8-21
Gewichtetes
Firmenranking

Bild 8-22
Ungewichtetes
Prozessranking

Bild 8-23
Gewichtetes
Prozessranking

8.2.4 Balanced Scorecard


Die Balanced Scorecard (kurz BSC) ist ein hervorragendes Instrument zur strategischen
Ausrichtung eines Unternehmens. Sie bringt die Strategie eines Unternehmens auf
anschauliche Weise ihren Mitarbeitern näher (Bild 8-24).
8.2 Kennzahlen 281

Bild 8-24 Die vier Perspektiven der Balanced Scorecard

 XCT_08-08_BalancedScoreCard.xlsm

Wir betrachten eine einfache BSC mit Aktionsplan (Bild 8-25).

Bild 8-25 Einfache Balanced Scorecard mit Aktionsplan

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.

Bild 8-26 Einzelne Balanced Scorecards

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

Tabelle 8-8 Bereiche und Diagramme

Bereich Regel Format


$F$3:$I$3 F$3>=$E$3 Grün
$F$3:$I$3 F$3>=$D$3 Gelb
$F$3:$I$3 F$3<$D$3 Rot
Eine VBA-Prozedur soll eine Gesamtübersicht erstellen, die für jedes Quartal eine Kennzahl
erbringt, die sich aus dem Mittelwert von Quartalswert / Zielwert aller Einträge einer Karte
bestimmen.

Codeliste 8-6 Prozedur erzeugt eine Gesamtauswertung mit Säulendiagramm


Sub GesamtBSC()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim sTable(4) As String
Dim iCount As Integer
Dim iRow As Integer
Dim iRowMax As Integer
Dim iCol As Integer
Dim dDiv1 As Double
Dim dDiv2 As Double
Dim dSum As Double
Dim dAll(4, 4) As Double

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

wshTemp.Cells(iRow, iCol) = dAll(iRow, iCol)


Next iRow
Next iCol
'Diagramm
wshTemp.Range("A1:D4").Select
wshTemp.Shapes.AddChart2(307, xlColumnClustered).Select
With ActiveChart
.SetSourceData Source:=wshTemp.Range("$A$1:$D$4")
.HasTitle = True
.ChartTitle.Text = "Auswertung BSC"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Quartale"
.FullSeriesCollection(1).Name = "=""Finanzen"""
.FullSeriesCollection(2).Name = "=""Kunden"""
.FullSeriesCollection(3).Name = "=""Prozesse"""
.FullSeriesCollection(4).Name = "=""Lernen & Entwicklung"""
.SetElement (msoElementLegendRight)
End With
'aufräumen
Set wshTemp = Nothing
Set wbkTemp = Nothing
End Sub

Die Visualisierung (Bild 8-27) erfolgt mit einem gruppierten Säulendiagramm.

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:

Tabelle 8-9 Kennzahl für die Schnelligkeit des Controllings

Bezeichnung: Termintreue Ziel: Termintreue Informationen

Berechnung: Einheit: Prozent


Zum Termin vorgelegte Anzahl
Standardberichte / Anzahl gesamter
Berichte * 100

Aussage: Verbindlichkeit des Reportings Interpretationshinweis: Kann auch Indikator für


Ressourcenengpässe im Reporting-Prozess oder
in den vorangegangenen Prozessen sein.

Tabelle 8-10 Kennzahl für die Effizienz des Controllings

Bezeichnung: Kosten der Controller- Ziel: adäquater Ressourceneinsatz / Kosten auf


Organisation (Umsatz) Benchmark-Niveau

Berechnung: Einheit: Prozent


Kosten der Controller-Organisation
(EUR) / Umsatz (EUR) * 100

Aussage: Effizienz des Controllings (bei Interpretationshinweis: Alle internen Kosten


gleichbleibendem qualitativem Output) sind zu berücksichtigen; Umsätze bei
unbeständigen Preisen sind nur beschränkt
aussagekräftig.

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

Tabelle 8-11 Beispiel einer Reporting-Liste

Empfänger Inhalt Form Verantwortlich Intervall

GL Laufende Entwicklungen Balkendiagramme Leiter SW-Entwicklung mtl.


Verkaufte Lizenzen Leiter Vertrieb mtl.
Wartungsverträge Leiter Technik mtl.

Leiter Anzahl Projekte (MS) Kreisdiagramm Prozessmanager 14tg.


SW-Entw. MS-Bericht SW Plan/Ist Balk.dia. Entwicklung 14tg.

Entwickler Einhaltung der MS MTA Prozessmanager wöchtl.


Entwicklung

Leiter Abgeschl. Projekte Kreisdiagramm Prozessmanager 14tg.


Vertrieb Mitarb. Zielerreichung Soll/Ist Balkendia. Vertrieb 14tg.

Vertriebs- Abschlüsse Produktgrp. Kreisdiagramm Prozessmanager wöchtl.


MA Vertrieb

Leiter durchgef. Wartungen Soll/Ist Balkendia. Prozessmanager wöchtl.


Technik Reklamationen/Region Kreisdiagramm Technik tägl.

Techniker durchgef. Wartungen Soll/Ist Balkendia. Prozessmanager wöchtl.


Reklamationen Zielwrt Balkendia. Technik tägl.

Viele Unternehmen sind inzwischen weit über das Reporting hinaus in der Welt des BI
angekommen.

8.3 Kostenrechnerische Analysen


8.3.1 Prozesskostenrechnung
Die Prozesskostenrechnung ist eine Weiterführung der Zuschlagskalkulation, die auch als
Activity Based Costing oder als Cost Driver Accounting bezeichnet wird. Bei der üblichen
Zuschlagskalkulation werden die Gemeinkosten entsprechend der vorhandenen Einzelkosten
aufgeteilt.

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

Tabelle 8-12 Bereichsnamen und Formeln

Bereich Bereichsname Formel


B1 GK_1
B3:D3 Stück_1
B4:D4 EK_1
B5:D5 Prozesse_1
B7:D7 GK_Anteil_1 =EK_1*GK_1/SUMMENPRODUKT(Stück_1;EK_1)
B8:D8 =EK_1+GK_Anteil_1
Die Nachteile dieser Kalkulation sind oft relativ hohe Zuschlagssätze und der Eindruck, dass
die Gemeinkosten durch die Einzelkosten verursacht werden. Daher werden, wenn bekannt, die
Prozesse zur Gemeinkostenverteilung herangezogen (Bild 8-29).

Bild 8-29
Verteilung der
Gemeinkosten in der
Prozesskostenrechnung
288 8 Strategisches Prozess-Controlling

Tabelle 8-13 Bereichsnamen und Formeln

Bereich Bereichsname Formel


B1 GK_2
B3:D3 Stück_2
B4:D4 EK_2
B5:D5 Prozesse_2
B7:D7 GK_Anteil_2 =Prozesse_2*GK_2/SUMMENPRODUKT(Stück_2;Prozesse_2)
B8:D8 =EK_2+GK_Anteil_2
Die Visualisierung (Bild 8-30) zeigt den Unterschied zwischen den beiden Methoden. Die
Prozedur Zuschlagsvergleich (Codeliste 8-7) erzeugt ein eigenständiges Diagrammblatt.

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

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Prozesskostenrechnung")
Set rngTemp1 = wshTemp.Range("B7:D7")
Set rngTemp2 = Worksheets("Zuschlagskalkulation").Range("B7:D7")
Set shpTemp = wshTemp.Shapes.AddChart2(201, xlColumnClustered)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngTemp1
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = _
"=""Zuschlagskalkulation"""
.FullSeriesCollection(2).Values = _
"=Zuschlagskalkulation!$B$7:$D$7"
.FullSeriesCollection(2).XValues = _
"=Prozesskostenrechnung!$B$2:$D$2"
.SetElement (msoElementLegendBottom)
.HasTitle = True
.ChartTitle.Text = "Zuschlagsvergleich"
.Location Where:=xlLocationAsNewSheet, _
Name:="Zuschlagsvergleich"
ActiveSheet.Move After:=Worksheets(Worksheets.Count) End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set rngTemp1 = Nothing
Set rngTemp2 = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
8.3 Kostenrechnerische Analysen 289

Bild 8-30
Zuschlags-
Vergleich

8.3.2 Gewinn- und Verlustrechnung (GuV)


Die GuV ist allgemein eine Gegenüberstellung der Aufwendungen und Erträge über einen
festgelegten Zeitraum. Dieser Ansatz gilt auch für Prozesse. Der Aufbau einer GuV kann
unterschiedlich ausfallen, entweder in Konto- oder in Staffelform.

 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.

Codeliste 8-8 Prozedur erzeugt ein Verbunddiagramm


Sub GuVKontoform()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngTemp As Range
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("GuV Kontoform")
wshTemp.Activate
Set rngTemp = wshTemp.Range("B2:B13,D2:D13")
rngTemp.Select
Set shpTemp = wshTemp.Shapes.AddChart2(201, xlColumnClustered)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=rngTemp
8.3 Kostenrechnerische Analysen 291

.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.

Codeliste 8-9 Prozedur erzeugt ein Wasserfalldiagramm


Sub GuVStaffelform()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim rngTemp As Range
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("GuV Staffelform")
wshTemp.Activate
292 8 Strategisches Prozess-Controlling

Set rngTemp = wshTemp.Range("B2:C13")


rngTemp.Select
Set shpTemp = wshTemp.Shapes.AddChart2(395, xlWaterfall)
Set chrTemp = shpTemp.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
.Points(12).IsTotal = True
End With
.HasTitle = True
.ChartTitle.Caption = "GuV in Stapelform"
End With
Set chrTemp = Nothing
Set shpTemp = Nothing
Set wshTemp = Nothing
Set wbkTemp = Nothing
End Sub

Bild 8-34
Beträge im
Wasserfalldiagramm

8.3.3 Deckungsbeitragsrechnung (DBR)


Ergebnisse aus internen Erfolgrechnungen stellen Daten für Entscheidungen in Unternehmen
bereit. Eine sehr beliebte Methode ist die Deckungsbeitragsrechnung. Der Deckungsbeitrag ist
die Differenz aus Verkaufserlös und variablen Stückkosten.
Es wird noch zwischen stückbezogenen
db = Stückpreis – variable Stückkosten (8.1)
8.3 Kostenrechnerische Analysen 293

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).

Bild 8-35 Beispiel einer einstufigen Deckungsbeitragsrechnung

In den einzelnen Produkt-Arbeitsblättern erhalten die Wertebereiche jeweils die


Bereichsnamen ProduktA, ProduktB und ProduktC. Im Arbeitsblatt Einstufig DBR werden die
einzelnen Berechnungsbeträge durch die Methode Positionen konsolidieren zusammengefasst.
Von dem daraus entstandenen Gesamt-Deckungsbeitrag werden die fixen Kosten des
Unternehmens subtrahiert, um das Gesamt-Betriebsergebnis zu erhalten. Ausgeführt wird diese
Aktion mithilfe der Prozedur EinDBR (Codeliste 8-10), die gleichzeitig ein Wasserfall-
Diagramm erzeugt (Bil 8-36).
294 8 Strategisches Prozess-Controlling

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

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Einstufige DBR")
With wshTemp
.Activate
.Range("C2:C8").Select
Selection.Consolidate Sources:=Array( _
"ProduktA", "ProduktB", "ProduktC"), _
Function:=xlSum, _
TopRow:=False, _
LeftColumn:=False, _
CreateLinks:=False
.Range("B2:C10").Select
End With

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

Die Visualisierung der einstufigen DBR erfolgt anschaulich im Wasserfalldiagramm (Bild 8-


36).
Während die einstufige Deckungsbeitragsrechnung den Vorteil hat, dass mit relativ wenig
Aufwand ein erster Eindruck von der Kostenstruktur eines Unternehmens gewonnen werden
kann, ist die darin unterstellte Proportionalität der Fixkosten in der Praxis eher die Ausnahme.
Für operative Entscheidungen reicht die einstufige Deckungsbeitragsberechnung oft aus.
8.3 Kostenrechnerische Analysen 295

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)

Bild 8-37 Beispiel einer mehrstufigen Deckungsbeitragsrechnung – 1. Stufe


296 8 Strategisches Prozess-Controlling

Bild 8-38 Beispiel einer mehrstufigen Deckungsbeitragsrechnung – 2. Stufe

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

Es gibt den mengenmäßigen BEP


BEP = Σ Fixkosten / Deckungsbeitrag je Stück (8.4)
und den wertmäßigen BEP
BEP = Σ Fixkosten / Deckungsquote je Stück. (8.5)
Darin ist
Deckungsbeitrag/Stück = Verkaufspreis/Stück – variable Kosten/Stück (8.6)
und
Deckungsquote/Stück = Deckungsbeitrag/Stück / Verkaufspreis/Stück. (8.7)
In Mehrproduktunternehmen führen unterschiedliche Absatzmengenkombinationen der
Produkte zu unterschiedlichen Gewinnpunkten. Hier kann die Gewinnschwelle nicht mehr über
die Break-Even-Menge bestimmt werden. Die Mengen der verschiedenen Produkte können
wegen ihrer spezifischen Deckungsbeiträge nicht mehr addiert werden. Der absolute
Deckungsbeitrag einer Periode kann auch relativ als prozentualer Anteil vom Umsatz
ausgedrückt werden
DB [%] = DB / Umsatz. (8.8)
Der zum Erreichen des Break-Even-Point erforderliche Umsatz bestimmt sich aus
BEU = Fixkosten / DB [%]. (8.9)

 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

Tabelle 8-14 Bereichsnamen und Formeln zum BEP

Bereich Bereichsname Formel


B2 Fertigungsmaterial
B3 Fertigungslöhne
B4 Variable_Gemeinkosten
B5 Variable_Stückkosten
B6 Fixe_Kosten
B7 Verkaufspreis (Steuerelement Vorgabe von 170 € bis 400 €)
B8 =Verkaufspreis-Variable_Stückkosten
B10:C10 Menge
B11:C11 Umsatzerlöse =Verkaufspreis*Menge
B12:C12 Variable_Kosten =Variable_Stückkosten*Menge
B13:C13 =Umsatzerlöse-Variable_Kosten
B14:C14 =Fixe_Kosten
B15:C15 =Variable_Kosten+Fixe_Kosten
B17 Gewinnschwelle =RUNDEN(Fixe_Kosten/Deckungsbeitrag;0)
B18 =Gewinnschwelle*Verkaufspreis
Die ermittelte Gewinnschwelle muss gerundet werden, da nur ganze Stückzahlen gefertigt
werden. Es können weitere Spalten mit anderen Stückzahlen eingefügt werden.
Die zum Verkaufspreis installierte Scrollleiste (ActiveX Steuerelement) erhält für bestimmte
Eigenschaften nachfolgende Werte:
 LinkedCell: Verkaufspreis
 Max: 400
 Min: 170
 SmallChange: 10
8.3 Kostenrechnerische Analysen 299

Mit der Prozedur BreakEvenDiagramm (Codeliste 8-11) wird ein Diagramm vom Typ Punkte
mit geraden Linien erzeugt.

Codeliste 8-11 Prozedur erzeugt ein Break-Even-Diagramm


Sub BreakEvenDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Break-Even-Analyse")
'Start Linien-DiagrammStart
'mit Fixe Kosten
With wshTemp
.Range("A10:C10,A14:C14").Select
.Range("A14").Activate
End With
Set shpTemp = wshTemp.Shapes.AddChart2 _
(240, xlXYScatterLinesNoMarkers)
Set chrTemp = shpTemp.Chart
With chrTemp
.Axes(xlCategory).MaximumScale = 1000
.HasTitle = True
.ChartTitle.Text = "Break-Even-Analyse: Produkt1"
.FullSeriesCollection(1).Format.Line.ForeColor.RGB = vbRed
'Ergänzung Linie Gesamtkosten
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = Range("A15")
.FullSeriesCollection(2).XValues = Range("B10:C10")
.FullSeriesCollection(2).Values = Range("B15:C15")
.FullSeriesCollection(2).Format.Line.ForeColor.RGB = vbBlue
'Ergänzung Linie Umsatzerlöse
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = Range("A11")
.FullSeriesCollection(3).XValues = Range("B10:C10")
.FullSeriesCollection(3).Values = Range("B11:C11")
.SetElement (msoElementLegendRight)
'Ergänung Break-Even-Point
.SeriesCollection.NewSeries
With .FullSeriesCollection(4)
.Name = "=""Break-Even-Point"""
.XValues = Range("B17")
.Values = Range("B18")
.MarkerSize = 5
.MarkerStyle = 8
.Format.Fill.ForeColor.RGB = vbRed
.Format.Line.ForeColor.RGB = vbBlack
.Format.Line.Weight = 0.25
'Fehlereindikator als senkrechte Linie
.HasErrorBars = True
.ErrorBar Direction:=xlY, Include:=xlPlusValues, _
Type:=xlErrorBarTypeCustom, _
300 8 Strategisches Prozess-Controlling

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

8.3.5 Kurzfristige Erfolgsrechnung (KER)


Die kurzfristige Erfolgsrechnung betrachtet Kosten und Leistungen eines Unternehmens für
einen bestimmten Zeitraum. Sie liefert den Betriebserfolg ausgerichtet nach Produktgruppen,
Erfolgsquellen, etc. und dient der laufenden Kontrolle und Steuerung. Statt der Bezeichnung
KER wird auch der Name Betriebsergebnisrechnung verwendet. Es kommen zwei Formeln zur
Anwendung:
8.3 Kostenrechnerische Analysen 301

Betriebsergebnis = Leistungen – Kosten (8.10)


oder
Betriebsergebnis = Umsatzerlöse – Selbstkosten der umgesetzten Erzeugnisse. (8.11)
Entsprechend gibt es zwei Verfahren (Bild 8-42), die Beträge miteinander vergleichbar zu
machen.

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

Die Daten eines Unternehmens (Bild 8-46) sind bekannt.

Bild 8-46
Beispieldaten eines
Unternehmens

Eine Zwischenrechnung bestimmt die Herstellkosten (Bild 8-47) pro Stück.

Bild 8-47
Bestimmung der
Herstellkosten pro Stück

Damit folgt das Betriebsergebnis nach dem Gesamtkostenverfahren (Bild 8-48).

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

Für die Berechnung auf Teilkostenbasis werden folgende Voraussetzungen getroffen:


 Von den Material- und Fertigungskosten gelten 20 % als fix
 Die Verwaltungs- und Vertriebskosten beziehen sich auf die abgesetzten Mengen
 90 % der Verwaltungskosten gelten als fix
 20 % der Vertriebskosten gelten als fix
304 8 Strategisches Prozess-Controlling

Bild 8-50
Betriebsergebnis nach dem
Umsatzkostenverfahren auf
Teilkostenbasis

Wer mag, kann dazu auch die entsprechenden Wasserfall-Diagramme erstellen.

8.4 Abschreibung und Cashflow


8.4.1 Lineare Abschreibung
Im Jahresabschluss eines Unternehmens muss die Vermögens- und Ertragslage korrekt
dargestellt werden. Da jedoch die meisten Gegenstände des Anlagevermögens während ihrer
Nutzung im Betrieb Wertminderungen unterliegen, wird dieser Wertminderung in Form einer
Abschreibung Rechnung getragen.
Die Abschreibung oder auch AfA (Absetzung für Abnutzung) ist der Ausdruck des technischen
und wirtschaftlichen Werteverzehrs der Anlagen und soll ihre laufende Erneuerung sichern.
Durch die Abschreibungen verteilen sich die Anschaffungs- und Herstellungskosten der
Wirtschaftsgüter auf die Gesamtdauer ihrer Nutzung. Die Aufgabe der Abschreibung ist es, die
Wertminderung der Anlagegüter mit geeigneten Methoden zu ermitteln und buchmäßig zu
erfassen.
Die Wertminderungen können dabei durch folgende Gründe verursacht werden:
 Beispielsweise durch Fristablauf von Miet- und Pachtverhältnissen sowie Lizenzen und
Konzessionen (zeitlich bedingte Abschreibung)
 aufgrund technischer, natürlicher, ruhender oder katastrophenbedingter Abnutzung
(technisch bedingte Abschreibung)
 beispielsweise durch technischen Fortschritt, Einstellung der Produktion durch
Nachfrageverschiebungen, Preisänderung (wirtschaftlich bedingte Abschreibung)

Man unterscheidet zwischen Leistungsabschreibungsverfahren und


Zeitabschreibungsverfahren.
 Die Abschreibung nach Leistungseinheiten erfolgt, wenn die Abschreibungsursachen
in der Inanspruchnahme des Gegenstandes begründet liegen, also weitgehend
zeitunabhängig sind. Bei diesem Verfahren ist also nicht die Nutzungsdauer, sondern
8.4 Abschreibung und Cashflow 305

es sind die möglichen Leistungs- bzw. Nutzungsabgaben zu schätzen, z. B. zu


fahrende Kilometer, Maschinenstunden oder zu produzierende Stück.
 Beim Zeitabschreibungsverfahren werden die Abschreibungsbeträge auf die
Nutzungsdauer verteilt. Dies betrifft vor allem Wirtschaftsgüter, die länger als ein
Jahr genutzt werden und die netto mehr als 150 € gekostet haben, da diese nicht sofort
komplett abgeschrieben werden können.

Beweglich selbstständige nutzbare Wirtschaftsgüter des Anlagevermögens (Bild 8-51) mit


Anschaffungs- bzw. Herstellungskosten von 150 € bis 1.000 € (ohne MWSt.) bezeichnet man
als geringwertige Wirtschaftsgüter (GWG).

 XCT_08-16_Abschreibungsverfahren.xlsm

Bild 8-51 Beispiel Sammelposten zur Abschreibung geringwertiger Wirtschaftsgüter

Tabelle 8-15 Bereichsnamen und Formeln zum Beispiel GWG

Bereich Bereichsname Formel


B2:B4 NettopreisGWG
C2:C4 AnzahlGWG
D2:D4 GesamtGWG =NettopreisGWG*AnzahlGWG
D5 SummeGWG =SUMME(GesamtGWG)
B7 AbschreibungGWG
G2:G6 BuchwertGWG
G2 =SummeGWG
G3 =I2
G4 =I3
G5 =I4
G6 =I5
H2:H6 =SummeEP*Abschreibung
I2:I6 =Buchwert-Abschr.Wert
Beim Zeitabschreibungsverfahren kann die lineare Abschreibung genutzt werden.
306 8 Strategisches Prozess-Controlling

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

Tabelle 8-16 Bereichsnamen und Formeln zur linearen Abschreibung

Bereich Bereichsname Formel


D1 AnschaffungswertLA
D2 RestwertLA
D3 NutzungsdauerLA
D5 AbschreibungswertLA =(AnschaffungswertLA-RestwertLA)/NutzungsdauerLA
D6 =LIA(AnschaffungswertLA;RestwertLA;NutzungsdauerLA)
B9 =AnschaffungswertLA
C9 =AbschreibungswertLA
D9 =AnschaffungswertLA-AbschreibungswertLA
B10 =C9
C10:D10 =C9:D9
B11:D18 =B10:D10 übertragen
8.4 Abschreibung und Cashflow 307

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

Tabelle 8-17 Bereichsnamen und Formeln zur Ermittlung DB und Gewinn

Bereich Bereichsname Formel


C1 Gesamtumsatz
C2 gesamte_variable_Kosten
C3 Gesamt_Deckungsbeitrag =Gesamtumsatz+gesamte_variable_Kosten
C4 Sonstige_fixe_Kosten
C5 Abschreibungen
C6 Gewinn_vor_Steuern =Gesamt_Deckungsbeitrag+
Sonstige_fixe_Kosten+Abschreibungen
In unserem Formular sollen die Steuern als Prozentsatz angegeben werden. Dazu benutzen wir
die Zelle B7, in der die Bezeichnung steht und verwenden ein benutzerdefiniertes Format (Bild
8-54).
308 8 Strategisches Prozess-Controlling

Bild 8-54
Steuersatz mit
benutzerdefiniertem
Zellformat

Damit erhält unser Formular seine endgültige Form (Bild 8-55).

Bild 8-55
Ermittlung des
Cashflows

Tabelle 8-18 Bereichsnamen und Formeln zur Ermittlung DB und Gewinn

Bereich Bereichsname Formel


B7 Steuern =48%
C7 Steuerbetrag =-Gewinn_vor_Steuern*Steuern
C8 Gewinn_nach_Steuern =Gewinn_vor_Steuern+Steuerbetrag
C9 =-Abschreibungen
C10 =Gewinn_nach_Steuern+Abschreibungen

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.

8.5.1.1 Nachschüssige Verzinsung


Wird beispielweise ein Darlehen in Höhe von 200 € mit einer Laufzeit von einem Jahr mit
einem nachschüssigen Zinssatz von 10 % verzinst, wird ein Betrag von 200 € ausgezahlt und
es müssen 220 € zurückgezahlt werden.
Zeitpunkt Anfang des Jahres Ende des
Jahres______
Kreditbetrag 200 €
ausgezahlter Betrag 200 €
Verzinsung 200 € + 10 % von 200 € = 20 €________________
Rückzahlungsbetrag 220 €
8.5.1.2 Vorschüssige Verzinsung
Wird beispielweise ein Darlehen in Höhe von 200 € mit einer Laufzeit von einem Jahr mit
einem vorschüssigen Zinssatz von 10 % verzinst, wird ein Betrag von 180 € ausgezahlt und es
müssen 200 € zurückgezahlt werden.
Zeitpunkt Anfang des Jahres Ende des
Jahres______
Kreditbetrag 200 €
ausgezahlter Betrag 180 €
Verzinsung 180 € + 10 % von 200 € = 20 €_________________
Rückzahlungsbetrag 200 €

 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

8.5.1.3 Einfache Zinsrechnung

Bild 8-56
Beispiel für eine einfache
Zinsrechnung

Tabelle 8-19 Bereichsnamen und Formeln zur einfachen Zinsrechnung

Bereich Bereichsname Formel


B1 Anfangskapital1
B2 Zinssatz1
B3 Laufzeit1
B6:B11 =Anfangskapital
C6:C11 Zinsen1 =Anfangskapital*Zinssatz
C12 =SUMME(Zinsen)
8.5.1.4 Zinseszinsrechnung

Bild 8-57
Beispiel für eine
Zinseszinsrechnung

Tabelle 8-20 Bereichsnamen und Formeln zur Zinseszinsrechnung

Bereich Bereichsname Formel


B1 Anfangskapital2
B2 Zinssatz2
B3 Laufzeit2
B6 =Anfangskapital2
C6 =B6*Zinssatz2
8.5 Kreditberechnungen 311

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

Tabelle 8-21 Bereichsnamen und Formeln zur Effektivzins-Berechnung

Bereich Bereichsname Formel


B1 Anfangskapital3
B2 Zinssatz3
B3 Anzahl3
B5 =EFFEKTIV(Zinssatz3;Anzahl3)

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

Bei der Tilgungsrechnung wird zwischen zwei Arten unterschieden:


 Bei einer Ratentilgung (Bild 8-59) ist die jährliche Tilgungsrate gleich hoch, und die
Annuität ändert sich in jedem Jahr. Bei jährlich zu zahlender Annuität ist diese am Anfang
relativ hoch, da die fälligen Zinsen bei hoher Restschuld hoch sind. Im Laufe der Tilgung
wird der Annuitätsbetrag immer kleiner, da die fälligen Zinsen mit Verringerung der
Restschuld immer niedriger werden.

Bild 8-59
Beispiel
einer
Ratentilgung

Tabelle 8-22 Bereichsnamen und Formeln zur Ratentilgung

Bereich Bereichsname Formel


B1 Kredit4
B2 Zinssatz4
B3 Laufzeit4
B6 =Kredit4
C6 =B6*Zinssatz4
D6 =Kredit4/Laufzeit4
E6 Zinsen4+Tilgung4
B7 =B6-D6
C7:E7 =C6:E6 übertragen
B8:E11 =B7:E7 übertragen
C6:C11 Zinsen4
D6:D11 Tilgung4
E6:E11 Annuität4
C12 =SUMME(Zinsen4)
D12 =SUMME(Tilgung4)
E12 =Summe(Annuität4)
8.5 Kreditberechnungen 313

 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

Tabelle 8-23 Bereichsnamen und Formeln zur Annuitätentilgung

Bereich Bereichsname Formel


B1 Kredit5
B2 Zinssatz5
B3 Laufzeit
B6 =Kredit5
C6 =B6*Zinssatz4
D6 =Annuität5-Zinsen5
B7 =B6-D6
C7:E7 =C6:E6 übertragen
B8:E11 =B7:E7 übertragen
C6:C11 Zinsen5
D6:D11 Tilgung5
E6:E11 Annuität5
C12 =SUMME(Zinsen5)
D12 =SUMME(Tilgung5)
E12 =Summe(Annuität5)
314 8 Strategisches Prozess-Controlling

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

Tabelle 8-24 Bereichsnamen und Formeln zur optimalen Annuitätentilgung

Bereich Bereichsname Formel


C1 Startkapital6
C2 Endkapital6
C3 Zinssatz6
C4 Laufzeit6
C5 Annuität6 =RMZ(Zinssatz6;Laufzeit6;Startkapital6;Endkapital6)
B8 =Startkapital6
C8 =B8*Zinssatz6
D8 =ABS(Annuität6)-C8
E8 =Annuität6
F8 =B8-D8
B9 =F8
C9:F9 =C8:F8 übertragen
B10:F13 =B9:F9 übertragen
8.5 Kreditberechnungen 315

Codeliste 8-12 Prozedur erzeugt ein gestapeltes Säulendiagramm


Sub OptAnDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Opt.Annuitätentilgung")
'Start Linien-DiagrammStart
'mit Fixe Kosten
With wshTemp
.Range("C7:D13").Select
.Range("C7").Activate
End With
Set shpTemp = wshTemp.Shapes.AddChart2 _
(297, xlColumnStacked100)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData
Source:=Range("Opt.Annuitätentilgung!$C$7:$D$13")
.HasTitle = True
.ChartTitle.Text = "Opt.Annuitätentilgung"
End With
Set chrTemp = Nothing
Set shpTemp = Nothing
Set wshTemp = Nothing
Set wbkTemp = Nothing
End Sub

Zur Visualisierung benutzen wir ein gestapeltes Säulendiagramm (Bild 8-63).

Bild 8-63
Visualisierung
der
Annuitätentilgung

Es lassen sich noch weitere Finanzmathematische-Funktionen für einen Tilgungsplan mit


Annuitätentilgung nutzen (Bild 8-64).
316 8 Strategisches Prozess-Controlling

Tabelle 8-25 Bereichsnamen und Formeln zur optimalen Annuitätentilgung

Bereich Bereichsname Formel


C1 Startkapital7
C2 Endkapital7
C3 Zinssatz7
C4 Laufzeit7
C5 Annuität7 =RMZ(Zinssatz6;Laufzeit6;Startkapital6;Endkapital6)
A8:A13 Jahr7
B8 =ABS(ZINSZ(Zinssatz7;Jahr7;Laufzeit7;Startkapital7;
Endkapital7))
C8 =ABS(KAPZ(Zinssatz7;Jahr7;Laufzeit7;Startkapital7;
Endkapital7))
D8 =RMZ(Zinssatz7;Laufzeit7;Startkapital7;Endkapital7)
B9:D13 =B8:D8 übertragen

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?

Um diese verschiedenen Kombinationsmöglichkeiten schnell darstellen zu können, bietet Excel


die Möglichkeit der Berechnung von Alternativergebnissen mithilfe von Datentabellen, die in
Kapitel 5 bereits behandelt wurde.
8.6 Investitionsrechnungen 317

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

Tabelle 8-26 Bereichsnamen und Formeln zum Kreditvergleich

Bereich Bereichsname Formel


C1 Kredit8
C2 Restwert8
C3 Zinssatz8
C4 Laufzeit8
B7 Annuität =-RMZ(Zinssatz8;Laufzeit8;Kredit8;Restwert8)
C8:F14 =MEHRFACHOPERATION(C1;C3)
Nun wird der Bereich B7:F14 markiert und unter dem Register Daten aus der Gruppe
Prognose unter Was-wäre-wenn-Analyse die Datentabelle aufgerufen. Unter Werte aus Zeile
wird Kredit8 und unter Werte aus Spalte Zinssatz8 eingetragen. Damit füllt die Methode
Datentabelle die fehlenden Werte ein. Bei genauer Betrachtung bekommen, durch die
Methode, die Zellen die Matrixfunktion MEHRFACHOPERATION.

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

 Erstinvestition: Aufnahme einer Leistungsbereitstellung, die bisher im Unternehmen


noch nicht stattgefunden hat.
 Ersatzinvestition: Ein Arbeitsmittel wird durch ein gleichartiges anderes Arbeitsmittel
ersetzt.
 Rationalisierungsinvestition: Ersetzung eines Arbeitsmittels durch ein anderes
wirtschaftlicheres Arbeitsmittel mit dem Ziel, eine Kostensenkung zu erreichen.
 Erweiterungsinvestition: Ein Arbeitsmittel wird zum Zweck der
Kapazitätserweiterung beschafft mit dem Ziel einer Umsatzerhöhung.

Investitionsrechnungen werden durchgeführt, um Entscheidungshilfen zur Beurteilung der


Zweckmäßigkeit einer Investition zu erhalten. Sie dienen somit der quantitativen und
qualitativen Beurteilung von Investitionsprozessen. Eine Beurteilung anhand von qualitativen
Bewertungskriterien erfolgt durch die Nutzwertanalyse (10.1.4). Im Gegensatz dazu arbeiten
folgende Verfahren mit quantitativen Beurteilungskriterien:
 Statische Investitionsrechenverfahren: Kosten, Gewinn, Rentabilität und
Amortisationszeit
 Dynamische Investitionsrechenverfahren: Kapitalwert, interner Zinsfuß, Annuität

8.6.1 Statische Investitionsrechnung


Statische Investitionsrechenverfahren beziehen sich auf eine Periode und berücksichtigen keine
gegenseitigen Abhängigkeiten. Es werden folgende Verfahren unterschieden:
 Gewinnvergleichsrechnung: Es wird das Investitionsvorhaben vorgezogen, welches
den höchsten durchschnittlichen Jahresgewinn liefert.
 Kostenvergleichsrechnung: Es wird das Investitionsprojekt vorgezogen, welches
insgesamt die niedrigsten Kosten verursacht.
 Rentabilitätsvergleichsrechnung: Ermittelt aus dem Gewinn und dem durchschnittlich
investierten Kapital eine Verzinsung durch Division und urteilt danach.
 Amortisationsrechnung: Es wird die Zeit für die Rückgewinnung des investierten
Kapitals errechnet und als Grundlage zur Investitionsbeurteilung verwendet.

8.6.2 Dynamische Investitionsrechnung


Dynamische Investitionsrechenverfahren verwenden finanzmathematische Methoden, die es
gestatten, die Bedeutung der Daten im Zeitablauf zu berücksichtigen. Dabei wird durch die
Abzinsung eine Vergleichbarkeit der Einnahmen und Ausgaben der unterschiedlichen
Investitionsprozesse ermöglicht.
Dynamische Investitionsrechenverfahren
 beziehen sich auf alle Nutzungsperioden des Investitionsprojekts
 basieren auf Einnahmen und Ausgaben
 bedienen sich finanzmathematischer Methoden

Es werden folgende Verfahren unterschieden:


 Kapitalwert-Methode: Untersucht die Wirtschaftlichkeit bzw. Vorteilhaftigkeit einer
Investition
8.6 Investitionsrechnungen 319

 Annuitäten-Methode: Ist eine Weiterführung der Kapitalwert-Methode


 Methode des internen Zinsfußes: Es wird ein Vergleichszinsfuß für jenen Grenzfall
berechnet, bei dem die Investition weder vorteilhaft noch unvorteilhaft ist.

 XCT_08-19_Investitionsrechnungen.xlsm

Als Beispiel betrachten wir die Investitionsrechnung zur Anschaffung einer neuen
Produktionsanlage.

8.6.3 Investitionsdaten zusammenstellen


Zur Information wird zunächst einmal die lineare Abschreibung berechnet (Bild 8-66).

Bild 8-66 Lineare Abschreibung zum Beispiel

Tabelle 8-27 Bereichsnamen und Formeln zur linearen Abschreibung

Bereich Bereichsname Formel


B1 Investitionsjahr
B2 Anschaffungskosten
B3 Nutzungsdauer
B4 Preissteigerung
B7:G7 Dauer
B8:G8 Jahr =Investitionsjahr+Dauer
B9:G9 Abschreibung =LIA(Anschaffungskosten;0;Nutzungsdauer)
Im ersten Jahr steht die Schulung der Mitarbeiter an (Bild 8-67). Schulungen von Mitarbeitern
durch Personalwechsel oder Ergänzung werden bei diesem Schema nicht beachtet.
320 8 Strategisches Prozess-Controlling

Bild 8-67
Werte für
das erste
Jahr

Tabelle 8-28 Bereichsnamen und Formeln zum ersten Jahr

Bereich Bereichsname Formel


B11 =Energiekosten*12
B12 =Instandhaltung
B14 =Schulung
B15 =SUMME(B11:B14)
B17 =Gespart
B19 =B17-B15
B20 =B19-Anschaffungskosten
Bei der Berechnung der Folgejahre (Bild 8-68) muss die Instandhaltung nach dem dritten Jahr
beachtet werden.

Bild 8-68 Berechnung der Folgejahre


8.6 Investitionsrechnungen 321

Tabelle 8-29 Bereichsnamen und Formeln für die Folgejahre

Bereich Bereichsname Formel


C11 =B11*(1+Preissteigerung)
C12 =B12*(1+Preissteigerung)
C15 =SUMME(C11:C14)
C17 =B17*(1+Preissteigerung)
C19 =C17-C15
C20 =B20+C19
D11:K12 C11:C12 übertragen
D15:G15 C15 übertragen
E13:G13 =Zusätzlich
D19:G20 C19:C20 übertragen
B7:G7 Dauer
B8:G8 Jahr
B19:G19 Kapitalrückfluss

8.6.4 Die statische Amortisationsrechnung


Die Amortisationsrechnung dient zur Entscheidungsfindung bei einer Investition und soll
klären, ob sich eine Anlage in einem bestimmten Zeitraum amortisiert. Eine Anlage hat sich in
der Periode amortisiert, in der die Erlöse die im Zusammenhang mit der Anschaffung
stehenden Anschaffungsauszahlungen und die laufenden Betriebsausgaben für die Anlage
übersteigen (Pay-off-Periode). Wenn die Amortisationsdauer unter der Nutzungsdauer liegt,
erscheint die Investition als vorteilhaft (Bild 8-69).
In der statischen Amortisationsrechnung werden die Anschaffungskosten und der
durchschnittliche Einnahmenüberschuss je Periode gegenübergestellt:

𝐴𝑚𝑜𝑟𝑡𝑖𝑠𝑎𝑡𝑖𝑜𝑛𝑠𝑑𝑎𝑢𝑒𝑟 = (8.14)
. ü

Bild 8-69 Bestimmung des Amortisationsjahres (Pay-Off-Periode)

Tabelle 8-30 Bereichsnamen und Formeln zur Bestimmung des Amortisationsjahres

Bereich Bereichsname Formel


B1:G1 =Dauer
B2:G2 =Jahr
B3:G3 =Kapitalrückfluss
322 8 Strategisches Prozess-Controlling

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-70 Kennzeichnung des Amortisationsjahres

8.6.5 Die Kapitalwert-Methode


Der Kapitalwert entspricht dem Gegenwartswert der künftigen Einnahmen und Ausgaben. Die
in künftigen Perioden bis zum Ende der Nutzungsdauer erwarteten Kapitalrückflüsse (=
Einnahmen - Ausgaben) werden auf der Basis eines Kapitalzinsfußes abgezinst. Die
Einnahmen und Ausgaben umfassen auch die Anschaffungsausgaben und eventuell Erlöse bei
der Liquidation der Anlage zum Ende der Nutzungsdauer.
Der Kapitalwert wird berechnet, indem die Kapitalrückflüsse kumuliert und jeweils mit dem
als Kapitalzinsfuß festgelegten Prozentsatz abgezinst werden (Bild 8-71).
Kapitalrückflussi
Kapitalwert = ∑ni=1 (8.15)
1+Zinssatz i

Bild 8-71 Kapitalwert mit der Formel und mit der NBW-Funktion berechnen
8.6 Investitionsrechnungen 323

Tabelle 8-31 Bereichsnamen und Formeln zur Bestimmung des Amortisationsjahres

Bereich Bereichsname Formel


B1 Kapitalzinsfuß
B3:G3 =Dauer
B4:G4 =Jahr
B5:G5 =Kapitalrückfluss
B6 =B5/(1+Kapitalzinsfuß)^B3
C6:G6 B6 übertragen
B7 =B6-Anschaffungskosten
C7 =B7+C6
D7:G7 C7 übertragen
B9 =NBW(Kapitalzinsfuß;Kapitalrückfluss)-Anschaffungskosten

8.6.6 Die dynamische Amortisationsrechnung


Bei der dynamischen Amortisationsrechnung werden Zinsen und Zinseszinsen berücksichtigt.
Auch hier werden die Kapitalrückflüsse mit einem Kapitalzinsfuß abgezinst. Dadurch ergeben
sich längere Amortisationszeiten als bei der statischen Amortisationsrechnung.
Zunächst berechnen wir den Nettobarwert (Kapitalwert) der Investition für jede Periode (jedes
Jahr) und überprüfen anschließend, wann der Nettobarwert den Wert null übersteigt (Bild 8-
72).

Bild 8-72 Dynamische Amortisationsrechnung

Tabelle 8-32 Bereichsnamen und Formeln zur Bestimmung des Amortisationsjahres

Bereich Bereichsname Formel


B1 Kapitalzinsfuß2
B3:G3 =Dauer
B4:G4 =Jahr
B5:G5 =Kapitalrückfluss
B6 =-Anschaffungskosten+NBW(Kapitalzinsfuß2;$B$5:B5)
C6:G6 B6 übertragen
324 8 Strategisches Prozess-Controlling

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-73 Bestimmung des internen Zinsfußes

Tabelle 8-33 Formeln zur Bestimmung des internen Zinsfußes

Bereich Formel Formatierung


B1:G1 =Dauer
B2:G2 =Jahr
B3:G3 =Kapitalrückfluss
A3 =- "Kapitaleinsatz/-rückfluss "#.##0,00 €;"Kapitaleinsatz/-
Anschaffungskosten rückfluss "- #.##0,00 €
B5 =IKV(A3:G3)
Es ergibt sich ein interner Zinsfuß von 7,39 %. Dieser Wert liegt weit über der
Mindestverzinsung von 3,5 %. Die Investition ist deshalb von Vorteil.
Allerdings ist die Betrachtung aus betriebswirtschaftlicher Sicht vereinfacht. Beim Vergleichen
alternativ zu wählender Investitionsobjekte führt die Methode nur bei gleicher Nutzungsdauer
und bei gleichem Anschaffungswert zu einem verwertbaren Ergebnis.
Da der interne Zinsfuß die Effektivverzinsung ermittelt, die durch die Investition erreicht wird,
können wir den berechneten Wert überprüfen, indem wir ihn als Kapitalzinsfuß bei der
Kapitalwertberechnung anwenden. Der Kapitalwert bei diesem Zinssatz muss den Wert Null
ergeben (Bild 8-74).
8.6 Investitionsrechnungen 325

Bild 8-74 Ergebnisprüfung

8.6.8 Die Kosten-Vergleichsrechnung


In der Kosten-Vergleichsrechnung werden nur die Kosten alternativer Investitionen verglichen.
Vorteilhaft ist dabei die Investition mit den geringsten durchschnittlichen Kosten, die
periodenbezogen oder stückbezogen ermittelt werden:
 Die periodenbezogene Kosten-Vergleichsrechnung betrachtet die Kosten mehrerer
Investitionen auf der Basis durchschnittlicher Kosten einer Periode (z. B. eines
Jahres).
 Die stückbezogene Kosten-Vergleichsrechnung betrachtet die Kosten mehrerer
Investitionen auf der Basis durchschnittlicher Kosten je Produktionseinheit (z. B.
Stück). Sie wird immer dann angewendet, wenn sich die Produktionszahlen deutlich
unterscheiden.
Als Anwendungsbeispiel einer periodenbezogenen Kosten-Vergleichsrechnung muss sich ein
Unternehmen für eine von zwei Produktionsanlagen entscheiden (Bild 8-75). Die
Abschreibung ist linear und die Tilgung erfolgt in gleichen Tilgungsraten.

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

Tabelle 8-34 Formeln zur Bestimmung des internen Zinsfußes

Bereich Formel Bemerkung


B9 =(B2-B3)/B5 Übertragen nach C9
B10 =(B2-B3)/2*B6 Übertragen nach C10
B14 =B2
B15 =B2-$B9
B16 =(B14+B15)/2*$B6
C14 =B15
C15 =C14-$B9
C16 =(C14+C15)/2*$B6
C14:C16 Übertragen nach D14:F16
Analog erfolgt die Kapitalanbindung der Anlage 2.
Da die beiden Anlagen für unterschiedliche Produktionszahlen ausgelegt sind, wird auch eine
stückbezogene Kosten-Vergleichsrechnung herangezogen (Bild 8-76).

Bild 8-76
Stückbezogene
Kosten-
Vergleichsrechnung

Nach dieser Berechnung ist die Anlage 1 die vorteilhaftere.


327

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.

Tabelle 9-1 Klasseneinteilung zur ABC-Analyse

Klasse Anteil Beschreibung


A 75 % Die Mengen bilden kumuliert 75 % der Gesamtmenge.
B 20 % Die Mengen decken die Spanne zwischen 75% und 95% der
Gesamtmenge ab.
C 5% Die Mengen bilden den 5 % Rest der Gesamtmenge.

Syntax zur RANG-Funktion:


=RANG(Zahl;Bezug;[Reihenfolge])
Aufgabe zur RANG-Funktion:
Als Beispiel dient die Liste der Jahresumsätze verschiedener Produkte eines Unternehmens.
Eine ABC-Analyse soll auf der Basis der Umsatzwerte erstellt werden.

 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

Tabelle 9-2 Bereichsname in der ABC-Matrix

Bereich Name Beschreibung


B2:C4 Matrix Als Grundlage für SVERWEIS

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).

Codeliste 9-1 Prozedur sortiert eine Umsatzliste nach Rang


Sub ABCAnalyse()
Dim lRow As Long
Dim lRowMax As Long
Dim wshTemp As Worksheet
Dim wshMatrix As Worksheet
Dim rngUmsatz As Range
Dim rngTabelle As Range
Dim dSumme As Double

'Anzahl Zeilen und UmsatzBereich bestimmen


Set wshMatrix = Worksheets("ABC-Anteile")
Set wshTemp = Worksheets("ABC-Analyse")
With wshTemp
.Activate
lRowMax = .UsedRange.Rows.Count
Set rngUmsatz = _
9.1 Analyse-Methoden 329

.Range(.Cells(2, 3), .Cells(lRowMax, 3))


Set rngTabelle = _
.Range(.Cells(2, 1), .Cells(lRowMax, 4))
.Cells(1, 4) = "Rang"
For lRow = 2 To lRowMax
.Cells(lRow, 4) = _
WorksheetFunction.Rank(.Cells(lRow, 3), rngUmsatz, 0)
Next lRow
'Sortierung nach Rang
.Range("D2").Select
.Sort.SortFields.Clear
.Sort.SortFields.Add _
Key:=Range("D2"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange rngTabelle
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Umsatzanteil
.Cells(1, 5) = "Anteil [%]"
.Cells(1, 5).Font.Bold = True
For lRow = 2 To lRowMax
.Cells(lRow, 5) = .Cells(lRow, 3) / _
WorksheetFunction.Sum(rngUmsatz)
Next lRow
.Range(.Cells(2, 5), .Cells(lRowMax, 5)). _
NumberFormat = "0.0%"
'kumulierter Umsatzanteil
.Cells(1, 6) = "kumuliert [%]"
.Cells(1, 6).Font.Bold = True
dSumme = 0
For lRow = 2 To lRowMax
dSumme = dSumme + .Cells(lRow, 5)
.Cells(lRow, 6) = dSumme
Next lRow
.Range(.Cells(2, 6), .Cells(lRowMax, 6)). _
NumberFormat = "0.0%"
'Klasse
.Cells(1, 7) = "Klasse"
.Cells(1, 7).Font.Bold = True
For lRow = 2 To lRowMax
.Cells(lRow, 7) = WorksheetFunction. _
VLookup(.Cells(lRow, 6), [Matrix], 2)
Next lRow
End With
Set wshMatrix = Nothing
Set wshTemp = Nothing
Set rngUmsatz = Nothing
Set rngTabelle = Nothing
End Sub
330 9 Operatives Prozess-Controlling

Bild 9-3
Produktumsätze mit
Klassenzuordnung

Zur Visualisierung sollten eigene Prozeduren erstellt werden, da oft unterschiedliche


Diagramme gewünscht sind (Bild 9-4). Die erste Möglichkeit ist eine Darstellung als
gruppierte Säulen.

Codeliste 9-2 Prozedur erstellt ein ABC-Säulendiagramm


Sub ABCSäulen()
Dim wshTmp As Worksheet
Dim shpTmp As Shape
Dim rngTmp As Range
Dim chrTmp As Chart
Dim lRow As Long

Set wshTmp = Worksheets("ABC-Analyse")


With wshTmp
Set rngTmp = .Range("A2:A14, F2:F14")
rngTmp.Select
.Range("F1").Activate
Set shpTmp = .Shapes.AddChart2(201, xlColumnClustered)
shpTmp.Select
End With
Set chrTmp = shpTmp.Chart
With chrTmp
.ChartTitle.Text = "ABC-Analyse Produktumsätze"
.SetSourceData Source:=rngTmp, PlotBy:=xlColumns
.FullSeriesCollection(1).Select
.ChartGroups(1).GapWidth = 0
For lRow = 2 To 14
Select Case wshTmp.Cells(lRow, 7)
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)
9.1 Analyse-Methoden 331

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).

Codeliste 9-3 Prozedur erstellt ein ABC-Wasserfalldiagramm


Sub ABCWasserfall()
Dim wshTmp As Worksheet
Dim shpTmp As Shape
Dim rngTmp As Range
Dim chrTmp As Chart
Dim lRow As Long
Dim lRowMax As Long
Dim sMax As String

Set wshTmp = Worksheets("ABC-Analyse")


With wshTmp
lRowMax = .UsedRange.Rows.Count
sMax = Trim(Str(lRowMax))
Set rngTmp = .Range("A2:A" & sMax & ", E2:F" & sMax)
rngTmp.Select
Set shpTmp = .Shapes.AddChart2(395, xlWaterfall)
End With
Set chrTmp = shpTmp.Chart
With chrTmp
.ChartTitle.Text = "ABC-Analyse Produktumsätze"
.Legend.Delete
For lRow = 2 To lRowMax
Select Case wshTmp.Cells(lRow, 7)
332 9 Operatives Prozess-Controlling

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

Als Anwendungsbeispiel betrachten wir einhunderttausend Messwerte. Um ihre Verteilung


abschätzen zu können, erstellen wir (Codeliste 9-4) dazu ein Histogramm (Bild 9-6).

Codeliste 9-4 Prozedur erstellt ein Histogramm zu den Messwerten


Sub HistogrammMesswerte()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Messwerte")
9.1 Analyse-Methoden 333

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).

Codeliste 9-5 Prozedur erstellt eine Klassenauswertung zu den Messwerten


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 iV As Integer

'Arbeitsblätter
On Error GoTo ErrorHandler
Set wshWerte = Worksheets("Messwerte")
With wshWerte
.Activate
334 9 Operatives Prozess-Controlling

sName = Format(Now, "yyyy-mm-dd")


lN = .UsedRange.Rows.Count - 1
Set wshKlassen = Worksheets.Add
wshKlassen.Name = sName
End With
On Error GoTo 0
'Auswertung
lK = Application.WorksheetFunction.RoundUp _
(1 + 3.3 * Log(lN) / Log(10#), 0)
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, 2) = lRow
.Cells(lRow + 1, 1) = 80 + (lRow - 1) * (120 - 80) / lK
Next lRow
For lRow = 2 To lN + 1
iV = Application.WorksheetFunction.VLookup _
(wshWerte.Cells(lRow, 1), _
.Range(wshKlassen.Cells(1, 1), .Cells(lK + 1, 2)), 2, 1)
.Cells(iV + 1, 3) = .Cells(iV + 1, 3) + 1
Next lRow
End With
Set wshKlassen = Nothing
Set wshWerte = Nothing
Exit Sub
ErrorHandler:
Set wshKlassen = Worksheets(sName)
Resume Next
End Sub

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).

Codeliste 9-6 Prozedur bestimmt Lokations- und Dispersionsmaße


Sub VerteilungsParameter()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Verteilungsparameter")
With wshTemp
.Activate
.Range("C2").Formula = "=MIN(Messwerte)"
.Range("C3").Formula = "=MAX(Messwerte)"
.Range("C4").Formula = "=AVERAGE(Messwerte)"
.Range("C5").Formula = "=GEOMEAN(ABS(Messwerte))"
.Range("C6").Formula = "=MEDIAN(Messwerte)"
.Range("C7").Formula = "=MODE.SNGL(Messwerte)"
.Range("C10").Formula = "=MAX(Messwerte)-MIN(Messwerte)"
.Range("C11").Formula = "=VAR.P(Messwerte)"
.Range("C12").Formula = "=VAR.S(Messwerte)"
.Range("C13").Formula = "=STDEV.P(Messwerte)"
.Range("C14").Formula = "=STDEV.S(Messwerte)"
End With
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

Bild 9-8 Klassenzuordnung der Messwerte

Oft weisen Messwerte zu Vorgängen in der Natur, zu wirtschaftlichen und technischen


Vorgängen, durch eine große Zahl unabhängiger sich überlagernder Einflüsse Abweichungen
vom erwarteten Mittelwert auf. Sie lassen sich exakt oder annähernd normalverteilt
beschreiben. Diese, als Normalverteilung nach Gauß bezeichnete Anordnung, ergibt sich aus
der Formel
( )
𝑓(𝑥, 𝜇, 𝜎) = ∙𝑒 . (9.2)

336 9 Operatives Prozess-Controlling

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

Tabelle 9-3 Bereichsnamen und Formeln zur Berechnung der Lebensdauer

Bereich Name Formel


B2 Abweichung =STABW.N(Werte)
B3 Mittelwert =MITTELWERT(Werte)
B6 Menge
B7 Dauer
B8 =RUNDEN(NORM.VERT(Dauer;Mittelwert;Abweichung;1)*
Menge;0)

9.1.3 Zweidimensionale Leistungsmessung


Das Wichtigste im Prozess-Controlling ist die Leistungsmessung (Bild 9-12). Sind die Ziele
nach den SMART-Kriterien definiert, so sind die Metriken gewährleistet. Welche Kennzahlen
verwendet werden, wird im Rahmen der Prozessplanung festgelegt.

 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

Codeliste 9-8 Prozedur erstellt Blasendiagramm zur Leistungsmatrix


Sub CreateBlasendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
9.1 Analyse-Methoden 339

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.ActiveSheet
'Blasendiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(269, xlBubble)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=Range("$A$1:$C$8")
.ChartStyle = 343
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Leistungsmessung"
With .ChartTitle.Format.TextFrame2.TextRange
.Font.Size = 16
.Font.Fill.Solid
.Font.Bold = msoTrue
End With
'Achsen
.Axes(xlCategory).Delete
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Grad"
'Legende ausblenden
.HasLegend = False
'Datenbeschriftung
.ApplyDataLabels
With .FullSeriesCollection(1).DataLabels
.Format.TextFrame2. _
TextRange.InsertChartField msoChartFieldRange, _
"=Leistungsmatrix!$A$2:$A$8", 0
.ShowRange = True
.ShowValue = False
.Position = xlLabelPositionBelow
End With
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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.

Bild 9-22 Power Query-Editor

 Im nächsten Schritt wählen wir die Methode Kombinieren unter Start


 Unter Abfragen zusammenführen wählen wir über die Auswahl die Methode Abfragen als
neue Abfrage zusammenführen
344 9 Operatives Prozess-Controlling

 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).

Bild 9-24 Neue Tabelle Merge1

 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.

Bild 9-26 Auszug aus der Tabelle mit neuen Spalten

 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).

Bild 9-28 Datentabelle Materialbedarf im Arbeitsblatt

 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

Tabelle 9-4 Bereichsnamen und Formeln zur Bestellauswertung

Bereich Name Formel


A2:A20 MatNr
B2:B20 Bezeichnung
C2:C20 Auftragsmenge =Anzahl*Menge
D2:D20 =Auftragsmenge*Preis
E2:E20 =Produktion-Liefertage

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.

Bild 9-30 Bestellauswertung


348 9 Operatives Prozess-Controlling

Codeliste 9-9 Prozedur erstellt ein Ringdiagramm mit zwei Ringbereichen


Sub CreateRingdiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
'Excel Objekte instanziieren
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Kostenübersicht")
'Ringdiagramm erstellen
Set shpTemp = wshTemp.Shapes.AddChart2(251, xlDoughnut)
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData Source:=Range("$A$4:$C$13")
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Materialbedarf"
With .ChartTitle.Format.TextFrame2.TextRange
.Font.Size = 16
.Font.Fill.Solid
.Font.Bold = msoTrue
End With
.ChartGroups(1).DoughnutHoleSize = 40
.SetElement (msoElementLegendRight)
With .Legend
.Top = 41
.Left = 280
.Height = 150
End With
End With
Set shpTemp = Nothing
Set chrTemp = Nothing
Set wbkTemp = Nothing
Set wshTemp = Nothing
End Sub

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.

Bild 9-31 Bestellübersicht


9.2 Bereichs-Controlling 349

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).

Bild 9-32 Bestellübersicht in Gruppen

Natürlich können wir die berechnete Tabelle auch noch einmal nach Power BI laden und einen
Report erstellen (Bild 9-33).

Bild 9-33 Report aus Power BI


350 9 Operatives Prozess-Controlling

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

Dieser Abweichungs-Analyse fehlt etwas Erhebliches, nämlich neben den Abweichungswerten


auch die Abweichungsursachen. Nur mit deren Angaben lassen sich auch Maßnahmen zur
Reduzierung durchführen. Aus Platzgründen habe ich sie nicht aufgeführt.

Bild 9-34
Abweichungs-
Analyse

Die zugehörigen Formeln (Tabelle 9-5) sind, dank der Bereichsnamen, leicht verständlich.

Tabelle 9-5 Bereichsnamen und Formeln zur Abweichungs-Analyse

Bereich Name Formel


B2-B13 Plan_Menge
C2-C13 Plan_Preis
D2-D13 Plan_Wert =Plan_Menge*Plan_Preis
E2-E13 Ist_Menge
F2-F13 Ist_Preis
G2-G13 Ist_Wert =Ist_Menge*Ist_Preis
H2-H13 =Ist_Wert-Plan_Wert
9.2 Bereichs-Controlling 351

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.

Codeliste 9-10 Prozedur erstellt eine Abweichungs-Analyse in Diagrammform


Sub AbweichungsAnalyse()
Dim wshTmp As Worksheet
Dim shpTmp As Shape
Dim rngTmp As Range
Dim chrTmp As Chart
Dim lRow As Long
Dim lRowMax As Long
Dim sMax As String

Set wshTmp = Worksheets("Abweichungs-Analyse")


With wshTmp
.DrawingObjects.Delete
Set rngTmp = .Range("I2:K13")
rngTmp.Select
Set shpTmp = .Shapes.AddChart2(201, xlColumnClustered)
End With
'Diagramm
Set chrTmp = shpTmp.Chart
With chrTmp
.SetSourceData Source:=rngTmp
.HasTitle = True
.ChartTitle.Text = "Abweichungs-Analyse"
'Form
.ChartGroups(1).GapWidth = 10
.ChartGroups(1).Overlap = 50
'Datenreihen
.FullSeriesCollection(1).Name = "=Abweichungsanalyse!$I$1"
.FullSeriesCollection(2).Name = "=Abweichungsanalyse!$J$1"
.FullSeriesCollection(3).Name = "=Abweichungsanalyse!$K$1"
.FullSeriesCollection(1).AxisGroup = 1
.FullSeriesCollection(2).ChartType = xlColumnClustered
.FullSeriesCollection(2).AxisGroup = 1
.FullSeriesCollection(3).ChartType = xlColumnClustered
.FullSeriesCollection(3).AxisGroup = 1
.FullSeriesCollection(1).AxisGroup = 2
.FullSeriesCollection(2).AxisGroup = 2
.FullSeriesCollection(1).Name = _
"='Abweichungs-Analyse'!$I$1"
.FullSeriesCollection(2).Name = _
"='Abweichungs-Analyse'!$J$1"
.FullSeriesCollection(3).Name = _
"='Abweichungs-Analyse'!$K$1"
.FullSeriesCollection(3).XValues = _
"='Abweichungs-Analyse'!$A$2:$A$13"
352 9 Operatives Prozess-Controlling

'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)

Die Gesamtkosten G pro Jahr sind damit:


𝐺 =𝐺 +𝐺 . (9.5)
Und daraus ergeben sich wiederum die Gesamtkosten pro Stück GS:
𝐺 = . (9.6)

 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

Codeliste 9-11 Prozedur erstellt eine Deterministische Simulation mit Liniendiagramm


Sub Simulation()
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim rngTemp As Range
Dim dKR As Double
Dim dKH As Double
Dim dNG As Double
Dim dZB As Double
Dim dZL As Double
Dim dN As Double
Dim dDN As Double
Dim dG As Double
9.2 Bereichs-Controlling 355

Dim dGR As Double


Dim dGL As Double
Dim dGS As Double
Dim lRow As Long

Set wshTemp = ActiveSheet


With wshTemp
dKR = .Cells(1, 2)
dKH = .Cells(2, 2)
dNG = .Cells(3, 2)
dZB = .Cells(4, 2)
dZL = .Cells(5, 2)
'Simulation
lRow = 2
dN = .Cells(lRow, 4)
dDN = dNG / 100
Do While dN <= dNG
dGR = dNG / dN * dKR
dGL = dN / 2 * dKH * (dZB + dZL)
dG = dGR + dGL
dGS = dG / dNG
.Cells(lRow, 4) = dN
.Cells(lRow, 5) = dGR
.Cells(lRow, 6) = dGL
.Cells(lRow, 7) = dG
.Cells(lRow, 8) = dGS
dN = dN + dDN
lRow = lRow + 1
Loop
'Diagramm
Set shpTemp = wshTemp.Shapes.AddChart2(240, _
xlXYScatterSmoothNoMarkers)
Set chrTemp = shpTemp.Chart
With chrTemp
Set rngTemp = _
Range(Cells(1, 4), Cells(1, 7).End(xlDown))
.SetSourceData _
Source:=rngTemp
'Diagrammtitel
.HasTitle = True
.ChartTitle.Text = "Produktionskosten"
With .ChartTitle.Format.TextFrame2.TextRange
.Font.Size = 16
.Font.Fill.Solid
.Font.Bold = msoTrue
End With
.Axes(xlCategory).MaximumScale = 1000
.SetElement (msoElementLegendRight)
End With
End With
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
Set rngTemp = Nothing
End Sub
356 9 Operatives Prozess-Controlling

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

Codeliste 9-12 Prozedur erstellt ein vertikales Liniendiagramm


Sub StärkenSchwächenAnalyse()
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

ActiveSheet.DrawingObjects.Delete 'löscht Grafiken


Set wshTemp = ActiveSheet
'Diagramm
With wshTemp
.Range("Liste").Select
Set shpTemp = .Shapes.AddChart2(240, xlXYScatterLines)
Set chrTemp = shpTemp.Chart
End With
With chrTemp
.SetSourceData Source:=Range("Liste")
.Axes(xlValue).CrossesAt = 0
.Axes(xlCategory).CrossesAt = 0
.Axes(xlValue).Crosses = xlMaximum
'Werte vertauschen
.FullSeriesCollection(3).XValues = Range("eigenes_Unternehmen")
.FullSeriesCollection(3).Values = Range("Position")
.FullSeriesCollection(4).XValues =
Range("stärkster_Wettbewerber")
.FullSeriesCollection(4).Values = Range("Position")
'Achsen zuordnen
.FullSeriesCollection(3).AxisGroup = 2
.FullSeriesCollection(4).AxisGroup = 2
.FullSeriesCollection(1).AxisGroup = 1
'vertikale Achswerte vertauschen und begrenzen
.Axes(xlValue, xlSecondary).ReversePlotOrder = True
.Axes(xlValue, xlSecondary).MinimumScale = 1
.Axes(xlValue, xlSecondary).MaximumScale = 9
'Positionsfunktion löschen
.FullSeriesCollection(2).Delete
'ersten Eintrag in der Legende löschen
.Legend.LegendEntries(1).Delete
.ChartTitle.Text = "Stärken-Schwächen-Analyse"
358 9 Operatives Prozess-Controlling

'Diagrammtyp der Datenreihe Hilfsspalte in Balkendiagramm umwandeln


.FullSeriesCollection(1).ChartType = xlBarClustered
'Y-Werte anpassen
.Axes(xlCategory).TickMarkSpacing = 1
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlCategory).AxisBetweenCategories = False
.Axes(xlValue).MaximumScale = 6
.Axes(xlValue).MajorUnit = 2
.Axes(xlValue, xlSecondary).Delete
End With
Set shpTemp = Nothing
'Textfeld
Set shpTemp = wshTemp.Shapes.AddTextbox _
(msoTextOrientationHorizontal, 300, 50, 80, 50)
With shpTemp
.TextFrame2.TextRange.Characters.Text = _
"0 - 2 schlecht" & vbCr & "2 - 4 mittel" & vbCr & "4 - 6 gut"
.Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 204)
.Transparency = 0
.Solid
End With
End With
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub

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

 Überwachung der IT-Kosten im Rahmen einer mittelfristigen Planung


 Identifizierung der Kostentreiber
 Bestimmung der Soll/Ist-Abweichungen
 Kenngrößenbestimmung zur Messung der IT-Leistungen
 Optimierung des IT-Reportings
 u.v.a.

 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

Bild 9-44 Report aus Power BI

 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

 Auswirkungen neuer Entwicklungen auf den Personalbereich frühzeitig einschätzen


 Entwicklung von Kennzahlensystemen für den Personalbereich
 Einsatz verschiedener Metriken zur Personalkontrolle
 Darlegung des Einflusses des Personalwesens am Unternehmenserfolg
Als Anwendungsbeispiel betrachten wir die Planung von Projektstunden.

 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.

Tabelle 9-6 Bereichsnamen und Formeln zur Personalliste

Bereich Name Formel


B2:B27 Std
C2:C27 Wahl
362 9 Operatives Prozess-Controlling

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.

Tabelle 9-7 Bedingte Formatierung in der Liste

Bereich Regel Farbe / Symbol


=$A$2;$C$27 =$C2=1 Gelber Hintergrund mit Rahmen
Die bedingte Formatierung unterstützt deutlich die Lesbarkeit der Mitarbeiterliste.
9.2 Bereichs-Controlling 363

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

Codeliste 9-13 Prozedur startet eine Solver-Auswertung


Sub SolverGo()
ThisWorkbook.Worksheets("Mitarbeiter").Activate
ActiveSheet.Range("Wahl") = 0
SolverReset
SolverOptions Precision:=0.0000001
'Solveraufgabe
SolverOk SetCell:="$F$2", _
MaxMinVal:=3, _
ValueOf:=0, _
ByChange:="$C$2:$C$27", _
Engine:=2, _
EngineDesc:="Simplex LP"
'Nebenbedingungen
SolverAdd CellRef:="$C$2:$C$27", Relation:=1, _
FormulaText:="1"
SolverAdd CellRef:="$C$2:$C$27", Relation:=3, _
FormulaText:="0"
SolverAdd CellRef:="$C$2:$C$27", Relation:=4, _
FormulaText:="Ganzzahlig"
'Solverstart
SolverSolve userfinish:=True
End Sub

Es ist immer wieder verlockend, mit einer Tabelle ins Power BI zu gehen, um darin eine
Visualisierung auszuprobieren (Bild 9-49).

Bild 9-49 Report zu ausgewählten Mitarbeitern in Power BI

 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).

Codeliste 10-1 Prozedur erzeugt eine BCG-Matrix


Sub Blasendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("BCG-Matrix")
Set shpTemp = wshTemp.Shapes.AddChart2(269, xlBubble)
'Diagramm
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("$B$3:$B$9,$E$3:$E$9,$C$3:$C$9")
.FullSeriesCollection(1).XValues = Range("$E$3:$E$9")
.FullSeriesCollection(1).Values = Range("$B$3:$B$9")
.FullSeriesCollection(1).BubbleSizes = Range("$C$3:$C$9")
.HasTitle = True
.ChartTitle.Text = "BCG-Matrix"
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"relativer Marktanteil"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
10.1 Analyse-Methoden 367

"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

Codeliste 10-2 Prozedur erzeugt eine McKinsy-Matrix


Sub Blasendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("McKinsey-Matrix")
Set shpTemp = wshTemp.Shapes.AddChart2(269, xlBubble)
'Diagramm
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("C6:F6,C14:F14")
.FullSeriesCollection(1).XValues = Range("$C$14:$F$14")
.FullSeriesCollection(1).Values = Range("$C$6:$F$6")
.FullSeriesCollection(1).BubbleSizes = Range("$C$18:$F$18")
.HasTitle = True
.ChartTitle.Text = "McKinsey-Matrix"
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Wettbewerbsstärke"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Marktattraktivität"
'Achseneiteilung
'.Axes(xlCategory).Select
.Axes(xlCategory).MajorUnit = 1
'.Axes(xlValue).Select
.Axes(xlValue).MajorUnit = 1
'Datenbeschriftung
.ApplyDataLabels
With .FullSeriesCollection(1).DataLabels
370 10 Strategisches Projekt-Controlling

.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

Codeliste 10-3 Prozedur erzeugt eine McKinsy-Matrix


Sub Blasendiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Risiko-Matrix")
Set shpTemp = wshTemp.Shapes.AddChart2(269, xlBubble)
'Diagramm
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("C6:F6,C14:F14")
.FullSeriesCollection(1).XValues = Range("$B$2:$B$8")
.FullSeriesCollection(1).Values = Range("$C$2:$C$8")
.FullSeriesCollection(1).BubbleSizes = Range("$D$2:$D$8")
.HasTitle = True
.ChartTitle.Text = "Risiko-Matrix"
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Eintrittswahrscheinlichkeit"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Wichtigkeit"
'Achseneiteilung
'.Axes(xlCategory).Select
.Axes(xlCategory).MajorUnit = 0.2
'.Axes(xlValue).Select
.Axes(xlValue).MajorUnit = 0.6
'Datenbeschriftung
.ApplyDataLabels
With .FullSeriesCollection(1).DataLabels
372 10 Strategisches Projekt-Controlling

.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

10.1.4 Nutzwert-Analyse (NA)


Stehen verschiedene miteinander konkurrierende Projektalternativen zur Auswahl, dann liefert
die gewichtete Nutzwertanalyse eine gute Entscheidungshilfe. Sie kann auch während des
Projektablaufs zur Beurteilung von Lösungsalternativen eingesetzt werden.
Die Erstellung einer Nutzwert-Analyse erfolgt in sechs Schritten:
 Ziele bestimmen
 Ziele gewichten
 Punkte für die Projekte vergeben
 Gewichte mit den zugehörigen Punkten multiplizieren
 gewichtete Punktgesamtsummen ermitteln
 Sensitivität des Ergebnisses analysieren

 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.

Tabelle 10-1 Bereichsnamen und Formeln zur Nutzwertanalyse

Bereich Name Beschreibung


C6:C16 Gew
C5 GewSum =SUMMEWENN(Gew;"<>""")
D6:D16 Grad1
F6:F16 Grad2
H6:H16 Grad3
E6:E16 =WENN(ISTZAHL(Gew);Gew*Grad1;"")
G6:G16 =WENN(ISTZAHL(Gew);Gew*Grad2;"")
I6:I16 =WENN(ISTZAHL(Gew);Gew*Grad3;"")
E5 {=SUMME(WENN(ISTZAHL(Gew);Gew * Grad1;0))/GewSum/9}
G5 {=SUMME(WENN(ISTZAHL(Gew);Gew * Grad2;0))/GewSum/9}
I5 {=SUMME(WENN(ISTZAHL(Gew);Gew * Grad3;0))/GewSum/9}
E5;G5;I5 Grade
E4 =RANG(E5;Grade)
G4 =RANG(G5;Grade)
I4 =RANG(I5;Grade)
D3 =WENN(ZÄHLENWENN(Grad1;"N")>0;"Nicht OK";"OK")
F3 =WENN(ZÄHLENWENN(Grad2;"N")>0;"Nicht OK";"OK")
374 10 Strategisches Projekt-Controlling

H3 =WENN(ZÄHLENWENN(Grad3;"N")>0;"Nicht OK";"OK")
Gelb =4
Grün =7

Tabelle 10-2 Bedingte Formatierung in der Nutzwertanalyse

Regel Format Wird angewendet auf


=D$3=“OK“ AaBbCcYyZz =$D$3;$F$3;$H$3
=D$3=“Nicht OK“ AaBbCcYyZz =$D$3;$F$3;$H$3
=E4=1 AaBbCcYyZz =$E$4;$G$4;$I$4
=D6=“J“ AaBbCcYyZz =$D$6:$D$16;$F$6:$F$16;$H$6:$H$16
=D6=“N“ AaBbCcYyZz =$D$6:$D$16;$F$6:$F$16;$H$6:$H$16
=D6>=Grün AaBbCcYyZz =$D$6:$D$16;$F$6:$F$16;$H$6:$H$16
=D6>=Gelb AaBbCcYyZz =$D$6:$D$16;$F$6:$F$16;$H$6:$H$16
=UND(D6>=0;D6<>““) AaBbCcYyZz =$D$6:$D$16;$F$6:$F$16;$H$6:$H$16
(Für gleiche Bereiche ist die Reihenfolge zu beachten.)

Die Visualisierung erfolgt durch eine gruppiertes Säulendiagramm (Bild 10-10).

Codeliste 10-4 Prozedur erzeugt eine gruppiertes Säulendiagramm zur Nutzwertanalyse


Sub NutzwertDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Nutzwertanalyse")
Set shpTemp = wshTemp.Shapes.AddChart2(201, xlColumnClustered)
'Diagramm
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("Nutzwertanalyse!$D$6:$D$16")
.HasTitle = True
.ChartTitle.Text = "Nutzwertanalyse"
.FullSeriesCollection(1).Name = "=Nutzwertanalyse!$D$2"
'Alternative 2
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=Nutzwertanalyse!$F$2"
.FullSeriesCollection(2).Values = "=Nutzwertanalyse!$F$6:$F$16"
'Alternative3
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = "=Nutzwertanalyse!$H$2"
.FullSeriesCollection(3).Values = "=Nutzwertanalyse!$H$6:$H$16"
10.1 Analyse-Methoden 375

'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).

Bild 10-13 Projekt-Strukturplan


378 10 Strategisches Projekt-Controlling

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

Tabelle 10-3 Formeln zum Projekt-Strukturplan

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.

Codeliste 10-5 Prozedur erzeugt die übliche Orgastruktur


Sub LeseOrga()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim lRow1 As Long
Dim lRow2 As Long
Dim lRow3 As Long

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("PSP IT-Projekt")
lRow1 = 2
For lRow2 = 2 To wshTemp.Range("A1").End(xlDown).Row
If wshTemp.Cells(lRow2, 1).Interior.ColorIndex = 19 Then
Debug.Print wshTemp.Cells(lRow2, 1), _
wshTemp.Cells(lRow2, 2)
For lRow3 = lRow1 To lRow2 - 1
Debug.Print wshTemp.Cells(lRow3, 1), _
wshTemp.Cells(lRow3, 2)
Next lRow3
lRow1 = lRow2 + 1
End If
Next lRow2

Set wbkTemp = Nothing


Set wshTemp = Nothing
End Sub
380 10 Strategisches Projekt-Controlling

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.

Codeliste 10-6 Prozedur erstellt ein Hierarchiediagramm


Sub GreateHierarchieDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim salLayout As SmartArtLayout
Dim shpOrga As Shape
Dim sanNodes As SmartArtNodes
Dim sanNode As SmartArtNode
Dim sanRoot As SmartArtNode
Dim lNodes As Long
Dim lRow1 As Long
Dim lRow2 As Long
Dim lRow3 As Long
Dim sNum As String
Dim sNam As String
Dim sStatus As String
Dim iCount As Integer

'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

Set salLayout = Application.SmartArtLayouts(


"urn:microsoft.com/office/officeart/2005/8/layout/orgChart1")
Set shpOrga = ActiveSheet.Shapes.AddSmartArt _
(salLayout, 200, 10, 600, 400)
Set sanNodes = shpOrga.SmartArt.AllNodes
lNodes = sanNodes.Count
'lösche alle Knoten bis auf den letzten
For iCount = 2 To lNodes
shpOrga.SmartArt.Nodes(1).Delete
Next iCount
'Setze ersten Knoten
Set sanRoot = sanNodes(1)
With sanRoot.TextFrame2.TextRange
.Text = "PSP IT-Projekt"
.Font.Fill.ForeColor.RGB = vbBlack
.Font.Size = 8
.Font.Bold = True
End With
sanRoot.Shapes(1).Fill.ForeColor.RGB = _
FarbCode(wshTemp.Cells(1, 4))
On Error Resume Next
sanRoot.Shapes(1).Line.DashStyle = 0
sanRoot.Shapes(1).Line.Weight = 1
sanRoot.Shapes(1).Line.ForeColor.RGB = vbBlack
On Error GoTo 0
'Leseschleife erstellt restliche Knoten
lRow1 = 2
For lRow2 = 2 To wshTemp.Range("A1").End(xlDown).Row
If wshTemp.Cells(lRow2, 1).Interior.ColorIndex = 19 Then
sNum = wshTemp.Cells(lRow2, 1)
sNam = wshTemp.Cells(lRow2, 2)
sStatus = wshTemp.Cells(lRow2, 3)
If lRow1 = 2 Then
Call CreateChildNode _
(sanRoot, sanNode, sNum, sNam, sStatus)
Else
Call CreateRootNode _
(sanRoot, sanNode, sNum, sNam, sStatus)
End If
Set sanRoot = sanNode
For lRow3 = lRow1 To lRow2 - 1
sNum = wshTemp.Cells(lRow3, 1)
sNam = wshTemp.Cells(lRow3, 2)
sStatus = wshTemp.Cells(lRow3, 3)
Call CreateChildNode _
(sanRoot, sanNode, sNum, sNam, sStatus)
Next lRow3
lRow1 = lRow2 + 1
End If
Next lRow2
'Systemeinstellungen
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.EnableEvents = True
382 10 Strategisches Projekt-Controlling

End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set salLayout = Nothing
Set shpOrga = Nothing
Set sanNodes = Nothing
Set sanNode = Nothing
End Sub

Sub CreateRootNode(sanRoot, sanNode, sNum, sNam, sStatus)


Set sanNode = sanRoot.AddNode(Position:=msoSmartArtNodeAfter)
With sanNode.TextFrame2.TextRange
.Text = sNum & " " & sNam
.Font.Fill.ForeColor.RGB = vbBlack
.Font.Size = 8
End With
sanNode.Shapes(1).Fill.ForeColor.RGB = FarbCode(sStatus)
On Error Resume Next
sanNode.Shapes(1).Line.DashStyle = 1
sanNode.Shapes(1).Line.Weight = 1
sanNode.Shapes(1).Line.ForeColor.RGB = vbBlack
On Error GoTo 0
End Sub

Sub CreateChildNode(sanRoot, sanNode, sNum, sNam, sStatus)


Set sanNode = sanRoot.AddNode(Position:=msoSmartArtNodeBelow)
With sanNode.TextFrame2.TextRange
.Text = sNum & " " & sNam
.Font.Fill.ForeColor.RGB = vbBlack
.Font.Size = 8
End With
sanNode.Shapes(1).Fill.ForeColor.RGB = FarbCode(sStatus)
On Error Resume Next
sanNode.Shapes(1).Line.DashStyle = 1
sanNode.Shapes(1).Line.Weight = 1
sanNode.Shapes(1).Line.ForeColor.RGB = vbBlack
On Error GoTo 0
End Sub

Function FarbCode(sStatus) As Long


Dim dWert As Double
Dim sWert As String
sWert = Replace(sStatus, ",", ".")
dWert = Val(sWert)
If dWert < 0.34 Then
FarbCode = RGB(255, 127, 127)
Else
If dWert <= 0.67 Then
FarbCode = RGB(255, 215, 0)
Else
FarbCode = RGB(152, 255, 152)
End If
End If
End Function
10.2 Planungs-Methoden 383

Bild 10-16 Projekt-Hierarchiediagramm

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).

Bild 10-17 Übergang von Vorgangselementen zum Netzplan

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

Die Vorwärtsrechnung ergibt eine Laufzeit von 17 Zeiteinheiten.


Rückwärtsrechnung
Bei der Rückwärtsrechnung werden für jede Aktivität die spätesten notwendigen
Anfangszeitpunkte ermittelt, die eingehalten werden müssen, um das Projektende nicht zu
verzögern. Der Ausgangspunkt der Berechnung ist der späteste zulässige Projektendtermin und
der sollte um ein Maß x nach dem bei der Vorwärtsrechnung ermittelten Projektendtermin
liegen.
SAZn = FAZn + x. (10.2)
Wird von diesem die Vorgangsdauer abgezogen, erhält man den spätestens notwendigen
Anfangszeitpunkt (SAZ) des Vorgängers (Bild 10-21).
𝑆𝐴𝑍 = 𝑀𝑖𝑛 𝑆𝐴𝑍 − 𝐷 , 𝑘 = 1, … , 𝑛 (10.3)

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).

Codeliste 10-7 Prozedur erstellt einen Netzplan mit Vorwärtsrechnung


Sub CreateNetzplan()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim colKnoten As Collection
386 10 Strategisches Projekt-Controlling

Dim objKtn As clsKnoten


Dim objLine As clsLine
Dim lRow As Long
Dim lBegin As Long
Dim lEnd As Long
Dim lMax As Long
Dim sNum As String
Dim sNach As String
Dim sMkr() As String 'VerbindungsArray
Dim iMkr As Integer 'VerbindungsIndex
Dim iMax As Integer
Dim iDa As Integer
Dim sNum1 As String
Dim sNum2 As String
Dim sNumx As String
Dim lX As Long
Dim lY As Long
Dim sZeit As String
Dim iZeit As Integer
Dim iZeit1 As Integer
Dim iZeit2 As Integer

'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

sMkr(4, iMkr) = wshTemp.Cells(1 + Val(sNach), 5)


Next lRow
iMax = UBound(sMkr, 2)
'Backtracking vorwärts und rückwärts
wshTemp.Activate
lX = 100
lY = 300
iMkr = 1
On Error Resume Next
Do
Do
'vorwärts
'ist Verb. nicht bearbeitet
If sMkr(3, iMkr) > 0 Then
sNum1 = sMkr(1, iMkr)
sNum2 = sMkr(2, iMkr)
'Knoten1 vorhanden ?
Set objKtn = colKnoten.Item("G_" & sNum1)
If objKtn.lPosX = 0 Then
'erstelle Knoten1
Set objKtn = New clsKnoten
With objKtn
.sTitel = sNum1
.sNum = sNum1
.lPosX = lX
.lPosY = lY
.Create
End With
colKnoten.Add objKtn, "G_" & sNum1
Err.Number = 0
Else
'übernehme x-Position
lX = objKtn.lPosX
iZeit = Val(objKtn.sZeit)
End If
Set objKtn = Nothing
'Knoten2 vorhanden?
Set objKtn = colKnoten.Item("G_" & sNum2)
If objKtn.lPosX = 0 Then
Set objKtn = New clsKnoten
With objKtn
.sTitel = sNum2
.sNum = sNum2
.lPosX = lX + 200
.lPosY = lY
.sZeit = iZeit + Val(sMkr(4, iMkr))
.Create
End With
colKnoten.Add objKtn, "G_" & sNum2
Else
iZeit1 = Val(objKtn.sZeit)
iZeit2 = iZeit + Val(sMkr(4, iMkr))
If iZeit2 > iZeit1 Then
objKtn.sZeit = Str(iZeit2)
wshTemp.Shapes("R2_" & sNum2).TextFrame. _
388 10 Strategisches Projekt-Controlling

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

Codeliste 10-8 Eigene Klasse Knoten im Klassenmodul clsKnoten


Public Enum Maße
lBreite = 30
lHöhe = 30
End Enum
Public sNum As String
Public sTitel As String
Public lPosX As Long
Public lPosY As Long
Public sZeit As String

Sub Create()
Dim shpR1 As Shape
Dim shpR2 As Shape
Dim shpR3 As Shape
Dim shpGroup As Shape

Set shpR1 = ActiveSheet.Shapes.AddShape _


(1, lPosX, lPosY, 2 * lBreite, lHöhe)
With shpR1
.Name = "R1_" & sNum
.TextFrame.Characters.Text = sNum
.TextFrame.Characters.Font.ColorIndex = 1
.Fill.ForeColor.RGB = RGB(255, 255, 255)
End With
Set shpR2 = ActiveSheet.Shapes.AddShape _
(1, lPosX, lPosY + lHöhe, lBreite, lHöhe)
With shpR2
.Name = "R2_" & sNum
.TextFrame.Characters.Text = sZeit
.TextFrame.Characters.Font.ColorIndex = 1
.Fill.ForeColor.RGB = RGB(255, 255, 255)
End With
Set shpR3 = ActiveSheet.Shapes.AddShape _
(1, lPosX + lBreite, lPosY + lHöhe, lBreite, lHöhe)
With shpR3
.Name = "R3_" & sNum
.TextFrame.Characters.Font.ColorIndex = 1
.Fill.ForeColor.RGB = RGB(255, 255, 255)
End With
ActiveSheet.Shapes.Range(Array _
(shpR1.Name, shpR2.Name, shpR3.Name)).Select
Set shpGroup = Selection.ShapeRange.Group
shpGroup.Name = "G_" & sNum
With shpGroup
With .Line
.DashStyle = 1
.Weight = 0.25
End With
With .TextFrame
.HorizontalAlignment = xlHAlignCenter
.VerticalAlignment = xlVAlignCenter
End With
390 10 Strategisches Projekt-Controlling

Set shpR1 = Nothing


Set shpR2 = Nothing
Set shpR3 = Nothing
Set shpGroup = Nothing
End Sub

Codeliste 10-9 Eigene Klasse Linie im Klassenmodul clsLinie


Public sNum1 As String
Public sNum2 As String
Public iZeit As Integer

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

Bild 10-22 Netzplan zum Beispiel

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

Bild 10-26 Starttermine und Dauer im Balkendiagramm

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).

Bild 10-27 Ausblenden der Starttermin-Balken

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.

Codeliste 10-10 Prozedur erstellt ein Gantt-Diagramm


Sub GreateGanttDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'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.

Tabelle 10-4 Liste wichtiger Datums-Funktionen

Excel-Funktion VBA-Anweisung Anwendung


WOCHENTAG WEEKDAY bestimmt aus dem Datumswert den
Wochentag als Zahlenwert
ARBEITSTAG WORKDAY liefert ein Datum, das von einem
Startdatum aus um eine Anzahl
Arbeitstage vor oder zurückliegt
NETTOARBEITSTAGE NETWORKDAYS gibt die Anzahl Arbeitstage in einem
Intervall
ARBEITSTAG.INTL WORKDAY.INTL gibt die fortlaufende Zahl des Datums
vor oder nach einer bestimmten Anzahl
Arbeitstagen mit benutzerdefinierten
Wochenendparametern zurück
NETTOARBEITSTAG. NETWORKDAYS. gibt die Anzahl der vollen Arbeitstage
INTL INTL zwischen zwei Datumsangaben zurück
Syntax zur WOCHENTAG-Funktion:
=WOCHENTAG(Datumswert;[Rückgabetyp])
Der Rückgabetyp bestimmt den ersten Tag der Woche und damit den Rückgabewert der
Funktion (Tabelle 10-5).

Tabelle 10-5 Funktionswerte zur Funktion WOCHENTAG

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

Aufgabe zur WOCHENTAG-Funktion:


Ein Controller soll in einer Datumsliste die Wochenenden farblich kennzeichnen (Bild 10-30).

Bild 10-30
Anwendung der
Funktion
WOCHENTAG

Tabelle 10-6 Bereichsname und Formel in der WOCHENTAG-Anwendung

Bereich Bereichsname Formel


D1:D6 Liste
E1:E6 =WOCHENTAG(Liste;2)

Codeliste 10-11 Prozeduren zur WOCHENTAG-Anwendung


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Liste", RefersTo:=Range("D1:D6")
End With
End Sub

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

Syntax zur ARBEITSTAG-Funktion:


=ARBEITSTAG(Anfangsdatum; Tage; [freie Tage])
Darin wird mit Tage die Anzahl der Tage genannt, die nicht an einem Wochenende oder
Feiertag liegen. Ein positiver Wert berechnet ein zukünftiges und ein negativer Wert ein
zurückliegendes Datum. Freie Tage stellen eine Liste von Datumsangaben dar.
Aufgabe zur ARBEITSTAG-Funktion:
Ein Controller soll ein Datum bestimmen, das ab einem Startdatum um eine Anzahl
Arbeitstage vor bzw. zurück liegt (Bild 10-31).
10.2 Planungs-Methoden 397

Bild 10-31
Anwendung der Funktion
ARBEITSTAG

Tabelle 10-7 Formel in der ARBEITSTAG-Anwendung

Bereich Formel Hinweis


E2 =ARBEITSTAG(C2;D2) Übertragen auf E3:E7

Codeliste 10-12 Prozeduren zur ARBEITSTAG-Anwendung


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="Liste", RefersTo:=Range("D1:D6")
End With
End Sub

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

Syntax zur NETTOARBEITSTAGE-Funktion:


NETTOARBEITSTAGE(Anfangsdatum, Enddatum; [freie Tage])
Gibt die Anzahl der Arbeitstage in einem Zeitintervall zurück. Nicht zu den Arbeitstagen
gezählt werden Wochenenden sowie die Tage, die als Ferien (Feiertage) angegeben sind.
Aufgabe zur NETTOARBEITSTAGE-Funktion:
398 10 Strategisches Projekt-Controlling

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

Tabelle 10-8 Bereichsname und Formel in der NETTOARBEITSTAGE-Anwendung

Bereich Bereichsname Formel Format


C2:C10 Freie_Tage
D2 =NETTOARBEITSTAGE(A2;B2;freie_Tage) # "Tage"
D3:D10 D2 übertragen

Codeliste 10-13 Prozeduren zur NETTOARBEITSTAGE-Anwendung


Sub NamenVergeben()
Call NamenDelete
With ActiveWorkbook.Names
.Add Name:="freie_Tage", RefersTo:=Range("C2:C10")
End With
End Sub

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.

Bild 10-33 Formular der Kapazitätsplanung (Zeilen 30-45) ausgeblendet

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

Tabelle 10-9 Formeln zur Kapazitätsplanung

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)

Tabelle 10-10 Bedingte Formatierung in der Kapazitätsplanung

Regel Format Wird angewendet auf


=B11<>““ AaBbCcYyZz =$B$11:$I$50
Abgestufte Skala =$K$11:$K$50

Die Abgestufte Skala wird als 3-Farben-Skala definiert (Bild 10-34).


10.2 Planungs-Methoden 401

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

Bild 10-35 Formular der Terminplanung (Zeilen 30-55) ausgeblendet


402 10 Strategisches Projekt-Controlling

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.

Tabelle 10-11 Bereichsnamen und Formeln zur Terminplanung

Bereich Bereichsname Formel


B2 Aktuelles_Datum
B11:I60 Daten
B3 Offset
B10 = WENN(B$9>0; B$7-ARBEITSTAG(B$6;B$8/B$9;2)-2;"")
C10:I10 B10 übertragen
A11 = WENN(WOCHENTAG(MIN(Aktuelles_Datum+Offset-
1);2)=6; MIN(Aktuelles_Datum+Offset-
2);WENN(WOCHENTAG( MIN(Aktuelles_Datum+Offset-
1);2)=7;MIN(Aktuelles_Datum+ Offset-
3);MIN(Aktuelles_Datum+Offset-1)))
A12 = WENN(WOCHENTAG(A11;2)=5;A11+3;A11+1)
A13:A60 A12 übertragen
B11 =WENN(ODER(B$8<=0;$A11<B$6);0;WENN(B$8-
WENN(NETTOARBEITSTAGE(B$6;$A11;2)<0;0;
(NETTOARBEITSTAGE(B$6;$A11;2)1)*B$9)>B$9;
(NETTOARBEITSTAGE(B$6;$A11;2))*B$9/B$8;WENN(B$8-
(NETTOARBEITSTAGE(B$6;$A11;2)-1)*B$9>0;1;0)))
B11:I60 B11 übertragen
J12 =(B12-B11>0)*((B12-B11)*B$8)+(C12-C11>0)*((C12-
C11)*C$8) +(D12-D11>0)*((D12-D11)*D$8)+(E12-
E11>0)*((E12-E11)*E$8) +(F12-F11>0)*((F12-
F11)*F$8)+(G12-G11>0)*((G12-G11)*G$8) +(H12-
H11>0)*((H12-H11)*H$8)+(I12-I11>0)*((I12-I11)*I$8)
J13:J60 J12 übertragen

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 zeigt eine vereinfachte Produktionsliste.

Bild 10-37
Produktionsliste
(Zeilen 5-18 ausgeblendet)

Bild 10-38 zeigt eine vereinfachte Liste sonstiger Kosten.

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

Bild 10-39 Auszug aus dem Formular der Kostenplanung

Tabelle 10-12 Bereichsnamen und Formeln zur Kostenplanung

Bereich Bereichsname Formel


A2:C21 Produktion
A2:D21 Team
A2:C11 Sonstiges
C8 (C8:H8) =WENN(C7="";"";SVERWEIS(C7;Personal;4))
C6 (C6:H6) =WENN(C7>0;VERKETTEN(SVERWEIS(C7;Team;3);"";
SVERWEIS(C7;Team;2);" "))
I10 = SUMMENPRODUKT(C10:H10;C$8:H$8)
(I10:I40)

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

Die Reporte bieten wertvolle und wichtige Entscheidungsgrundlagen für das


Projektmanagement im Hinblick auf eine mögliche Verkürzung der Projektlaufzeit, der
optimalen Verwendung der vorhandenen Ressourcen und der Bestimmung der noch benötigten
Kosten bis zum Projektende.

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.

Bild 11-2 Aufwand in den Projektphasen

© 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

Aufgeklappt ergeben sich mehrere Teiltabellen (Bild 11-4).

Bild 11-4 Auszug aus dem Entwicklungsplan mit Planungsdaten

Eine weitere Tabelle, in die die Werte aus der Entwicklungstabelle übertragen werden (im
Beispiel nicht ausgeführt) ist der Fortschrittsbericht (Bild 11-5).

Bild 11-5 Auszug aus dem Fortschrittsbericht

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

Kostensummenlinie ist dagegen eine kumulierte Darstellung der Kostenentwicklung im


Projekt. Sie erlaubt den ganzheitlichen Überblick über den Kostenverlauf im Projekt. Werden
beiden Linien als Sollkurven die jeweiligen Istwerte gegenübergestellt, dann zeigt diese
Methode ihre wahre Fähigkeit.

 XCT_11-02_KostengangKostensummeLinien.xlsm

Das Anwendungsbeispiel (Bild 11-6) zeigt eine Liste mit den erfassten Werten für einen
Jahreszeitraum.

Bild 11-6 Kostengang- und Kostensummenwerte

Tabelle 11-1 Formeln zur Kostenliste

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.

Codeliste 11-1 Prozedur erzeugt Kostengang-Kostensummen-Diagramm


Sub CreateKostenlinien()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Kostenlinien")
wshTemp.DrawingObjects.Delete
wshTemp.Range("Kostenlinien!$B$1:$M$2").Select
Set shpTemp = wshTemp.Shapes.AddChart2(227, xlLineMarkers)
'Diagramm
Set chrTemp = shpTemp.Chart
11.1 Organisations-Methoden 409

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.

Bild 11-8 Finanzierungs-Möglichkeiten


11.1 Organisations-Methoden 411

 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

Der Kostenverlauf im Projekt (Bild 11-10) ist hier ein Polynom.

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).

Bild 11-11 Trendlinie durch ein Polynom dritten Grades

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).

Codeliste 11-2 Prozedur bestimmt die notwendigen Zahlungsbeträge


Sub CreateKostenlinien()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim lRow As Long
Dim lRowX As Long
Dim lRowY As Long
Dim dFkt As Double
Dim dx As Double
Dim dx1 As Double
Dim vDate As Date
Dim vNull As Date
Dim sx As String
11.1 Organisations-Methoden 413

Set wbkTemp = ThisWorkbook


Set wshTemp = wbkTemp.Worksheets("Gedeckte Kostensumme")
With wshTemp
'Löschung
.DrawingObjects.Delete
.Range("F2:G50").Clear
.Range("D16:D26").Clear
'Abzissenwerte
vNull = .Range("C2")
For lRow = 2 To 12
vDate = .Cells(lRow, 3)
.Cells(lRow, 6) = vDate - vNull
Next lRow
'Diagramm
.Range("D2:D12").Select
Set shpTemp = .Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers)
End With
Set chrTemp = shpTemp.Chart
With chrTemp
.SetSourceData _
Source:=Range("D2:D12")
.FullSeriesCollection(1).XValues = _
"='Gedeckte Kostensumme'!$F$2:$F$12"
.Axes(xlCategory).TickLabels.Orientation = 45
.Axes(xlCategory).MinimumScale = 0
.Axes(xlCategory).MaximumScale = 365
.HasTitle = True
.ChartTitle.Text = "Finanzsplan"
'Achsenbeschriftung
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
"Projekttage"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = _
"Summen"
.Axes(xlValue, xlPrimary).TickLabels.NumberFormat = "#.##0"
'Bestimmung der Kostenfunktionswerte
For lRow = 2 To 12
dx = wshTemp.Cells(lRow, 6)
dFkt = f(dx)
wshTemp.Cells(lRow, 7) = dFkt
Next lRow
'zeige Kostenfunktion
.SeriesCollection.NewSeries
.FullSeriesCollection(2).XValues = _
"='Gedeckte Kostensumme'!$F$2:$F$12"
.FullSeriesCollection(2).Values = _
"='Gedeckte Kostensumme'!$G$2:$G$12"
.ChartArea.Left = 420
.ChartArea.Top = 10
.ChartArea.Height = 300
End With
'Bestimmung der Zahlungswerte
With wshTemp
414 11 Operatives Projekt-Controlling

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

Function f(ByVal x As Double) As Double


Const a0 = 3148.6
Const a1 = 274.33
Const a2 = 8.9268
Const a3 = 0.0173
f = -a0 - a1 * x + a2 * x ^ 2 - a3 * x ^ 3
End Function

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

11.1.4 Agile Projektplanung


Ursprünglich stammt der Begriff agil aus der Softwareentwicklung, die nach unterschiedlichen
Modellen abläuft. Diese unterteilt man in sukzessive, iterative, evolutionäre und agile
Methoden. Die Grundidee einer agilen Methode ist, dass mehrere Aufgaben für sich betrachtet
ein funktionsfähiges Teilsystem ergeben und in sogenannten Sprints von einem kleinen Team
umgesetzt werden. Das Teilsystem und die gemachten Erfahrungen fließen direkt wieder in das
Projekt ein (Bild 11-14) und verändern so möglicherweise die Ziele.

Bild 11-14
Agiles Prinzip

Besonders bekannt ist die agile Methode Scrum (Bild 11-15).

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

Tabelle 11-2 Formeln zur agilen Planung

Bereich Formel übertragen nach


D2 =MIN(D3:D6) D7, D11, D15 und anpassen
E2 =MAX(E3:E6) E7, E11, E15 und anpassen
F2 =E2-D2 F3:F17 und anpassen
G2 =MITTELWERT(G3:G6) G7, G11, G15 und anpassen

Die Prozedur CreateGanttDiagramm (Codeliste 11-3) erstellt ein Gantt-Diagramm (Bild 11-
17).
418 11 Operatives Projekt-Controlling

Codeliste 11-3 Prozedur erstellt ein Gantt-Diagramm zur agilen Planung


Sub GreateGanttDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim lRow As Long

'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

Tabelle 11-3 Bereichsnamen und Formeln zum Kostenvergleich

Bereich Bereichsname Formel übertragen nach


B2:B12 Plan
C2:C12 Status
D2:D12 Anteil
E2:E12 Ist
F2:F12 Abw.
D2:D7, D9:D12 =Plan*Status
F2:F7, F9:F12 =Ist-Anteil
G2:G12 =WENN(Anteil>0;Abw./Anteil;0)
B8 =SUMME(B2:B7) D8:F8

Die Prozedur CreateKostenDiagramm (Codeliste 11-4) erstellt mit den berechneten


Abweichungen ein gruppiertes Balkendiagramm (Bild 11-19).

Codeliste 11-4 Prozedur erstellt ein Kosten-Vergleichsdiagramm


Sub CreateKostenDiagramm()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim lRow As Long
'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("Arbeitspaket")
11.2 Kontroll-Methoden 421

'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("Arbeitspaket!$F$2:$F$12")
.Axes(xlCategory).ReversePlotOrder = True
.Axes(xlValue).MinimumScale = -5000
.Axes(xlValue).MaximumScale = 3000
.Axes(xlValue).MajorUnit = 2000
.HasTitle = True
.ChartTitle.Text = "Kostenvergleich"
.FullSeriesCollection(1).XValues = "=Arbeitspaket!$A$3:$A$12"
.FullSeriesCollection(1).Select
.ChartGroups(1).GapWidth = 10
.FullSeriesCollection(1).Format.Fill.ForeColor.RGB = _
RGB(0, 176, 240)
.FullSeriesCollection(1).Format.Shadow.Type = msoShadow21
End With
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub

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).

Codeliste 11-5 Prozedur erstellt eine MTA


Sub CreateMTA()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'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

Aus dem Verlauf der Geraden ergeben sich folgende Aspekte:


 Waagerechte Trends bedeuten keine Veränderungen zwischen Plan und Ist.
 Fallende Trends bedeuten, dass der Meilenstein vorzeitig erreicht wird.
 Steigende Trends bedeuten, dass sich Verzögerungen ergeben.
 Die Analyse erlaubt weitere Betrachtungen:
o Wird der Abstand zwischen den Meilensteinen kleiner, dann verkürzt sich
die zur Verfügung stehende Zeit. Dies bedarf einer eindeutigen Klärung.
424 11 Operatives Projekt-Controlling

o Eine Meilenstein-Analyse eignet sich durch die komprimierte Darstellung


sehr gut für einen Statusreport.
o Die Analyse ist ein gutes Informationsmittel im Projektteam.

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

Codeliste 11-6 Prozedur erstellt eine RTA


Sub CreateRTA()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'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).

Codeliste 11-7 Prozedur erstellt eine KTA


Sub CreateKTA()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("KTA")
11.2 Kontroll-Methoden 427

'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:G3").Select
.SetSourceData Source:=Range("KTA!$C$3:$G$3")
.FullSeriesCollection(1).XValues = "=KTA!$C$1:$G$1"
.FullSeriesCollection(1).Name = "=KTA!$B$3"
.FullSeriesCollection(1).Values = "=KTA!$C$3:$G$3"
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=KTA!$B$4"
.FullSeriesCollection(2).Values = "=KTA!$C$4:$G$4"
.SeriesCollection.NewSeries
.FullSeriesCollection(3).Name = "=KTA!$B$5"
.FullSeriesCollection(3).Values = "=KTA!$C$5:$G$5"
.SeriesCollection.NewSeries
.FullSeriesCollection(4).Name = "=KTA!$B$6"
.FullSeriesCollection(4).Values = "=KTA!$C$6:$G$6"
.SeriesCollection.NewSeries
.FullSeriesCollection(5).Name = "=KTA!$B$7"
.FullSeriesCollection(5).Values = "=KTA!$C$7:$G$7"
.SeriesCollection.NewSeries
.FullSeriesCollection(6).Name = "=KTA!$B$8"
.FullSeriesCollection(6).Values = "=KTA!$C$8:$G$8"
.HasTitle = True
.ChartTitle.Text = "Kosten-Trendanalyse"
.Axes(xlValue).MinimumScale = 20
.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
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub
428 11 Operatives Projekt-Controlling

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).

Codeliste 11-8 Prozedur erstellt ein KTD


Sub CreateKTD()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart

'Excel-Objekte
Set wbkTemp = ThisWorkbook
Set wshTemp = wbkTemp.Worksheets("KTD")
11.2 Kontroll-Methoden 429

'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("B3:F3").Select
.SetSourceData Source:=Range("KTD!$B$3:$F$3")
.FullSeriesCollection(1).XValues = "=KTD!$B$1:$F$1"
.FullSeriesCollection(1).Name = "=KTD!$A$3"
.FullSeriesCollection(1).Values = "=KTD!$B$3:$F$3"
.SeriesCollection.NewSeries
.FullSeriesCollection(2).Name = "=KTD!$A$4"
.FullSeriesCollection(2).Values = "=KTD!$B$4:$F$4"
.HasTitle = True
.ChartTitle.Text = "Kosten-Termin-Diagramm"
.Axes(xlValue).MinimumScale = 20
.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
'aufräumen
Set wbkTemp = Nothing
Set wshTemp = Nothing
Set shpTemp = Nothing
Set chrTemp = Nothing
End Sub

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).

Codeliste 11-9 Prozedur erstellt eine EVA


Sub CreateEVA()
Dim wbkTemp As Workbook
Dim wshTemp As Worksheet
Dim shpTemp As Shape
Dim chrTemp As Chart
Dim lRow As Long
Dim lCol As Long
Dim dSum As Double
Dim dKum As Double

'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

11.2.6 Leistungsmäßiger Fortschrittsgrad


Der leistungsmäßige Fortschrittsgrad gibt an, wie viele Projektaufgaben bereits erfüllt sind. Die
Feststellung ist nicht unproblematisch, denn oft lautet die Antwort des Verantwortlichen: Ich
bin zu 90 % fertig. Nach mehrfach gleicher Antwort dämmert dann dem Projektleiter, dass er
es mit dem berüchtigten 90%-Syndrom zu tun hat.

𝐿𝑒𝑖𝑠𝑡𝑢𝑛𝑔𝑠𝑚äß𝑖𝑔𝑒𝑟 𝐹𝑜𝑟𝑡𝑠𝑐ℎ𝑟𝑖𝑡𝑡𝑠𝑔𝑟𝑎𝑑 = (11.2)

Für eine objektive Betrachtung gibt es mehrere Methoden.


11.2 Kontroll-Methoden 433

Tabelle 11-4 Methoden zur Bestimmung des leistungsmäßigen Fortschrittgrades

Methode Darstellung FGR = x [%]


Statusschritte x = 0, x1, x2, … 100

50/50 x  {0, 50, 100}

0/100 x  {0, 100}

Mengen-Proportionalität x = fertige Menge / Planmenge

Sekundär- x = der führenden


Proportionalität Betrachtungseinheit
Schätzung X = subjektiv geschätzte Maßnahme

Zeit-Proportionalität X = abgelaufene Zeit / geplante Zeit

Beispiel zur Methode Statusschritte (Bild 11-30):

Bild 11-30
Statusschritte

Tabelle 11-5 Bereichsnamen und Formeln zur Statusschritte Methode

Bereich Bereichsname Formel übertragen nach


B2:B7 Plan
C2:C7 Ist
D2:D7 Rest
D2:D7 =Plan-Ist
E2:E7 =WENN(Plan>0;Ist/Plan;0)
F2 =B2*E2
F3 =F2+B3*E3 F4:F7
F8 =F7
B8 =SUMME(Plan)
434 11 Operatives Projekt-Controlling

C8 =SUMME(Ist)
D8 =SUMME(Rest)

Beispiel zur 50/50 Methode (Bild 11-31):

Bild 11-31
50/50

Tabelle 11-6 Bereichsnamen und Formeln zur 50/50 Methode

Bereich Bereichsname Formel


Bereichsnamen und Formeln wie Tabelle 11-5
C2:C7 =WENN(Plan>0;WENN(Ist/Plan=1;1;
WENN(Ist/Plan>=0,5;0,5;0));0)
Bei der Methode 50/50 kann es zu einer Überschätzung kommen. Ungenauer, aber einfacher ist
die nachfolgende Methode.
Beispiel zur 0/100 Methode (Bild 11-32):

Bild 11-32
0/100

Tabelle 11-7 Bereichsnamen und Formeln zur 0/100 Methode

Bereich Bereichsname Formel


Bereichsnamen und Formeln wie Tabelle 11-5
C2:C7 =WENN(Plan>0;WENN(Ist/Plan=1;1;0);0)

Bei dieser Methode kommt es verständlicherweise zu Unterschätzungen. Exakte Werte zu


jedem Meilenstein liefert die nachfolgende Methode.
11.2 Kontroll-Methoden 435

Beispiel zur Step-To-Step-Methode (Bild 11-33):

Bild 11-33
Step-To-Step

Tabelle 11-8 Bereichsnamen und Formeln zur Step-To-Step-Methode

Bereich Bereichsname Formel


B2:B7 Aufwand
B8 Gesamt
C2:C7 =Aufwand/Gesamt
D2 =C2
D3 =D2+C3 übertragen auf D4:D7

Beispiel zur relativen Methode (Bild 11-34):

Bild 11-34
Relative
Methode

Tabelle 11-9 Bereichsnamen und Formeln zur relativen Methode

Bereich Bereichsname Formel


B2:B7 Plan
C2:C7 Ist
D2:D7 Rest
E2:E7 =Ist/(Ist+Rest)
B8 =SUMME(Plan)
C8 =SUMME(Ist)
436 11 Operatives Projekt-Controlling

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.

Bild 11-35 Voraussichtlicher Endtermin


437

Literaturverzeichnis

[1] Britzelmaier, B.: Controlling, 2. Auflage, Pearson Verlag, 2017


[2] Brühl, R.: Vahlen Verlag, 4. Auflage, 2016
[3] Coenenberg, A. G.; Fischer T.M.: Kostenrechnung und Kostenanalyse, Schäfer Poschel Verlag,
9. Auflage, 2016
[4] Deimel, K.; Heupel, T.; Wiltinger, K.: Vahlen Verlag, 1. Auflage, 2013
[5] Deimel, K.; Erdmann, G.; Isemann, R.: Kostenrechnung, Pearson Verlag, 1. Auflage, 2017
[6] Ferraro, A.; Russo, M.: Datenanalyse mit Microsoft Power BI und Power Pivot für Excel,
dpunkt.verlag, 2018
[7] Fiedler, R.: Controlling von Projekten, 5. Auflage, Vieweg Verlag, 2010
[8] Gadasch, A.; Mayer E.: Masterkurs IT-Controlling, Springer Vieweg Verlag, 5. Auflage, 2014
[9] Horvath, P.; Gleich, R.: Controlling, 13. Auflage, Vahlen Verlag, 2015
[10] Jakoby, W.: Controlling für Ingenieure, Springer Vieweg Verlag, 3. Auflage, 2015
[11] Josse G.: Basiswissen Kostenrechnung, dtv. Verlag, 6. Auflage, 2011
[12] Jung, H.: Controlling, De Gryter Oldenbourg Verlag, 4. Auflage, 2014
[13] Langguth, H.; Hagen, V.; Daum, A.: Controlling, Berliner Wissenschafts-Verlag,
1. Auflage, 2016
[14] Nahrstedt, H.: Algorithmen für Ingenieure, 3. Auflage, Springer Verlag, 2017
[15] Nahrstedt, H.: Die Welt der VBA-Objekte, 1. Auflage, Springer Vieweg Verlag, 2016
[16] Nahrstedt, H.: Excel + VBA für Ingenieure, 5. Auflage, Springer Vieweg Verlag, 2017
[17] Nahrstedt, H.: Excel in Perfektion, 2. Auflage, Springer Vieweg Verlag, 2017
[18] Nahrstedt, H.: Projektmanagement, Vorlesungsskript, FOM Münster, 2016
[19] Schultz, V.: Basiswissen Rechnungswesen, dtv. Verlag, 8. Auflage, 2017
[20] Schultz, V.: Controlling, dtv Verlag, 2. Auflage, 2015
[21] Siller, H.; Eschenbach, R.: Controlling Professionell, Schäfer Poeschel Verlag, 2. Auflage,
2011
[22] Steger, J.: De Gryter Oldenbourg Verlag, 1. Auflage 2013
[23] Weber, J.; Schäffer, U.: Einführung in das Controlling, Schäfer Poeschel Verlag,
15. Auflage, 2016
[24] Webseite controllingportal.de
[25] Webseite controlling-wiki.com/de/index.php/Hauptseite
[26] Webseite docs.microsoft.com/de-de/power-bi

© 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

Diagrammtyp [Kapitel] Seite


Balkendiagramm [10] 389, [11] 419
Blasendiagramm [2] 90, [9] 339, [10] 367, 370, 372, 376
Dashboard [7] 249, [9] 349, 360, 364
Fächerdiagramm [4] 183
Fehlerindikatoren in Diagrammen [2] 86
Ganttdiagramm [10] 393, [11] 419
Gestapeltes Balkendiagramm [2] 78, [10] 392
Gestapeltes Säulendiagramm [5] 210, [8] 315
Gruppiertes Säulendiagramm [2] 97, 99, 102, [8] 284, 289, [10] 373
Hierarchiediagramm [SmartArt] [10] 383
Histogramm [9] 333
Kreisdiagramm [2] 92
Kreisringdiagramm [4] 186
Linie mit Datenpunkten [2] 80, 83, [11] 424, 426, 428, 429,432
Liniendiagramm [5] 207, 218, 222, [8] 300, [9] 337, 353, 356
Netzdiagramm [2] 100, [8] 271
Netzplandiagramm [10] 390
Oberflächendiagramm [4] 191
Paretodiagramm [2] 95, 97, [6] 231, [8] 280
Pivot-Diagramme [4] 182
Polynomische Trendlinie [11] 412
Prognosediagramm [5] 217
Punktdiagramm [6] 234
Punkte mit geraden Linien [5] 226, [6] 240 [11] 410
Punkte mit interpolierenden Linien [6] 240, [11] 411
Ringdiagramm [9] 347

© 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

Diagrammtyp [Kapitel] Seite


Säulendiagramm [5] 219, 224, [7] 252, [8] 266, 269, [9] 331, 348, 352
Treemap-Diagramm [4] 190
Trendlinie im Diagramm [2] 84
Verbunddiagramm [8] 291, [11] 410
Vertikales Liniendiagramm [8] 274, [9] 358
Wasserfalldiagramm [8] 292, 295, [9] 332
Wertschöpfungskettendiagramm [2] 89
Zusammengesetzte Datenreihen [2] 85
441

Funktionenverzeichnis

Funktion [Kapitel] Seite Funktion [Kapitel] Seite


ABRUNDEN [3] 155 RANDOMIZE [5] 224
ADRESSE [3] 137 RANG [9] 327
ANZAHL [3] 132 RMZ [3] 139
ANZAHL2 [3] 132 RUNDEN [3] 153
ARBEITSTAG [10] 396 SCHÄTZER [2] 86
AUFRUNDEN [3] 154 SPALTE [3] 136
BEREICH. SUMME [3] 113
VERSCHIEBEN [3] 108
SUMMEWENN [3] 113, [4] 200
BW [3] 140
SUMMEWENNS [3] 114
DATUM [3] 129
SVERWEIS [3] 118, [4] 196
DBSUMME [3] 116
TAG [3] 127
DIA [3] 149
TREND [2] 84
EFFEKTIV [8] 311
UND [3] 105
GDA [3] 150
VARIATION [2] 87
GDA2 [3] 151
VDB [3] 152
HÄUFIGKEIT [6] 231
VERGLEICH [3] 120, [4] 201
HEUTE [3] 130
VERWEIS [3] 117
INDEX [3] 122, [4] 202
WAHL [4] 197
JAHR [3] 127
WENN [3] 103
JETZT [3] 131
WOCHENTAG [10] 395
KALENDERWOCHE [3] 130
WVERWEIS [3] 119
KGRÖSSTE [3] 125, [4] 200
ZÄHLENWENN [3] 134
KKLEINSTE [3] 126
ZÄHLENWENNS [3] 135
KORMAT [6] 238
ZEICHEN [5] 214
LIA [3] 148
ZEILE [3] 136
MAX [3] 111
ZINS [3] 142
MDET [5] 221
ZINSZ [3] 143
MIN [3] 110
ZUFALLSBEREICH [5] 224
MMULT [5] 221
ZUFALLSZAHL [5] 224
MONAT [3] 127
ZW [3] 141
NBW [3] 146
ZZR [3] 144
NETTOARBEITSTAGE [10] 397
ODER [3] 106

© 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

Bezeichnung [Kapitel] Seite B


Balanced Scorecard [8] 280
3D-Oberflächen-Diagramm [4] 190 Barwertfunktionen [3] 138
BCG-Matrix [10] 365
A
Bedingte Auswahl [1] 25
ABC-Analyse [9] 327
Bedingte Schleifen [1] 25
ABRUNDEN-Funktion [3] 155
Bedingte Verzweigung [1] 24
Abschreibung [8] 304
Benchmarking [8] 278
Abschreibungsfunktionen [3] 147
Benutzerdef. Aufzählvariable [1] 22
Abweichungs-Analyse [9] 350
Benutzerdefinierte Datentypen [1] 22
Abweisend bedingte Schleife [1] 26
BEREICH.VERSCHIEBEN [3] 107
Add-Ins [1] 59
Bereichs-Controlling [9] 340
ADRESSE-Funktion [3] 137
Bereichsnamen [1] 34
Agile Projektplanung [11] 416
Beziehungen [4] 192
Aktionen unter Excel [1] 54
Break-Even-Analyse [8] 296
Analyse-Add-Ins installieren [6] 227
BW-Funktion [3] 140
Analyse-Methoden, ergänzende [6] 227
By Reference [1] 21
Analyse-Methoden, integrierte [5] 203
By Value [1] 21
Annuitätentilgung [8] 314
Anwendung [1] 8 C
Anwendung starten [1] 54 Cashflow [8] 304, 307
ANZAHL2-Funktion [3] 132 Cockpit-Tachometer [4] 184
ANZAHL-Funktion [3] 132 Codefenster teilen [1] 57
Application-Object [1] 29 Collection [1] 44
Arbeiten mit Objekten [1] 39
Arbeitsblatt anlegen [1] 55 D
ARBEITSTAG-Funktion [10] 396 Dashboard Produktion [7] 249
Aufgaben operatives Controlling [2] 71 Daten filtern [4] 162
Aufgaben Projekt-Controlling [2] 75 Daten konsolidieren [4] 157
Aufgaben Prozess-Controlling [2] 74 Datenaufbereitung [4] 157
Aufgaben strateg. Controlling [2] 72 Datenfelder [1] 20
AUFRUNDEN-Funktion [3] 154 Datenlisten [1] 20
Ausführend bedingte Schleife [1] 26 Datenschnitte [4] 165
Datentabelle mit einer Variablen [5] 211
Datentabelle mehrere Variable [5] 213
Datentabelle mit zwei Variablen [5] 213

© 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

Datentyp bestimmen [1] 69 Finanzplan Projekt [11] 410


Datentypen [1] 19 Find-Methode [1] 35
DATUM-Funktion [3] 129 Focus [1] 14
Datumsfunktionen [3] 127 Formular [1] 12
DBSUMME-Funktion [3] 116 Freier Fall [1] 37
Debug.Print [1] 39 Freier Puffer Netzplan [10] 385
Deckungsbeitragsrechnung [8] 292 Friend [1] 27
Destruktor [1] 38 Funktionen [1] 17
Deterministische Simulation [5] 221
DIA-Funktion [3] 149 G
Dictionary [1] 46 Gantt-Diagramm [10] 390
Direkte Adressierung [1] 33 GDA2-Funktion [3] 151
Direktfenster [1] 5 GDA-Funktion [3] 150
DoEvents einsetzen [1] 66 Geltungsbereich [1] 26
Dyn. Amortisationsrechnung [8] 323 Gesamtpuffer [10] 385
Dyn. Investitionsrechnung [8] 318 Gewinn- und Verlustrechnung [8] 289
Global [1] 17
E Grundfunktionen [3] 103
Earned-Value-Analyse [11] 430
EFFEKTIV-Funktion [8] 311 H
Eigene Funktionen [1] 62 Haltepunkt [1] 56
Eigene Klassen und Objekte [1] 36 HÄUFIGKEIT-Funktion [6] 231
Eigenschaften [1] 4 HEUTE-Funktion [3] 130
Eigenschaftsfenster [1] 4 Histogramm [6] 229
Einfache Zinsrechnung [8] 310
I
Einfluss-Analyse [10] 375
INDEX-Funktion [3] 122
Einf. von Zellen, Zeilen, Spalten [1] 34
Indirekte Adressierung [1] 33
Einstufige DBR [8] 293
Instanzierung von Objekten [1] 38
Entstehung des Controllings [2] 71
Integrated Development Environm. [1] 1
Entstehung von Excel [2] 71
Interner Zinsfuß [8] 324
Entwicklungsumgebung [1] 1
Investitionsdaten zusammenst. [8] 319
Ereignisse [1] 6
Investitionsrechnung [8] 317
Events und eigene Objekte [1] 49
IT-Controlling [9] 358
F J
Fächerdiagramm [4] 182
JAHR-Funktion [3] 127
Fehlerbehandlung in Prozeduren [1] 27
JETZT-Funktion [3] 131
Fehlernummer [1] 27
Filtern von Daten [4] 162
Index 445

K Listenfeld mit mehreren Spalten [1] 64


KALENDERWOCHE-Funktion [3] 130 Lokalfenster [1] 5
Kapazitätsplanung [10] 399 Löschen von Zellinhalten [1] 34
Kapitalwert-Methode [8] 322
M
Kennzahlen [8] 274
Machbarkeitsstudie [2] 89
Kennzahlensysteme [8] 277
Makro [1] 8
Key Performance Indicators [8] 274
Marketing-Controlling [9] 356
KGRÖSSTE-Funktion [3] 125
Marktanalyse [2] 76
KKLEINSTE-Funktion [3] 126
Marktbefragung [2] 79
Klassenaufteilung [9] 332
Material-Controlling [9] 340
Kommentare [1] 17
MAX-Funktion [3] 111
Kommentarzuweisungen [1] 33
McKinsey-Matrix [10] 367
Konsolidieren von Daten [4] 157
Mehrstufige DBR [8] 295
Konstante [1] 18
Meilenstein-Trendanalyse [11] 420
Konstruktor [1] 38
Methoden [1] 6
Kontextmenü [1] 55
MIN-Funktion [3] 110
Kontroll-Methoden [11] 421
Module [1] 17
Korrelation [6] 234
MONAT-Funktion [3] 127
Korrel.Matrix VBA-Funktion [6] 237
Kostenganglinie [11] 407 N
Kostenplanung [10] 402 Nachschüssige Verzinsung [8] 309
Kostenrechnerische Analysen [8] 286 Namen vergeben [1] 54
Kostensummenlinie [11] 407 NBW-Funktion [3] 145
Kosten-Termin-Diagramm [11] 428 NETTOARBEITSTAGE [10] 397
Kosten-Trendanalyse [11] 426 Netzplan [10] 383
Kosten-Vergleichsrechnung [8] 325 Nutzwert-Analyse [10] 372
Kostenvergleichstabelle [11] 419
Kreditberechnungen [8] 308 O
Kritischer Pfad [10] 385 Objekte [1] 6
Kurzfristige Erfolgsrechnung [8] 300 Objekte unter Excel [1] 28
Objektkatalog [1] 4
L Objektlisten [1] 44
Laufzeitfehler [1] 28 Objektvariable [1] 36
Lebensdauer eines Produkts [9] 336 ODER-Funktion [3] 106
Lebenszyklus eins Produkts [2] 101 On Error [1] 27
Leistungs. Fortschrittsgrad [11] 432 Operatives Projekt-Controlling [11] 405
LIA-Funktion [3] 148 Operatives Prozess-Controlling [9] 327
Lineare Abschreibung [8] 304 Operatoren [1] 23
Lineare Optimierung [5] 219
446 Index

Optimale Losgröße [9] 352 R


Option Explicit [1] 3 Range-Objekte [1] 31
Optional [1] 21 Regression [6] 234
Optionen [1] 2 Relationen [4] 192
Ressourcenplanung [10] 394
P
Ressourcen-Trendanalyse [11] 424
Parameter [1] 20
Risiko-Portfolio [10] 370
Parameterlisten [1] 20
RMZ-Funktion [3] 139
Pareto-Prinzip [2] 94
Rückwärtsrechnung Netzplan [10] 385
Personal-Controlling [9] 360
RUNDEN-Funktion [3] 153
Pivot-Diagramme [4] 182
Rundungsfunktionen [3] 153
Pivot-Tabellen [4] 168
Planungs-Methoden Projekt [10] 377 S
Polynomische Trendlinie [11] 412 Schalter [1] 25
Populationskenngrößen [6] 232 Schleifen über Objektlisten [1] 26
Power BI Desktop [7] 243 Schleifenabbruch [1] 26
Power Map [7] 250 Scrum-Methode [11] 416
Power Pivot [7] 256 ShowModal-Eigenschaft [1] 65
Power Query [7] 254 SMART Methode [2] 98
Privat [1] 27 Solver [6] 239
Probabilistische Simulation [5] 223 SPALTE-Funktion [3] 136
Produktions-Controlling [9] 350 Spalten [1] 32
Produkt-Lebenszyklus [2] 101 Standardfunktionen [1] 23
Prognoseblatt [5] 216 Static [1] 27
Projekt [1] 3 Statische Amortisationsrechng. [8] 321
Projekt Explorer [1] 3 Statische Investitionsrechnung [8] 318
Projektelementen Namen geben [1] 55 Steuerelement [1] 12
Projekt-Finanzplan [11] 410 Strateg. Projekt-Controlling [10] 365
Projektplanung agile [11] 416 Strateg. Prozess-Controlling [8] 263
Projekt-Strukturplan [10] 377 Suchen in Range-Objekten [1] 35
Projekt-Tracking [11] 406 Suchfunktionen [3] 117
Prozeduren [1] 17 SUMME-Funktion [3] 113
Prozesskostenrechnung [8] 286 Summenfunktionen [3] 112
Prozessreife-Bestimmung [8] 263 SUMMEWENN-Funktion [3] 113
Prozess-Reporting [8] 284 SUMMEWENNS-Funktion [3] 114
Pseudozufallszahlen [5] 223 SVERWEIS-Funktion [3] 118
Public [1] 27 SWOT-Analyse [8] 269
Symbolleiste für Schnellzugriff [1] 57
Index 447

T WOCHENTAG-Funktion [10] 395


TAG-Funktion [3] 127 Workbook-Objekte [1] 30
Teilergebnisse [4] 163 Worksheet-Objekte [1] 30
Terminplanung [10] 401 WVERWEIS-Funktion [3] 119
Tilgungsrechnung [8] 311
Z
Treemap-Diagramm [4] 190
ZÄHLENWENN-Funktion [3] 134
Trendanalyse [2] 82
ZÄHLENWENNS-Funktion [3] 135
Trendanalysen [11] 422
Zählfunktionen [3] 132
U Zählschleife [1] 25
Überwachungsfenster [1] 5 ZEILE-Funktion [3] 136
UND-Funktion [3] 105 Zeilen [1] 32
Unterjährige Verzinsung [8] 311 Zeitlicher Fortschrittsgrad [11] 436
Zellen [1] 32
V Zellbereiche [1] 32
Variable [1] 18 Zielarten [2] 99
VBA [1] 1 Zielbestimmung im Controlling [2] 76
VBA-Editor [1] 2 Ziele definieren [2] 98
VBAProject [1] 3 Zielgewichtung [2] 91
VDB-Funktion [3] 152 Zielwertsuche [5] 208
Vererbung [1] 48 Zinseszinsrechnung [8] 310
VERGLEICH-Funktion [3] 120 ZINS-Funktion [3] 142
Vergleichsrechnung [8] 316 Zinsrechnung [8] 308
Verteilungen [9] 332 ZINSZ-Funktion [3] 143
Verweise [4] 196 Zweidim. Leistungsmessung [9] 338
VERWEIS-Funktion [3] 117 ZW-Funktion [3] 141
Visual Basic for Application [1] 1 Zyklische Jobs [1] 68
VMI-Matrix [8] 266 ZZR-Funktion [3] 144
Vorschüssige Verzinsung [8] 309
Vorwärtsrechnung Netzplan [10] 384

W
Wartezeiten in Prozeduren [1] 67
WENN-Funktion [3] 103
Wertschöpfungskette [2] 87
Wertzuweisung [1] 33
Wettbewerbsanalse [8] 272

Das könnte Ihnen auch gefallen