Andreas Unkelbach
Logo Andreas Unkelbach Blog

Andreas Unkelbach Blog

ISSN 2701-6242

Artikel über Controlling und Berichtswesen mit SAP, insbesondere im Bereich des Hochschulcontrolling, aber auch zu anderen oft it-nahen Themen.


Werbung
Wissenschaft und VG Wort


Samstag, 15. Februar 2014
09:40 Uhr

Office Integration - Excelansicht in SAP und Daten kopieren nach Excel

Beim Export von Daten aus SAP (oder auch einen anderen ERP System) kann es hin und wieder Anpassungsbedarf geben, da die Daten in einen Format zur Verfügung gestellt werden, dass nicht ohne weiteres weiter verarbeitet werden kann.

Einige dieser Probleme (und deren Lösung) möchte ich anhand von typischen exportierten Berichten erläutern. Was die Erstellung von Berichten innerhalb SAP anbelangt sind einige Artikel in der Rubrik SAP zu finden. Unter anderen dürfte der Artikel "Unterschiedliche Auswertungsmöglichkeiten im Controlling / Finanzbuchhaltung bzw. Rechnungswesen (Report Writer, Recherchebericht, SAP Query) und natürlich Excel ;-)" einen guten Überblick bieten.

Ferner ist im Artikel "Grundlagen - Berichte von SAP nach Excel exportieren" der Weg von SAP nach Excel für Report Writer/Painter Berichte, Rechercheberichte und auch ALV Listen (bspw. für SAP Query) erläutert.





Fehlerhafte Farben beim Kopieren


Werden bei aktivierter Office-Integration Daten aus der in SAP dargestellten Excelmappe in eine andere Excelmappe kopiert werden hier die Hintergrundfarben der Datenzellen abweichend von der Ansicht in SAP dargestellt.


© SAP SE. Alle Rechte vorbehalten

Im Beispiel werden die blau hinterlegten Datenzeilen bei der Kopie in Lila (Schlüsselspalte) und Rot (Daten) anstatt in den Blautönen dargestellt. Die Summenzeilen werden nicht in Gelb sondern Grün dargestellt und die Berichtsinformationen sind in schwarzer Schrift auf schwarzen Hintergrund gehalten.

Ursache hierfür ist, dass in der generierten Excel-Mappe der Office-Integration die Farbpalette von Excel an die Farben des SAP GUI angepasst werden.

Dieses hat den Nachteil, dass beim Kopieren in eine "normale" Excelmappe diese Farbinformationen nicht mehr stimmen.

Um nun dennoch diese Daten ordentlich weiter bearbeiten zu können gibt es zwei Möglichkeiten:

1. Daten als Text über Inhalte einfügen kopieren

Excel bietet über die rechte Maustaste die Option Inhalte einfügen:

Inhalte einfügen

Sind aus der integrierten Excelmappe die Daten kopiert können diese hier als Text eingefügt werden. Hierzu ist die Option Einfügen Werte zu wählen.

Hierdurch werden die Daten als reiner Text in die neue Excelmappe eingefügt.

2. Als OpenDocument-Spreadsheet (*.ods) speichern

Eine zweite Möglichkeit, unter Beibehaltung der Formatierung, ist es die Daten über die Speichernfunktion in ein Format zu speichern in dem die Anpassung der Farbpalette nicht mitgespeichert wird.

Hierzu wird die Funktion
  • Speichern unter
  • Andere Formate
aufgerufen. Hier kann dann nicht nur ein Dateiname sondern beim Dateityp auch "OpenDocument-Spreadsheet (*.ods)" gewählt werden.

Die so gespeicherte *.ods Datei kann wiederum in Excel geöffnet werden und von dort als "normale" Exceldatei gespeichert werden, ohne dass hier die Farbpalette angepasst ist.

Diese Methode hat gleichzeitig den Vorteil, dass die Standardfarben (blau/gelb etc.) von SAP auch in der Tabelle erhalten bleibt. Sofern die ODS Datei dann in Excel geöffnet wird kann diese wieder als XLS gespeichert werden, so dass hier die zugewiesenen Farben von SAP erhalten bleiben, ohne dass künftig Probleme beim Kopieren der Werte entstehen.





 

Zahlen als Text in Zahlen umwandeln


Ein weiteres Problem können Zahlen (bspw. aus Stammdatenlisten) sein, die als Text formatiert sind. Auch wenn die Zahl als Zahl formatiert wurde (über die rechte Maustaste und "Zellen formatieren" oder die Symbolleiste Start in der Gruppe Zahl) weist Excel dennoch auf den Fehler hin, dass es sich hier um eine Zahl handelt, die als Text formatiert ist. Nun kann entweder aus den Kontextmenü der Hinweismeldung die "Textzahl" in eine richtige Zahl verwandelt werden:

Fehlermeldung Die Zahl ist als Text formatiert

Alternativ bieten sich auch hier zwei andere Alternativen an:

1. Multiplikation mit 1

Die Textzahlen können durch Multiplikation mit 1 in eine echte Zahl umgewandelt werden.

Hierzu ist in eine andere Zelle eine 1 einzutragen (und zu kopieren). Nun können die Textzahlen markiert werden und über "Inhalte einfügen" die Funktion "Multiplizieren" gewählt werden. Hierdurch werden die Textzahlen mit der 1 aus der Zwischenablage multipliziert und damit auch in eine Zahl umgewandelt.

Dadurch sind diese auch als Zahl markiert und können bspw. per SVERWEIS in einer anderen Tabelle verwendet werden.

2. Makro

Sofern häufiger Daten kopiert werden und diese in Zahlen umgewandelt werden müssen bietet es sich an, hierfür ein entsprechendes Makro zu verwenden.

Dieses sollte wie im Artikel Excel Umgang mit Makros und Visual Basic for Applications (VBA) in die Persönliche Makroarbeitsmappe gespeichert werden, so dass diese innerhalb aller Excelmappen zur Verfügung steht.

Folgender Makrocode kann hierbei helfen:

Sub SAP_Markierung_Text_in_Zahl()
'
' SAP_Markierung_Text_in_Zahl Makro
' Wandelt aus Markierung als Text formatierte Zahlen in Zahl um
'

'
For Each Wert In Selection
Selection.NumberFormat = "0"
Wert.Value = Wert.Value
Next Wert
End Sub

Hier können die "Textzahlen" markiert werden und durch Aufruf des Makros werden die Textzahlen als Zahlen ohne Dezimalstellen formatiert, was sich gerade für Stammdatenlisten (Innenaufträge oder Kostenstellen) anbietet. Das Makro formatiert die Werte als Nummern und weist den Wert erneut den Wert zu, womit der Wert erneut eingetragen wird.

3. Nutzen der Funktion "Text in Spalten"
Eine weitere Alternative wurde mir per Kommentar empfohlen. Hierzu können die fraglichen Zahlen markiert werden und die Funktion "Text in Spalten"  (zu finden innerhalb des Ribbon "Daten" in der Befehlsgruppe "Datentools" ) starten. Eigentlich ist diese Funktion dafür gedacht den Inhalt einer Zelle auf mehrere Zellen aufzuteilen um beispielsweise die Angabe von Kostenstelle und Kostenstellenbezeichnung über Trennzeichen oder feste Breite direkt aufzuteilen. Sofern hier direkt auf "Fertig stellen" geklickt wird, sollen ebenfalls die Daten in Zahlen umgewandelt werden.



Negativzeichen hinter Zahlenwert


Negative Werte werden in SAP beim Export nach Excel als Text formatiert und das Negativzeichen rechts vom Wert dargestellt.

Um nun mit diesen Zahlen (Beispielsweise 19,78-) zu rechnen ist es erforderlich das Negativzeichen vor der Zahl zu setzen.

Auch hier bieten sich zwei Möglichkeiten an:

1. Auslesen der Zahl ohne nachgestelltes - und Multiplikation mit -1

Hierzu kann die Zahl ohne nachgestelltes Negativzeichen genommen werden und mit -1 multipliziert werden. Dieses ist dann in einer Extraspalte erforderlich.

Befindet sich der Wert 19,78- in der Zelle A2 könnte die Formel wie folgt lauten

=LINKS(A2;LÄNGE(A2)-1)*-1


Dieses hat jedoch den Nachteil, dass hier auch positive Zahlen entsprechend verrechnet werden.

Optimiert wäre dieses in Kombination mit einer Wenn Funktion wie zum Beispiel

=WENN(UND(RECHTS(A2;1)="-";ISTZAHL(LINKS(A2;LÄNGE(A2)-1)*1));LINKS(A2;LÄNGE(A2)-1)*-1;A2)


Nun wird nur mit -1 multipliziert, wenn das rechte Zeichen tatsächlich ein "-" ist, sofern es sich dabei um eine Zahl handelt.

Dieses ist verständlicherweise auch ziemlich aufwändig.

2. Makrolösung

Auch hier bietet sich ein Makro an, welches aus den ausgewählten Werten wiederum

Sub SAP_Export_Buchhaltung()
'
' SAP_Export_Buchhaltung Makro
' Wandelt Markierte Werte aus SAP in Buchhaltungszahlen um Minuszeichen wird vorran gestellt
'

'
AnzahlWerte = Cells(Rows.Count, Selection.Column).End(xlUp).Row
For Each Wert In Selection
If Wert.Row > AnzahlWerte Then Exit For
If Right(Wert.Value, 1) = "-" And IsNumeric(Wert) _
Then Wert.Value = Left(Wert, Len(Wert) - 1) * (-1)
Next
Selection.Style = "Comma"
End Sub

 

 

Dieses Makro wandelt die markierten Werte mit vor ran gestellten Negativzeichen um und wird nur auf Werte angewendet wenn es sich um Zahlen handelt, so dass bspw. "Text-" bestehen bleibt. Ferner werden alle Werte im Format Buchhaltung mit Tausenderkennzeichen und ohne Währungszeichen formatiert.
Neben dieser Lösung in Excel besteht aber, zumindest für Berichte im Controlling auch die Möglichkeit, dass Standardlayout in SAP so umzustellen, dass auch hier schon die Daten mit vorrangestellten Vorzeichen ausgegeben werden. Dieses ist im Artikel "Darstellung negatives Vorzeichen in SAP - Standardlayout anpassen für vorrangestelltes Vorzeichen" näher erläutert.




Zeilen oder Spalten einfügen


Um die Liste von nützlichen Makros zu erweitern bieten sich auch noch zwei weitere Makros an, die eine bestimmte Zahl an Zeilen oder Spalten in die Excelmappe einfügen. Dieses kann ggf. schneller sein, als einen Bereich an Zeilen zu markieren und per rechter Maustaste die Funktion "Zeile einfügen" aufzurufen.

Makro zum Einfügen von Zeilen:

Sub Excel_Zeilen_einfügen()
anzahlzeilen = InputBox("Anzahl einzufügender Zeilen")
For i = 1 To anzahlzeilen
Selection.Insert Shift:=xlDown
Next i
End Sub

Makro zum Einfügen von Spalten:

Sub Excel_Spalten_einfügen()
anzahlspalten = InputBox("Anzahl einzufügender Spalten")
For i = 1 To anzahlspalten
Selection.Insert Shift:=xlToRight
Next i
End Sub

Insgesamt erleichtern solche Makros definitv die tägliche Arbeit. Ergänzend würde ich auch noch gerade für größere Tabellen, das im Artikel Inhaltsverzeichnis in Excel über vorhandene Tabellenblätter in die persönliche Makroarbeitsmappe übernehmen.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Werbung

Microsoft Office 365 Abo verlängern

Microsoft Office 365 Home

Microsoft Office 365 Business Premium

Microsoft Office Produkte - Jahreslizenz und Dauerlizenzen

* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.

Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Sonntag, 12. Januar 2014
11:25 Uhr

Urlaubsplaner und dynamischer Kalender mit Monatsansicht (Urlaubsplaner 2020/2021/2022 in Excel)

Ausgangslage
Für eine Urlaubsplanung soll für das laufende Kalenderjahr eine Excelliste erstellt werden in der für jeden Monat ein Tabellenblatt mit allen Beschäftigten und die jeweiligen Wochentage innerhalb des Monats aufgelistet werden, so dass hier die entsprechende Urlaubsplanung erfolgen kann.

Dabei sollen die Wochentage (Montag bis Sonntag) ausgegeben werden und sowohl Wochenende (Samstag und Sonntag) als auch Feiertage farblich hervorgehoben werden.

Als Vorlage dient hier das Tabellenblatt "Monat" wobei in der Zelle A8 der Januar für das Jahr 2014 ausgewählt ist:
Tabellenblatt Monat - Monatsblattansicht Januar 2014

Im Beispiel ist der Neujahrestag (1. Januar) als Feiertag grau hinterlegt und das Wochenende vom 25. bis 26. Januar 2014 ebenfalls mit blau hinterlegt.

Ferner hat der Monat Januar 31 Tage.

Da die Tabelle händisch sehr aufwändig zu erstellen ist, sollen für alle Monate nach Eingabe eines Kalenderjahres die einzelnen Wochentage ermittelt werden und auch nur die Tage ausgegeben werden, die im Monat auch vorhanden sind. Insbesondere gilt dieses natürlich für Februar, wo sowohl 28 als auch 29 Tage möglich sind.

Ziel ist es, die Liste der Beschäftigten im Tabellenblatt "Monat" zu aktualisieren und im Tabellenblatt "Einstellungen" das Jahr einzutragen um über ein Makro die Monate Januar bis Dezember des Jahres zu erstellen.

Tabellenblatt Einstellungen zur Wahl des Kalenderjahres

Wie im Beitrag "Excel Umgang mit Makros und Visual Basic for Applications (VBA)" beschrieben wird über die Schaltfläche "Kalenderblätter anlegen" das Blatt Monat 12 mal kopiert und mit entsprechender Monatsauswahl in den jeweiligen Monat unbenannt.

Bis es soweit ist, bedarf es aber einiger Schritte.

Nachtrag: Excel-Datei als Beispielvorlage


Nach Erläuterung der einzelnen Schritte wird zum Abschluss die Umsetzung als Exceldatei zur Verfolgung gestellt. Zum besseren Verständnis ist es aber sicherlich sinnvoll auch die einzelnen Schritte bis zur Fertigstellung nachzuvollziehen, da dadurch auch Anpassungen an die eigenen Bedrüfnisse wesentlich leichter werden.


Lösung

Zur Umsetzung eines Kalenders werden in diesen Beispiel einige Hilfstabellen verwendet, die dann entsprechende Informationen zum jeweiligen Monat enthalten. Da der Urlaubsplaner innerhalb Hessen verwendet werden soll, sind hier zum Beispiel die hessischen Feiertage (damit sind nicht lokale Feiertage wie der Wäldchestag gemeint) eingeplant.

1. Hilfstabelle: Wieviele Tage hat ein Monat


Jeder Monat im Jahr hat 28 Tage. Als Besonderheit hat der Februar entweder 28 Tage (normales Jahr) oder 29 Tage (im Schaltjahr).

Entsprechend wurde eine Tabelle mit allen Monaten angelegt und sowohl der Monat als Zahl als auch die Anzahl des Tages für den Monat festgelegt.

Das Tabellenblatt "Monate" sieht dabei wie folgt aus:

Tabellenblatt Monate zur Ermittlung Anzahl Tage im Monat

Dieses Tabellenblatt ist als Hilfstabelle ausgeblendet und bedarf auch keiner weiteren Anpassungen.

Die Zellen A2 bis A13 haben hierbei den Namen "Monat" zugewiesen bekommen um diesen als Auswahlfeld für die einzelnen Monatsblätter nutzen zu können.
 
  • Die Definition von Namensräumen durch Verwendung des Namensmanager sowie die Anlage von Dropdownliste in Excel ist im Artikel "Formulare gestalten in Excel" beschrieben.


Daneben sind die Zellen A2 bis C13 als "Tage_Monat" definiert. Durch die Namenszuweisung muss nun nicht mehr auf das Tabellenblatt Monate verwiesen werden sondern auf die zugewiesenen Namen.

Die Monate Januar sowie März bis Dezember haben stets die gleichen Anzahl an Tagen (entweder 30 oder 31) nur der Monat Februar hat entweder 28 oder 29 Tage, je nachdem ob es sich um ein Schaltjahr oder um ein normales Jahr handelt.

Zur Berechnung des Schaltjahres wurde abhängig vom Geschäftsjahr folgende Formel verwendet:

=WENN((REST(Geschäftsjahr;4)=0)-(REST(Geschäftsjahr;100)=0)+(REST(Geschäftsjahr;400)=0)=0;28;29)

Ein Schaltjahr tritt dann auf, wenn ein Jahr durch 4, aber nicht auch durch 100 ohne Rest teilbar ist, mit der Ausnahme, dass ein durch 400 ohne Rest teilbares Jahr wiederum ein Schaltjahr ist (z. B. das Jahr 2000).

Zur Erklärung der Formel
Rest(Geschäftsjahr;4=0) liefert FALSCH aus, sofern das Jahr durch 4 mit Rest teilbar ist, ansonsten WAHR. Ähnlich verhält es sich mit den anderen Bestandteilen dieser Formel.

2. Hilfstabelle: Feiertage


Eine der wichtigsten Punkte ist die Behandlung von Feiertagen. Da bestimmte Feiertage auf unterschiedliche Termine im Jahr fallen gibt es unterschiedliche Berechnungsformen. Bezugsdaten sind dabei Ostersonntag und Weihnachten beziehungsweise der 4. Advent.

Zur Berechnung der Osterformel wurde ein mathematisches Verfahren entwickelt. Die Gaußsche Osterformel von Carl Friedrich Gauß erlaubt die Berechnung des Osterdatums für ein gegebenes Jahr.
 


Da nicht alle Feiertage in allen Bundesländern gültig sind bedarf es auch der Information, ob ein Feiertag entsprechende Gültigkeit hat.
  • Die gesetzliche Grundlage für Feiertage in Hessen ist zum Beispiel das Hessisches Feiertagsgesetz (HFeiertagsG) hier sind die gesetzlichen Feiertage im § 1 Gesetzliche Feiertage HfeiertagsG geregelt.

Hierzu wurde das Tabellenblatt "Feiertage" angelegt, welches ebenfalls als Hilfstabelle ausgeblendet ist. Hier kann es jedoch sinnvoll sein, diese Tabelle eingeblendet zu behalten, um etwaige Feiertage ergänzen zu können.

Tabellenblatt Feiertage

Dabei haben die Zellen A2 bis C25 den Namen "Feiertage_Hessen" zugewiesen, so dass dieses Array später verwendet werden kann.

Zur leichteren Berechnung, beziehungsweise besserer Lesbarkeit der Formeln, wurde der Zelle A8 der Name "VierteAdvent", der Zelle A10 der Name "Weihnachten" und der Zelle A16 der Name "Ostersonntag" zugewiesen.

Somit kann in den einzelnen Formeln Bezug auf das jeweilige Datum genommen werden. In der Spalte C ist für eine spätere Hervorhebung des Feiertages für gesetzlich gültige Feiertage eine 2 einzutragen, so dass diese später gesondert behandelt werden. Im Beispiel sind die für Hessen relevante Feiertage markiert.

Hierbei haben die einzelnen Formeln folgenden Aufbau:
Zelle Datumsformel Feiertag
A2 =VierteAdvent-35 Volkstrauertag
A3 =VierteAdvent-32 Buss- u. Bettag
A4 =VierteAdvent-28 Totensonntag/Ewigkeitssonntag
A5 =VierteAdvent-21 1. Advent
A6 =VierteAdvent-14 2. Advent
A7 =VierteAdvent-7 3. Advent
A8 =Weihnachten-WOCHENTAG(Weihnachten;2) 4. Advent „VierteAdvent“
A9 =DATUM(Geschäftsjahr;12;24) Heiligabend
A10 =DATUM(Geschäftsjahr;12;25) 1. Weihnachtstag „Weihnachten“
A11 =DATUM(Geschäftsjahr;12;26) 2. Weihnachtstag
A12 =DATUM(Geschäftsjahr;12;31) Silvester
A13 =Ostersonntag-52 Altweiber
A14 =Ostersonntag-48 Rosenmontag
A15 =Ostersonntag-2 Karfreitag
A16 =7*RUNDEN((4&-Geschäftsjahr)/7+REST(19*REST(Geschäftsjahr;19)-7;30)*0,14;)-6 Ostersonntag „Ostersonntag“
A17 =Ostersonntag+1 Ostermontag
A18 =Ostersonntag+39 Himmelfahrt
A19 =Ostersonntag+49 Pfingstsonntag
A20 =Ostersonntag+50 Pfingstmontag
A21 =Ostersonntag+60 Fronleichnam
A22 =DATUM(Geschäftsjahr;5;1) Tag der Arbeit
A23 =DATUM(Geschäftsjahr;10;3) Tag der deutschen Einheit
A24 =DATUM(Geschäftsjahr;12;6) Nikolaus
A25 =DATUM(Geschäftsjahr;1;1) Neujahrstag
Basis ist dabei das im Blatt "Einstellungen" zugewiesene Geschäftsjahr.

Im Wesentlichen werden bei Feiertagen die Funktionen DATUM und WOCHENTAG genutzt. Gerade beim 4. Advent wird dieses deutlich, ist dieses doch der Sonntag vor Weihnachten.

Die Formel DATUM setzt aus den Daten Jahr, Monat, Tag ein entsprechendes Datum zusammen.

So kann der 13. Juli 1978 als =DATUM(1978,07,13) ausgegeben werden. Dieses ist als Formel später noch wichtig, um das Monatsblatt zu gestalten.

Die Formel WOCHENTAG ermittelt um welchen Tag in der Woche es sich bei einen Datum handelt.

Neben einen Bezug auf das Datum kann auch ein Typ der Woche mit angegeben werden. Standardmäßig beginnt bei Excel die Woche mit Sonntag. Um nun die Wochentage ab Montag zu zählen kann in der Formel der Montag als erster Wochentag mit angegeben werden.

Ein Teil der Formel in der Zelle A8 liefert durch WOCHENTAG(Weihnachten;2) auf den wievielten Tag in der Woche ab Montag Weihnachten fällt. Um nun den Sonntag vor Weihnachten zu ermitteln wird diese Anzahl von Tagen von Weihnachten abgezogen.

Fällt nun der 1. Weihnachtsfeiertag auf Freitag, dieses ist am 25.12.2015 der Fall, so liefert die Formel den 5. Wochentag so dass der vierte Advent fünf Tage vor den 25.12.2015 liegt und damit am 20.12.2015.

3. Aufbau des Monatblattes


Zur Darstellung der einzelnen Monate werden wiederum einige Hilfszeilen verwendet, die sowohl das Datum, als auch etwaige weitere Informationen zum Monat (Anzahl der Tage, Wochentag, Feiertag, gesetzlich relevanter Feiertag) verwenden und dadurch das Aussehen eines jeden Monats gestalten.

Zur besseren Lesbarkeit wurden hier einzelne Hilfszeilen verwendet, obgleich die farbliche Hervorhebung des Wochenendes oder Feiertages über die bedingte Formatierung auch direkt als Formel funktionieren würde.

Der erste Tag eines Monats beinhaltet folgende Hilfszeilen:

Formeln am 1. Tag eines Monats

Ab den 28. Tag eines Monats wird es dann relevant, wie viele Tage ein Monat hat (unter Berücksichtigung eines Schaltjahres).

Formeln am 29. Tag eines Monats

Sofern ab Spalte B der Monat mit 1. beginnt wären die Tage 29 bis 31 dann in den Spalten AD bis AF zu finden.
 
Zelle Inhalt Formel
A1 Jahr =Geschäftsjahr
A8 Monat Liste mit =Monat - Definitionen von Listen ist im Artikel "Formulare gestalten in Excel" beschrieben
B2 Tage im Monat =SVERWEIS(A8;Tage_Monat;2;FALSCH)
B14 Tag Für die Tage 1 bis 28 ein fester Wert (Beispiel 1)
B3 Datum =WENN(B14>0;DATUM(Geschäftsjahr;WENN(ISTNV(SVERWEIS($A$8;Tage_Monat;3;FALSCH));0;SVERWEIS($A$8;Tage_Monat;3;FALSCH));B14);““)
B4 Feiertag =WENN(ISTNV(SVERWEIS(B3;Feiertage_Hessen;3;FALSCH));0;SVERWEIS(B3;Feiertage_Hessen;3;FALSCH))
B5 Bezeichnung Feiertag =WENN(ISTNV(SVERWEIS(B3;Feiertage_Hessen;2;FALSCH));““;SVERWEIS(B3;Feiertage_Hessen;2;FALSCH))
B6 Wochenende =WENN(B3=““;0;WENN(WOCHENTAG(B3;2)>5;1;0))
B7 Hilfstabelle =B4+B6
B9 Bezeichnung =WENN(B3=““;““;WENN(B5=““;TEXT(B3;“TTTT“);B5))
AD3 Datum =WENN(B2>28;WENN(AD14>0;DATUM(Geschäftsjahr;WENN(ISTNV(SVERWEIS($A$8;Tage_Monat;3;FALSCH));0;SVERWEIS($A$8;Tage_Monat;3;FALSCH));AD14);““);““)
AD9 Bezeichnung =WENN(AD3=““;““;WENN(AD5=““;TEXT(AD3;“TTTT“);AD5))
AD14 Tag =WENN(B2>28;29;““)
AE3 Datum =WENN(B2>29;WENN(AE14>0;DATUM(Geschäftsjahr;WENN(ISTNV(SVERWEIS($A$8;Tage_Monat;3;FALSCH));0;SVERWEIS($A$8;Tage_Monat;3;FALSCH));AE14);““);““)
AE9 Bezeichnung =WENN(AE3=““;““;WENN(AE5=““;TEXT(AE3;“TTTT“);AE5))
AE14 Tag =WENN(B2>29;30;““)
AF3 Datum =WENN(B2>30;WENN(AF14>0;DATUM(Geschäftsjahr;WENN(ISTNV(SVERWEIS($A$8;Tage_Monat;3;FALSCH));0;SVERWEIS($A$8;Tage_Monat;3;FALSCH));AF14);““);““)
AF9 Bezeichnung =WENN(AF3=““;““;WENN(AF5=““;TEXT(AF3;“TTTT“);AF5))
AF14 Tag =WENN(B2>30;31;““)
In den einzelnen Formeln wird wiederum Bezug auf die ausgeblendeten Hilfstabellen genommen.

Zur Erklärung noch eine kurze Erläuterung zu den einzelnen Formeln anhand der Bezeichnung.

Jahr
Hier wird Bezug auf das Jahr, welches im Tabellenblatt "Einstellungen" festgelegt wurde genommen. Die entsprechende Zelle hat auch die Bezeichnung Geschäftsjahr

Monat
In der Zelle A8 kann der jeweilige Monat aus einer Liste unter Bezug auf den Namen Monat ausgewählt werden. Innerhalb des Tabellenblatt "Monat" kann hier jeder Monat ausgewählt werden, bei der Anlage der einzelnen Monate wird später der entsprechende Monat vorausgewählt, so dass hier im Januar der Monat Januar ausgewählt ist usw.. Wie erwähnt ist die Definition von Dropdownliste in Excel im Artikel "Formulare gestalten in Excel" beschrieben.

Tage im Monat
In der Zelle B2 wird über die Formel SVERWEIS die Anzahl der Tage im entsprechend gewählten Monat ausgegeben. Dieses kann von 28 bis 31 jeder Wert sein (Januar hat 31 Tage, Februar 28 oder 29, März 31 Tage, April 30 Tage und so weiter).

Tag
Abhängig vom Wert in der Spalte B2 werden hier entweder ein fester Wert (für die Tage 1 bis 28) oder je nach Wert in der Zelle B2 in den Zellen AD14, AE14 und AF14 die Werte 29 bis 31 ausgegeben. Wenn der Monat nicht ausreichend Tage hat, wird hier "" ausgegeben.

Datum
In der Zeile Datum werden abhängig von der Zeile 14 (entspricht Tag) das Datum aus Geschäftsjahr, Monat und Tag ausgegeben. Aus der Tabelle Monate wird zum Text des Monats der Monat als Zahl ermittelt. So ist dieses bei Januar 1 und bei Dezember 12. Um etwaige Fehler zu vermeiden wurde die Formel noch mit ISTNV erweitert. Sofern die Hilfstabellen korrekt sind, kann dieser Part auch ausgespart werden.

Die Verwendung von ISTNV im SVERWEIS ist im Artikel "SVERWEIS ohne NV und dynamische Größen für Datenbereiche " beschrieben.

Wenn die Zeile Tag keinen Wert hat wird hier ebenfalls "" ausgegeben.

Feiertag
In der Zeile 3 wird als Feiertag die dritte Spalte aus Feiertage_Hessen ausgegeben, bzw. wenn das Datum nicht als gesetzlicher Feiertag in Hessen relevant ist der Wert 0.

In der Tabelle Feiertage wurde in der dritten Spalte eine 2 eingetragen, sofern der entsprechende Feiertag ein gesetzlicher Feiertag in Hessen ist.

Bezeichnung Feiertag
Handelt es sich beim Datum um einen Feiertag wird in der Zeile 5 die Bezeichnung des Feiertages ausgegeben. Dieses ist unabhängig davon, ob der Tag ein gesetzlicher Feiertag oder nicht ist. Denkbar ist es hier bspw. das Datum des Betriebsausfluges schon Anfang des Jahres festzulegen ;-).

Wochenende
Hier wird anhand des vorhandenen Datums festgestellt um den wievielten Wochentag es sich handelt. Sofern der Wochentag größer als 5 (beginnend mit Montag = 1 und somit nach Freitag = 5) ist wird hier eine 1 ausgegeben. Andernfalls wird hier eine 0 ausgegeben.

Hilfstabelle
In der Zeile 7 werden sowohl die Zeile 4 (gesetzlicher Feiertag = 2 sonst 0) und Wochenende (1 oder 0) addiert.

Hierdurch können Feiertage und Wochenenden voneinnander unterschieden werden.

An einen Wochenende ist der Wert = 1 und an einen Feiertag > 1.

Man könnte auch sagen, dass ein Feiertag mehr Wert als ein Wochenende hat.

Bezeichnung
Hier wird die Bezeichnung des Tages ermittelt. Handelt es sich um einen Feiertag wird der Wert aus der Zeile 5 "Bezeichnung Feiertag" genommen. Ansonsten wird über die Formel TEXT die Bezeichnung des Wochentages ermittelt.

Die Formel hat dabei das Format =TEXT(Wert;Textformat)

Wenn nun das Datum in der Zelle B3 steht kann der Wochentag über die Formel
=TEXT(B3;"TTTT") (ergibt den Wochentag in Langform bspw. Montag) oder über =TEXT(B3;"TTT") (ergibt den Wochentag in Kurzform bspw. Mo) ermittelt werden.

Für das Monatsblatt soll die Tagesbezeichnung in Langform daher TTTT genommen werden. Ferner sind die Zellen über Zelle Formatierung in der Registerkarte Ausrichtung um 90 Grad gedreht dargestellt.

Tagesbezeichnung um 90 Grad gedreht

Besonderheiten
Wie beschrieben wurde die Problematik eines Schaltjahres, bzw. der unterschiedlichen Monatslänge, in den Spalten AD bis AF durch eine Anpassung der Formeln in der Zeile 3 (Datum), 9 (Bezeichnung) und 14 (Tag) angepasst.

Die übrigen Formeln können entsprechend übertragen werden.

4. Bedingte Formatierung


Über die Funktion "Bedingte Formatierung" sind entsprechende Formatregeln für jede Spalte hinterlegt um Wochenende oder Feiertage besonders hervorzuheben bzw. die Tage 29 bis 31 im Bedarfsfall auszublenden (ohne Rahmen und ohne Farbhintergrund) festzulegen.

Bedingte Formatierung f�r Datumsspalte

Im Standardfall sind die einzelnen Spalten wie im rot umrandeten Beispielfall formatiert. Der Hintergrund des Tages und der Tagesbezeichnung ist gelb und die einzelnen Beschäftigten haben ein entsprechende Zelle für den Urlaubstag. Sofern es sich um eine Wochenende handelt (Zeile 7 =1) wird die Spalte blau hervorgehen. Wenn es sich um einen Feiertag handeln würde (Zeile 7 >1) wäre die Hervorhebung grau)

Wenn in der Zeile 3 "Datum" kein Datum angegeben ist werden die Zellen auch ohne Formatierung (weißer Hintergrund, kein Rahmen) ausgegeben.

5. Makro zum Anlegen der einzelnen Kalendermonate


Zwischenergebnis:
Im Kalenderblatt Monat könnte nun jeder Monat einzeln ausgewählt werden und das Blatt Monat entsprechend kopiert werden und als entsprechender Monat umbenannt werden.

Wie im Artikel "Excel Umgang mit Makros und Visual Basic for Applications (VBA)" beschrieben eignet sich hier der Einsatz eines Makros.

Grundlage Tabellenblatt Monat
Das Tabellenblatt Monat stellt dabei die Grundlage für alle Monate dar und enthält die Liste der einzelnen Beschäftigten:

Tabellenblatt Monat mit Besch�ftigtenliste

Hier ist in der Zelle B1 (im Gegensatz zum hier beschriebenen Artikel) der Monat eingetragen.

Im Blatt Einstellungen kann dann das entsprechende Kalenderjahr eingetragen werden und über die Schaltfläche "Kalenderblätter anlegen" ein Makro zum Kopieren und Umbenennen des Tabellenblatt "Monat" gestartet werden.


Tabellenblatt Einstellungen zur Wahl des Kalenderjahres

Das entsprechende Makro "Kalender anlegen" hat dabei folgenden VBA Code:

Sub Kalender_anlegen()

'
' Kalender_anlegen Makro
' Sofern die Beschäftigtenliste vollständig ist, werden die einzelnen Monatsblätter kopiert
'

'
Range("B1").Select
Sheets("Monat").Visible = True
Sheets("Monat").Select
Range("B1").Select
Sheets("Monat").Copy After:=Sheets(5)
Sheets("Monat (2)").Select
Sheets("Monat (2)").Name = "Januar"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Januar"
Sheets("Januar").Select
Sheets("Januar").Copy After:=Sheets(6)
Sheets("Januar (2)").Select
Sheets("Januar (2)").Name = "Februar"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Februar"

Sheets("Februar").Select
Sheets("Februar").Copy After:=Sheets(7)
Sheets("Februar (2)").Select
Sheets("Februar (2)").Name = "März"
Range("B1").Select
ActiveCell.FormulaR1C1 = "März"

Sheets("März").Select
Sheets("März").Copy After:=Sheets(8)
Sheets("März (2)").Select
Sheets("März (2)").Name = "April"
Range("B1").Select
ActiveCell.FormulaR1C1 = "April"

Sheets("April").Select
Sheets("April").Copy After:=Sheets(9)
Sheets("April (2)").Select
Sheets("April (2)").Name = "Mai"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Mai"

Sheets("Mai").Select
Sheets("Mai").Copy After:=Sheets(10)
Sheets("Mai (2)").Select
Sheets("Mai (2)").Name = "Juni"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Juni"


Sheets("Juni").Select
Sheets("Juni").Copy After:=Sheets(11)
Sheets("Juni (2)").Select
Sheets("Juni (2)").Name = "Juli"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Juli"


Sheets("Juli").Select
Sheets("Juli").Copy After:=Sheets(12)
Sheets("Juli (2)").Select
Sheets("Juli (2)").Name = "August"
Range("B1").Select
ActiveCell.FormulaR1C1 = "August"

Sheets("August").Select
Sheets("August").Copy After:=Sheets(13)
Sheets("August (2)").Select
Sheets("August (2)").Name = "September"
Range("B1").Select
ActiveCell.FormulaR1C1 = "September"

Sheets("September").Select
Sheets("September").Copy After:=Sheets(14)
Sheets("September (2)").Select
Sheets("September (2)").Name = "Oktober"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Oktober"

Sheets("Oktober").Select
Sheets("Oktober").Copy After:=Sheets(15)
Sheets("Oktober (2)").Select
Sheets("Oktober (2)").Name = "November"
Range("B1").Select
ActiveCell.FormulaR1C1 = "November"


Sheets("November").Select
Sheets("November").Copy After:=Sheets(16)
Sheets("November (2)").Select
Sheets("November (2)").Name = "Dezember"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Dezember"

Sheets("Monat").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Anleitung").Select
ActiveWindow.SelectedSheets.Visible = False

Sheets("Einstellungen").Select
ActiveWindow.SelectedSheets.Visible = False

End Sub


Hierbei wird das Blatt Monat als Kopiervorlage für die Monate Januar bis Dezember genutzt und zum Abschluss das Tabellenblatt Monat ausgeblendet.


Ferner werden die Tabellenblätter "Monat", "Anleitung" und "Einstellungen" ausgeblendet.

Im Ergebnis ist damit das gesamte Jahr mit einzelnen Monatsblättern angelegt.

Ergebnis Urlaubsplan Jahr

Danach kann die Tabelle entsprechend gespeichert werden. Hier bietet sich dann die Speicherung als XLS (oder XLSX) ohne Makro an.

Da das Tabellenblatt "Monat" einen Blattschutz hat (es sollen nur bestimmte Personen den Urlaub übertragen können), wird dieser ebenfalls mit kopiert.

Somit kann hier die tagesgenaue Planung von Urlaub beginnen. Die Grundtabelle (ohne angelegten Monate) kann auch für die Folgejahre wieder genutzt werden und sollte daher entsprechend zum Beispiel als "Vorlage_Urlaubsplaner mit Makro für Kopie der Monatsblätter.xlsm" gespeichert werden.

6. Urlaubskontingente verwalten


Sofern auch das Urlaubskonto von Beschäftigten mit in Excel verwaltet werden soll bietet sich noch eine Anpassung in der Vorlage Tabellenblatt "Monat" an.

Über die Excelfunktion ZÄHLENWENN kann am Ende eines jeden Monats gezählt werden, wieviel Urlaub genommen worden ist.

Die Funktion ZÄHLENWEN zählt gefüllte Zellen eines Bereiches, wenn diese ein bestimmtes Kriterium entsprechen. Sollen mehrere Kriterien überprüft werden, bietet sich hier die Funktion ZÄHLENWENNS an.

Im Beispiel soll jedoch nur der genommene Jahresurlaub gezählt werden.

Hierzu bekommt die Farblegende für den Jahresurlaub noch den Wert "JU".

Beispiel Z�hlenwenn

In der Zelle AH62 wird durch die Formel =ZÄHLENWENN(B62:AF62;$AH$11) der Urlaub im entsprechenden Monat gezählt.

Soll neben dem Jahresurlaub auch der Sonderurlaub gezählt werden (sprich JU und SU bzw. Zellen AH11 und AH13 wäre die Formel wie folgt anzupassen =ZÄHLENWENNS(B62:AF62;AH11;B62:AF62;AH13) wobei dieses natürlich nicht nur in der Zelle AH62 sondern für jede beschäftigte Person zu ergänzen wäre.

Dieses kann für alle Beschäftigten im Monat erfolgen.

Nach Start des unter 5. beschriebenen Makros zur Anlage der einzelnen Monatsblätter kann nun eine Vorlage für ein Urlaubskonto je Beschäftigten angelegt werden, indem in jeden einzelnen Monat aus der Spalte AH der genommene Urlaub heraus gerechnet wird.


Da noch keine Einzelmonate angelegt worden sind bietet es sich an, ein weiteres Makro anzulegen, dass dann eine Vorlage für die Urlaubsübersicht anlegt.

Hierbei wird für die erste Beschäftigte der Urlaubsplan angelegt, so dass im Folgenden die weiteren Beschäftigten per Autoausfüllen ergänzt werden können.

Dieses ist erforderlich, da nicht ohne Vorhandener Arbeitsblätter eine Formel wie geplanter Urlaub = Januar!AH15+Februar!AH15 ... usw. angelegt werden kann.

Die elegantere Methode dürfte jedoch sein, das Monatsblatt als Vorlage mit der Summe der genommenen Urlaube (über ZÄHLEWENN) zu erstellen und ein Tabellenblatt in einer fertigen Jahresplan zu erstellen. Hier kann dann das Tabellenblatt "Urlaubskonto" von der alten in die neue Exceltabelle kopiert werden (rechte Maustaste auf die Registerkarte und Kopieren in die neue Datei).

Da die Formel auch hier relativ auf die Monate Januar bis Dezember verweist, kann diese dann als Vorlage genommen werden.

7. Nachtrag Vorlage & Copyright

Da ich vermehrt um die fertige Exceldatei angefragt worden bin habe ich die 💾 Datei als Vorlage ebenfalls online gestellt. Es ist sicherlich sinnvoll diese später als Vorlage_Urlaubsplaner.xlsm zu speichern. Nachdem das Makro ausgeführt wurde (und alle Monatsblätter angelegt worden sind) ist es sinnvoll die Datei dann als Urlaubsplaner_Jahr zu speichern. Das Blatt Feiertage ist im Gegensatz zum Blatt Monate nicht ausgeblendet, so dass die Feiertage noch auf das eigene Bundesland angepasst werden können. Die unter 6. erläuterte Variante zur Urlaubskontingenteverwaltung ist dabei allerdings noch nicht umgesetzt kann aber wie unter 6. erläutert entsprechend der lokalen Erfordernisse leicht eingefügt werden.

Die Datei dient ausschliesslich der Darstellung dieses Artikels und darf nicht für eigene Veröffentlichungen verwendet werden. Sofern Sie die Datei persönlich (oder an der Arbeit) verwenden möchten habe ich nichts dagegen. Es sollte jedoch die Urheberangabe (URL zu diesen Artikel) erhalten bleiben. Selbstverständlich kann das Blatt Monat an ihre eigenen Bedürfnisse (Abteilung, Name, Abwesenheiten etc.) angepasst werden.

Eine kurze Rückmeldung, gerne in Form eines Kommentars, würde mich sehr freuen.

Da der Artikel an sich schon sehr umfangreich ist hoffe ich, dass mit der beigefügten Datei die einzelnen Formeln noch klarer werden.

Für weitere Rückfragen stehe ich gerne zur Verfügung. Hierzu ist insbesondere die Kommentarfunktion unterhalb dieses Artikels gedacht. Dieses hat auch den Vorteil, dass andere Personen mit vergleichbaren Fragen ebenfalls von einer Antwort profitieren.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Werbung
Aktuelles von Andreas Unkelbach

unkelbach.link/et.reportpainter/

unkelbach.link/et.migrationscockpit/

Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Sonntag, 29. Dezember 2013
14:45 Uhr

Excel Umgang mit Makros und Visual Basic for Applications (VBA)

Dieser Artikel stellt anhand eines Beispiels eine Einführung in das Thema VBA und Makros (inklusive der persönlichen Makroarbeitsmappe) in Excel dar. Eine Einführung zum Thema Makros und VBA in der Datenbankverwaltung Access ist im Artikel "Dynamisches Importieren von Daten aus Excel nach Access unter Abfrage Speicherpfad per Makro und VBA" beschrieben.

Ausgangslage
In einen Bericht werden einzelne Zeilen ausgegeben, sofern ein Datensatz vorhanden ist, ansonsten bleibt die Zeile in Excel leer. Dieses funktioniert über eine Auswertung die im Artikel SVERWEIS ohne NV und dynamische Größen für Datenbereiche beschrieben wurde.

Hier wird im Tabellenblatt "Endtabelle" eine Vorlage für eine CSV Datei erstellt, die später in ein anderes System eingebunden werden soll.

Das Ergebnis sieht dabei wie folgt aus:
Grundliste mit Leerzeichen

Über die Wenn Funktion werden hier nur Zeilen ausgegeben, wenn entsprechende Daten auch vorhanden sind. Im Beispiel sind daher die Zeilen 5 und 9 ohne Wert bzw. leer.

Bei einer Einspielung in ein anderes System würde der Einspielvorgang bei einer Leerzeile abgebrochen werden. Daher müssten die Leerzeilen aufwändig gelöscht werden.

Hier bietet Excel jedoch die Möglichkeit über Makros diesen Vorgang zu automatisieren.

Makro aufzeichnen

Die Makrofunktion von Excel ist an zwei Stellen versteckt. Zum einen findet sich diese in der Registerkarte Ansicht in der Gruppe Makros:

Symbolleiste Ansicht - Gruppe Makros

als auch in der sogenannten Entwicklerleiste.

Dieses Symbolleiste mit verschiedenen Symbolen zur Entwicklung von Makros und VBA Elementen kann wie folgt aktiviert werden:
  • Excel 2010
    • Registerkarte Datei
    • Optionen
    • Menüband anpassen
    • Unter der Auswahl Menüband anpassen
      Hauptregisterkarten
    • Aktivieren des Hacken bei Entwicklertools
  • Excel 2007
    • Microsoft Office Schaltfläche(Windows Ball linke Ecke)
    • Excel Optionen
    • Häufig verwendet
    • Aktivieren von "Entwicklerregisterkarte in der Multifunktionsleiste anzeigen"
Nun ist neben der Registerkarte Ansicht auch eine Registerkarte "Entwicklertools" vorhanden.
Symbolleiste Entwicklertools

Hier kann nun die Funktion "Makro aufzeichnen" gewählt werden.

Dieses funktioniert am einfachsten tatsächlich innerhalb der Symbolleiste "Entwicklertools" über die Funktion "Makro aufzeichnen".

Makro aufzeichnen

Im erscheinenden Dialog kann eine Makroname und eine Beschreibung des Makros gewählt werden.
 

EXKURS: Persönliche Makroarbeitsmappe

Eine Besonderheit ist noch der Ort an dem das Makro gespeichert werden soll. In der Regel dürfte dieses die vorhandene Arbeitsmappe sein. Daher kann hier die Option "Diese Arbeitsmappe" bestehen bleiben.

Alternativ kann aber auch als Speicherort "Persönliche Arbeitsmappe" gewählt werden.

Die Makros in der persönlichen Arbeitsmappe stehen immer zur Verfügung und sind nicht an einer geöffneten Excelmappe gebunden.

Hierzu muss die Mappe jedoch einmalig eingerichtet werden. Dieses ist am einfachsten möglich indem ein "Dummy-Makro" (ein beliebiges Makro) aufgezeichnet wird und in der persönlichen Arbeitsmappe gespeichert wird.

Darauf werden unter C:\Users\Benutzername\AppData\Roaming\Microsoft\Excel\XLSTART die Datei PERSONAL.XLSB angelegt, welche beim Start von Excel für den entsprechenden Benutzername als ausgeblendete Arbeitsmappe angelegt und kann entweder direkt geöffnet werden oder über die Symbolleiste Ansicht in der Gruppe Fenster über die Funktion Einblenden angezeigt werden.

Ein in meinen Augen sehr sinnvolles Makro für die Persönliche Makroarbeitsmappe ist das Makro Excel Blattschutz aufheben, Inhaltsverzeichnis in Excel über vorhandene Tabellenblätter oder auch die im Artikel Office Integration - Excelansicht in SAP und Daten kopieren nach Excel beschriebene Makros, welche nicht in der Zieldatei gespeichert werden müssen aber sinnvollerweise immer einmal wieder angewendet werden können.
 


Nach der Auswahl der Funktion "Makro aufzeichnen" wird die Schaltfläche mit der Funktion "Aufzeichnung beenden" ausgetauscht.

Dieses gilt sowohl für die Entwicklersymbolleiste:

Aufzeichnung beenden auf Entwicklersymbolleiste

als auch in der allgemeinen Makrofunktion in der Symbolleiste Ansicht

Aufzeichnung beenden auf Ansichtsymbolleiste

Während die Makroaufzeichnung läuft können verschiedene Funktionen ausgewählt werden.

Im Beispiel wird das Tabellenblatt Endtabelle kopiert und die darin befindlichen Daten nach über die Spalte "BUKR" sortiert und als Export.CSV umbenannt.

Danach wird die Aufzeichnung über die Funktion "Aufzeichnung beendet" abgeschlossen.

Über die Schaltfläche Makros kann nun das Makro aufgerufen werden.

Excel - Makros verwalten

Im Beispiel hat das Makro nun die Bezeichnung Export und kann entweder direkt ausgeführt werden oder noch im VBA Editor bearbeitet werden.

VBA - Microsoft Visual Basic for Application Editor

Der entsprechende VBA Code für das Export Makro lautet dabei wie folgt:
 

  • Sub Export()
    ' Dieses weist den Namen Export zu
    Sheets("Endtabelle").Select
    Sheets("Endtabelle").Copy After:=Sheets(4)


    ' Diese Anweisung selektiert das Blatt Endtabelle und kopiert es hinter das 4. Arbeitsblatt

    Sheets("Endtabelle (2)").Select
    Sheets("Endtabelle (2)").Name = "Export.csv"


    ' Nun wird die Kopie in Export.csv umbenannt

    ActiveWorkbook.Worksheets("Export.csv").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Export.csv").Sort.SortFields.Add Key:=Range( _
    "A2:A1840"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
    With ActiveWorkbook.Worksheets("Export.csv").Sort
    .SetRange Range("A1:G1840")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With



    'Nun werden die Zellen A1 bis G1840 nach der Spalte A ab Zeile 2 bis 1840 sortiert

    ' Soweit stammt der Code auch aus der Makroaufzeichnung. Nun wird dieser noch um eine Anweisung ergänzt, dass das Tabellenblatt unter Verwendung des Buchungskreises in der Spalte A umbenannt wird

    ActiveSheet.Name = "Export_" & Range("A2") & ".csv"

    ' Die Bezeichnung wird aus der Zelle A2 des gerade sortierten Tabellenblatt übernommen


    'Durch End Sub kann der Code dann abgeschlossen werden
    End Sub


  •  


Wird nun das Makro aufgerufen, wird direkt ein neues Blatt angefügt, welches von der Bezeichnung her den entsprechenden Buchungskreis mit in der Bezeichnung hat.

Ergebnis für CSV Export

Als Ergebnis kann dann dieses Arbeitsblatt mit dieser Bezeichnung als CSV Datei gespeichert werden und entsprechend weiter verarbeitet werden.

Formularsteuerelemente einfügen

Um die Handhabung der Makros zu verbessern ist es nicht zwingend erforderlich die Makros über die Schaltfläche Makros zu starten sondern es besteht auch die Möglichkeit entsprechende Schaltflächen (oder auch Bilder) mit einen Makro zu verknüpfen.

Hierzu kann wiederum in der Symbolleiste "Entwicklertools" über die Schaltfläche Einfügen in der Gruppe "Steuerelemente" eine Schaltfläche eingefügt werden.

Steuerelement Schaltfläche einfügen

Hier kann nun eine entsprechende Schaltfläche gezeichnet werden und danach ein Makro dieser Schaltfläche zugewiesen werden.

Makro Schaltfläche zuweisen

Danach kann über diese Schaltfläche das entsprechende Makro direkt gestartet werden.

Über die rechte Maustaste kann der Text der Schaltfläche bearbeitet werden.

Text der Schaltfläche bearbeiten

Denkbar ist beispielsweise eine entsprechende Arbeitsanweisung für dieses Makro.

Beispiel Schaltfläche mit Text

Somit ist die Tabelle mittlerweile fertig.

Hinweis: Speichern Excel Arbeitsmappe mit Makros

Mit Einführung von Excel 2007 ist es erforderlich Excel-Arbeitsmappen mit Makros nicht mehr als XLS (beziehungsweise XSLX) zu speichern sondern als XLSM "Excel-Arbeitsmappe mit Makros".

Diese aus Sicherheitsgründen eingeführte Funktion bedarf daher, dass diese Mappe dann auch als XLSM Datei gespeichert wird. Entsprechend ist das Dateisymbol von Makroarbeitsmappen mit einen warnenden Ausrufezeichen versehen.

Dateityp mit Endung XLSM

Die Kombination aus VBA und Makros ist eine tatsächliche Bereicherung von Excel und ermöglicht verschiedene Arbeitsschritte zu automatisieren aber auch Arbeitsmappen um weitere Funktionen zu erweitern.

Ein weiteres schönes Makro ist im Artikel "Urlaubsplaner und dynamischer Kalender mit Monatsansicht" beschrieben.

Darüberhinaus helfen diverse Makros auch beim Zusammenführen von Daten aus SAP nach Excel. Dieses ist im Artikel "Office Integration - Excelansicht in SAP und Daten kopieren nach Excel" beschrieben.

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Werbung
Steuern, Selbstständigkeit und VGWORT als Blogger und Autor
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Freitag, 29. November 2013
17:27 Uhr

SVERWEIS ohne NV und dynamische Größen für Datenbereiche

Im Rahmen eines Rechercheberichtes soll an mehreren Standorten eine vorgegebene Bilanzversion ausgewertet werden und die einzelnen Bilanzpositionen dann in einer einheitlichen Form in Excel dargestellt werden. Im Artikel Rechercheberichte im Modul FI (Bilanzanalyse) wurde schon beschrieben, wie eine Bilanzversion in SAP ausgewertet werden kann.

Der entsprechende Recherchebericht kann dann nach Excel exportiert werden und hier als Datengrundlage verwendet werden.

Jedoch sind hier, bedingt durch die Darstellung der Daten zwei Probleme zu beachten: Beide Probleme werden anhand des beschriebenen Berichtes erläutert.



Ausgangslage
Problematisch ist, dass in einen Recherchebericht nur Merkmale (Bilanzpositionen) ausgegeben werden, die auch gebucht worden sind.

Um hier einen einheitlichen Namen auszugeben besteht die Möglichkeit die Darstellung der einzelnen Bilanzpositionen von der Darstellung des Namens auch auf die Schlüsselbezeichnung umzustellen.

Dieses ist im ausgeführten Recherchebericht unter
  • Einstellungen
  • Merkmalsdarstellung
  • Durch den Punkt "Schlüssel und Bezeichnung"
möglich.

Dieser Recherchebericht kann dann nach Excel exportiert werden:

Hier werden dann die Kopfdaten ausgegeben und die einzelnen Bilanzpositionen untereinander. Hierbei werden dann alle GuV-Knoten mit ausgegeben.


Sieht der Bericht zum Beispiel einen Knoten 921 vor, der aber am entsprechenden Standort nicht gebucht wurde, so werden hier in der Grundtabelle auch keine Werte ausgegeben.

Weitere Beispiele wären:
  • Liste mit Plandaten, die nicht an jeder Kostenstelle auftreten
  • Korrekturwerte für einzelne Bereiche
  • Budgetwerte die noch nicht im System eingebucht worden sind
. Der erste Gedanke wäre sicherlich hier eine Datenbanklösung zu basteln und entsprechende Abfragen miteinander zu verknüpfen.

Sofern sich die Struktur der Daten jedoch nicht weiter ändert und die Einstiegshürde relativ gering gehalten werden soll ist hier auch Excel eine gute Lösung.




Die Funktion SVERWEIS ohne #NV ausgeben


Grundsätzlich ist der Aufbau der Formel SVERWEIS wie folgt:

=SVERWEIS(Suchkriterium;Matrix;Spaltenindex;Bereich Verweis(WAHR ungefähre Übereinstimmung FALSCH genaue Übereinstimmung)


Wird nun in Excel mit der Formel SVERWEIS gearbeitet, so wird hier als Ergebnis #NV ausgegeben, sofern das Suchkriterium nicht innerhalb der Matrix vorhanden ist.

Um dieses zu vermeiden besteht die Möglichkeit über eine Wenn-Dann Funktion die SVERWEIS Ausgabe zu überprüfen. Hier könnte ab Excel 2007 die Funktion WENNFEHLER angewandt werden. Diese gibt nur einen Wert einer Funktion aus, sofern es keine Fehlermeldung gibt.

Beispiel:
=WENNFEHLER(FORMEL;Wert_falls_Fehler)

Sofern auch frühere Excel Versionen genutzt werden, sollte eine Wenn-Dann Funktion in Kombination mit der Formel ISTNV genutzt werden.

Nehmen wir an, dass die technische GuV Position im Beispiel SKR04/400 lautet und die Werte innerhalb einer Matrix der wir den Namensraum Grunddaten gegeben haben liegen, dann würde die Formel:


=WENN(ISTNV(SVERWEIS("*SKR04/400*";Grunddaten;$B$7;FALSCH));0;SVERWEIS("*SKR04/400*";Grunddaten;$B$7;FALSCH))


Wobei hier der auszugebende Wert in der Spalte der Matrix definiert ist, der in der Zelle B7 angegeben ist. Sofern im genutzten Recherchebericht die Ist-Werte in der 2. Spalte (und 2 in der Zelle B7 eingetragen ist) liegen wird entweder der gefundenen Wert in der 2, Spalte der Matrix ausgegeben, oder eine 0 ausgeben.

Allgemein ausgedrückt bieten sich hier also folgende Varianten an:

=WENNFEHLER (SVERWEIS(Kriterium;Matrix;Spaltenindex;falsch))

oder über die Hilfsfunktion ISTNV

=WENN(ISTNV (SVERWEIS(Kriterium;Matrix;Spaltenindex;falsch);""; SVERWEIS(Kriterium;Matrix;Spaltenindex;falsch))





Die Funktion BEREICH.VERSCHIEBEN - Datenbereich dynamisch von der Größe anlegen

Im Beispiel wird die Namensbezeichnung Grunddaten verwendet. Dieses kann sinnvoll sein, wenn bei den eingespielten Grunddaten (im Beispiel eine GuV) nicht klar ist, wie viel Zeilen und Spalten der Datenbereich hat. Je nach genutzten Recherchebericht können hier unterschiedliche Spalten und natürlich auch Zellen vorhanden sein.

Daher kann es hilfreich sein, diesen Bereich über eine dynamische Formel zuzuweisen.

Unter der Annahme, dass der Recherchebericht in das Tabellenblatt Grunddaten kopiert wird, kann über den Namensmanager per Formel ein dynamischer Bereich definiert werden.

Der Namensmanager findet sich unter Excel 2003 war unter Einfügen, Namen, Definieren möglich. Ab Excel 2007 ist diese Funktion innerhalb des Ribbon Formel auf der Schaltfläche Namen definieren zu finden.

Namensmanager bezieht sich auf Bereich verschieben

Hier hat der Name Grunddaten folgende Formel als Wert hinterlegt:

=Bereich.Verschieben($A$1;;;Anzahl2($A:$A);Anzahl2($5:$5))

Durch die Formel Bereich Verschieben wird ab der ZELLE1 der Bezug auf die Höhe als Anzahl der Zeilen in der Spalte A und auf Breite als Anzahl der Spalten in der Zeile 5 gezählt.

Dieses ist erforderlich, da im Beispiel erst ab Zeile 5 die Überschriften des Rechercheberichtes erscheinen und in den Spalten 1 bis 4 noch die Kopfdaten des Rechercheberichtes angegeben werden.

Durch die Formel Anzahl2 wird die Anzahl der "nicht leerer Zellen" eines Bereiches festgelegt. Im Beispiel erfolgt die Zählung ab Zeile 5.

Die Funktion BEREICH.VERSCHIEBEN

Zur Erklärung lautet der eigentliche Syntax der Formel BEREICH.VERSCHIEBEN wie folgt

BEREICH.VERSCHIEBEN(Bezug; Zeilen; Spalten; [Höhe]; [Breite])

Bezug ist hierbei ab welche Position der Bereich verschoben werden soll.

Zeilen wäre um welche Anzahl von Zeilen der Bereich verschoben werden soll, da aber alle Daten erfasst werden sollen, ist dieser im Beispiel durch ;; auf 0 gesetzt.

Spalten wäre um welche Anzahl von Spalten der Bereich verschoben werden soll, da aber alle Daten erfasst werden sollen, ist dieser im Beispiel durch ;; auf 0 gesetzt.

Höhe beschreibt den Bezug in Zeilen des neuen Bereiches (daher wurden hier die Anzahl der nicht leeren Zellen gezählt um den gesamten Bericht als Bezug zu erhalten)

Breite beschreibt den Bezug in Spalten des neuen Bereiches (daher wurden hier die Anzahl der nicht leeren Zellen gezählt um den gesamten Bericht als Bezug zu erhalten)

Sowohl Höhe als auch Breite sind in dieser Formel optional erfüllen jedoch exakt den Zweck, den die Zuweisung des Bereiches für die Grunddaten nützlich macht.


FAZIT
Gerade der dynamische Größenbereich für Datenbereiche ist nicht nur für dieses Beispiel geeignet sondern auch sehr nützlich um den Datenbereich einer Pivot-Tabelle zu definieren.
Hier bietet sich aber oftmals folgende Formelzuweisung als Datengrundlage einer Pivot-Tabelle an:

=Bereich.Verschieben($A$1;;;Anzahl2($A:$A);Anzahl2($1:$1))

Hier werden dann tatsächlich die Anzahl der Zeilen und die Anzahl der Spalten ab der Zelle A1 gezählt. Durch die Möglichkeit diese Formel ebenfalls per Namensmanager einen Namen zuzuweisen kann beim Einfügen einer Pivot-Tabelle über Ribbon Einfügen und hier auf Pivottabelle einfügen der entsprechende Name als Grundlage zugewiesen werden.
Pivottabelle erstellen - Bereich festlegen
Durch die Zuweisung des Bereichs Grunddaten als Datengrundlage wird dieser Bereich auch entsprechend aktualisiert, wenn in der entsprechenden Tabelle weitere Datenzeilen hinzugefügt werden.
 

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Werbung

Steuersoftware für das Steuerjahr 2023

Lexware TAXMAN 2024 (für das Steuerjahr 2023)

WISO steuer:Sparbuch 2024 (für Steuerjahr 2023)

WISO Steuer 2024 (für Steuerjahr 2023)


* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


Dienstag, 9. Juli 2013
22:16 Uhr

Excel: Hyperlinks zu externen Arbeitsmappen identifizieren

Ausgangslage

Beim Aufruf einer Excelmappe kommt es ab Excel 2007/2010 zur Fehlermeldung "Die automatische Aktualisierung von Hyperlinks wurde deaktiviert". Hintergrund ist, dass Excel hier nicht mehr aktiv Werte aktualisiert sondern innerhalb der Excelmappe mit vertrauenswürdigen Quellen arbeitet. Innerhalb der Fehlermeldung besteht auch die Möglichkeit innerhalb der Vertrauenseinstellungen für externen Inhalt eine entsprechende Aktualisierung zuzulassen.

Dieses ist sicherlich sinnvoll bei einzelnen Arbeitsmappen. Sofern in einer Arbeitsmappe jedoch mit unterschiedlichen Quellen gearbeitet wurde und eine finale Version erstellt werden soll in der alle abgestimmten Daten enthalten sind, besteht die Notwendigkeit diese Verweise zu identifizieren und entsprechend zu ändern.


Lösung

Manchmal ist die Lösung für solche Probleme relativ einfach. Ein Verweis auf eine andere Exceltabelle als Quelle wird innerhalb Formel mit eckigen Klammern [] ausgedrückt.

Um nun solche Verweise zu finden, besteht die Möglichkeit in der gesamten Arbeitsmappe nach "[" in Formeln zu suchen. Hierzu sollten die Optionen in der Funktion "Suchen" in folgenden Punkten geändert werden:

Durchsuchen: Arbeitsmappe
Suchen in : Formeln

und nun kann nach [ gesucht werden.

In Excel 2003 ist der Suchdialog unter Bearbeiten->Suchen und in Excel 2007/2010 auf der Registerkarte Start in der Gruppe Bearbeiten durch "Suchen und Auswählen" zu finden.

Alternativ ist dieses auch über die Tastenkombination STRG + F möglich.

Nachtrag:
Es sollte tatsächlich nur nach [ in Formeln gesucht werden und nicht nach =[ da sonst Verknüpfungen nicht gefunden werden.Das = erübrigt sich durch die Option "Suchen in: Formeln".

Hinweis: Aktuelle Buchempfehlungen besonders SAP Fachbücher sind unter Buchempfehlungen inklusive ausführlicher Rezenssionenzu finden. Mein Weiterbildungsangebot zu SAP Themen finden Sie auf unkelbach.expert.
Werbung
SAP S/4HANA Migration Cockpit - Datenmigration mit LTMC und LTMOM (📖)

Für 29,95 € direkt bestellen

Oder bei Amazon ** Oder bei Autorenwelt

Diesen und weitere Texte von Andreas Unkelbach finden Sie auf http://www.andreas-unkelbach.de


<< Frühere Einträge Spätere Einträge >>



* Amazon Partnerlink/Affiliatelinks/Werbelinks
Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
Hinauf






Logo Andreas-Unkelbach.de
Andreas Unkelbach Blog
ISSN 2701-6242

© 2004 - 2025 Andreas Unkelbach
Gießener Straße 75,35396 Gießen,Germany
andreas.unkelbach@posteo.de

UStID-Nr: DE348450326 - Kleinunternehmer im Sinne von § 19 Abs. 1 UStG

Andreas Unkelbach

Stichwortverzeichnis
(Tagcloud)


Aktuelle Infos (Abo)

Linkedin Bluesky

Facebook Mastodon

Amazon Autorenwelt Librarything

Buchempfehlung
Berichtswesen im SAP®-Controlling

19,95 € Amazon* Autorenwelt

Espresso Tutorials

unkelbach.link/et.reportpainter/

unkelbach.link/et.migrationscockpit/

Privates

Kaffeekasse 📖 Wunschliste