Kursdiagramm Volumen-Höchst-Tiefst-Schlusskurs erstellen

Das Thema „Kursdiagramm“ war bereits zweimal Gegenstand eines Blogbeitrages:

Der Beitrag heute erläutert das „Volumen-Höchst-Tiefst-Schlusskurs“-Diagramm.

Weiterlesen „Kursdiagramm Volumen-Höchst-Tiefst-Schlusskurs erstellen“

Advertisements

Excel-Minis 20171128

Excel-Minis sind an dieser Stelle immer Kurzbeiträge, natürlich zum Thema Excel.

Für heute habe ich drei kleine Themen vorbereitet, vielleicht hast du Spaß damit.

Weiterlesen „Excel-Minis 20171128“

Excel-Tabellen in Word-Berichte einbetten

Als Controller kennst du diese Aufgabe bestimmt. In einem monatlichen Managementbericht, den du in MS Word erstellst, ist u.a. die Liquiditätsentwicklung des Unternehmens darzustellen.

Sinnvollerweise führst du die Liquiditätsentwicklung in MS Excel. Die Aufgabe besteht nun darin, die Excel-Tabelle in den Word-Bericht einzuarbeiten und beides zu verknüpfen.

Weiterlesen „Excel-Tabellen in Word-Berichte einbetten“

Zellen in Excel bedingt formatieren, die enthalten

Das sich mit der bedingten Formatierung eine Menge Effekte in einer Excel-Arbeitsmappe erreichen lassen, hast du schon in mehreren Beiträgen sehen können.

Eine weitere Möglichkeit ist Gegenstand dieses Beitrages. Du kannst damit Zellinhalte formatieren, die bestimmte Eigenschaften haben oder bestimmte Werte beinhalten: Nur Zellen formatieren, die enthalten

Weiterlesen „Zellen in Excel bedingt formatieren, die enthalten“

Versuchs doch mal mit INDIREKT

1. Beschreibung der Funktion

Die Excel-Funktion INDIREKT habe ich schon in vielen Beiträgen eingesetzt, sie aber bisher nicht erläutert.

INDIREKT ist im Funktionskatalog von Excel unter der Kategorie „Nachschlagen und Verweisen“ zu finden.

Die Funktion kann nützlich sein, wenn in Dateien mit vielen Arbeitsblättern dynamisch auf bestimmte Zellen oder Zellbereiche in den Blättern zugegriffen werden muss.

Doch Achtung! INDIREKT ist eine volatile Funktion. Peter Haserodt von Online-Excel schrieb einmal dazu [1]:

Indirekt sollte nur sehr sparsam angewendet werden und nicht bei rechenintensiven Formeln. Diese Funktion hat nämlich den großen Nachteil, dass sie volatil ist, d.h. sie wird immer neu berechnet, nach jeder Eingabe. Selbst dann, wenn sie in einer anderen geöffneten Arbeitsmappe steht!

Wichtig zu wissen ist auch, dass mit INDIREKT nur auf geöffnete Dateien zugegriffen werden kann.

Was schreibt die Excel-Hilfe?

Hier heißt es, INDIREKT „Gibt den Bezug eines Textwertes zurück. Bezüge werden sofort ausgewertet, so dass die zu ihnen gehörenden Werte angezeigt werden.“

Die Syntax lautet:

=INDIREKT(Bezug;[A1])

Bezug ist eine erforderliches Argument, möglich ist der Bezug auf eine Zelle, die einen Bezug in der A1-Schreibweise, einen Bezug in der Z1S1-Schreibweise, einen definierten Namen als Bezug oder einen Zellbezug als Zeichenfolge enthält.

Das Argument A1 kann optional eingesetzt werden. Es ist ein Wahrheitswert, der angibt, welcher Art der Bezug in der Zelle ist.

Ist A1 gleich WAHR, liegt die A1-Schreibweise vor.

Ist A1 gleich FALSCH, liegt die Z1S1-Schreibweise vor.

2. Beispiele

Beispiel 1: Wert einer Zelle im gleichen Arbeitsblatt abfragen

Die nachfolgende Tabelle (Arbeitsblatt Tabelle2) zeigt 12 Monate und Umsatzgrößen.

Indirekt1

Mit INDIREKT willst du den Umsatz des Monats, der in Zelle F2 angegeben ist, in Zelle F4 zeigen. Du schreibst in Tabelle2 in F4 die Formel

=INDIREKT(„C“&$F$2+2)

Warum das „+2“? Weil die Monate erst in Zeile 3 beginnen. Der dritte Monat befindet sich in Zeile 5.

Änderst du den Eintrag in F2, ändert sich das Ergebnis in F4 entsprechend.

Beispiel 2: Wert einer Zelle in einem anderen Arbeitsblatt abfragen

Angenommen, die Tabelle steht im Arbeitsblatt „Tabelle2“, das Ergebnis soll im Blatt „Tabelle1“ gezeigt werden.

Dann schreibst du in F4 die Formel:

=INDIREKT(„Tabelle2!C“&Tabelle1!F2+2)

und erhältst den gesuchten Umsatz.

Beispiel 3: Summen von Werten abfragen

In diesem Beispiel suchst du die Summe über mehrere Monate des Jahres, z.B. von März (3) bis Mai (5). Die Tabelle befindet sich wieder in „Tabelle2“, das Ergebnis soll ebenfalls in „Tabelle1“ gezeigt werden.

Indirekt2

Verwende diese Formel in F5:

=SUMME(INDIREKT(„Tabelle2!C“&Tabelle1!F2+2):INDIREKT(„Tabelle2!C“&Tabelle1!F3+2))

Wenn dir die Zelladressen der jeweiligen Monate bekannt sind, kannst du auch so vorgehen:

Indirekt3

Schreibe dazu in F4 die Formel:

=SUMME(INDIREKT($F$2))

Beispiel 4: Wert aus einem namentlichen Bereich abfragen

Für dieses Beispiel benennst du den Bereich B3:B14 mit „Monat“ und den Bereich C3:C14 mit „Umsatz“.

Du willst in Tabelle2 in F5 z.B. den Umsatz des Monats März sehen.

Schreibe:

=INDEX(Umsatz;INDIREKT(„F2“);1)

Die Formel macht allerdings nicht viel Sinn, zeigt aber die Funktionsweise von INDIREKT.

Einfacher wäre es so:

=INDEX(Umsatz;F2;1)

Beispiel 5: Summe von Werten eines namentlichen Bereiches abfragen

Willst du nicht nur den Umsatz eines Monats sehen, sondern z.B. die Summe von Mai bis August, kannst du diese Formel verwenden (in F2 steht eine 5, in F3 steht eine 8).

=SUMME(INDEX(Umsatz;INDIREKT(„F2“);1):INDEX(Umsatz;INDIREKT(„F3“);1))

Beispiel 6: Mit INDIREKT auf einen durch Verkettung erzeugten Bereichsnamen zugreifen

Dir liegen die monatlichen Umsätze aus drei Jahren vor. Du vergibst Namen für die Bereiche:

  • C5:C16 Umsatz2014
  • F5:F16 Umsatz2015
  • I5:I16 Umsatz2016

Indirekt4

Für die Abfrage hast du diese Felder vorbereitet:

Indirekt5

In C19 schreibst du das Jahr, in C21 den Monat deiner Wahl.

C23 enthält die Formel

=“Umsatz“&C19

In C25 schreibst du schließlich die Formel

=INDEX(INDIREKT(C23);C21;1)

In C25 kannst du jetzt den Umsatz für den 6. Monat des Jahres 2014 ablesen.

INDIREKT hast du dazu verwendet, den Namen der Matrix, der in C23 durch Verkettung erzeugt wurde, in die INDEX-Formel einzugeben.

Änderst du den Eintrag in C19 auf 2015, erhältst du den Umsatz für Juni 2015. Das Spiel kann beliebig weiter geführt werden.

Ein ausführliches Beispiel findest du u.a. in meinem Beitrag „Arbeiten mit der rS1-Methode – Namenskonventionen und Beispiel„.

Beispiel 7: Die verschiedenen Schreibweisen

In der A1-Schreibweise suchst du z.B. den Umsatz, der in Zelle C10 steht.

Schreibe in Zelle F2 somit „C10“ hinein.

Indirekt6

Der Umsatz soll in Zelle F4 angezeigt werden. Schreibe dort diese Formel:

=INDIREKT(F2;WAHR)

Das Argument WAHR deutet auf die A1-Schreibweise hin, als „C10“.

Mit der Formel wird nun indirekt auf den Inhalt der Zelle C10 zugegriffen. In C10 wird der Wert 15.464 gefunden.

Mit der Z1S1-Schreibweise werden relative Bezüge hergestellt. Schreibe in F4 diese Formel:

=INDIREKT(„Z10S3“;FALSCH)

FALSCH weist auf die Z1S1-Schreibweise hin. Mit der Formel wird nun auf den Inhalt der Zelle in Zeile (Z) und Spalte (S3) zugegriffen. Dort steht, natürlich, der Wert .

Ebenso könntest du die Zelle F2 statt mit „C.“ jetzt mit „ZS3“ füllen.

Indirekt7

Schreibe in F4 diese Formel:

=INDIREKT(F2;FALSCH)

und du erhältst wieder das Ergebnis 15.464.

[1] http://www.online-excel.de/excel/singsel.php?f=24

VBA-Methoden: Arbeitsblätter zählen, Anzahl festlegen

Wie viele Arbeitsblätter hat eine Arbeitsmappe?

Befindest du dich in einer geöffneten Arbeitsmappe, kannst du das sofort sehen, wenn sich die Anzahl auf ein überschaubares Maß beschränkt.

Geht es aber um 95 oder 134 Arbeitsblätter, müsstest du zählen.

Das aber kannst du auch durch ein kleines Makro erledigen lassen.

Sub ArbBlattZählen1()
Dim intZahl As Integer
intZahl=ActiveWorkbook.Sheets.Count
MsgBox intZahl
End Sub

So sieht die Antwort aus. Bestätige sie mit „OK“.

Nichtnumerisch34

Lässt sich die Anzahl der Arbeitsblätter für eine andere, geöffnete, Mappe ermitteln?

Sub ArbBlattZählen2()
Dim intZahl As Integer
Workbooks(„VBA_Datei öffnen.xlsm“).Activate
intZahl=ActiveWorkbook.Sheets.Count
MsgBox intZahl
End Sub

Hier gibt die MsgBox z.B. die Anzahl „3“ zurück.

Nun fragst du dich, ob du diese Abfrage auch an eine geschlossene Datei richten kannst.

Nachfolgendes Makro verwendet die GetObject-Funktion, die ich hier nicht weiter erläutere. Nur soviel, GetObject wird für den Zugriff auf ein ActiveX-Object verwendet. Mit der Set-Anweisung wird dem Objekt die Objektvariable zugewiesen.

Sub ArbBlattZählen3()
Dim intZahl As Integer
Dim wb As Workbook
Set wb=GetObject(„C:\Excel\VBA\VBA_Arbeitsblätter Anzahl.xlsm“)
intZahl=wb.Sheets.Count
MsgBox intZahl
End Sub

Die MsgBox gibt hier die Anzahl „5“ zurück.

Anzahl Arbeitsblätter festlegen

Eine neue Excel-Arbeitsmappe enthält standardmäßig drei Arbeitsblätter. Dies ist in den Excel-Optionen unter „Allgemein“ so eingestellt.

Wenn du aber eine neue Mappe haben willst, die 12 Arbeitsblätter enthält, kannst du das mit einem Makro erledigen lassen.

Du fragst dazu zuerst die hinterlegte Anzahl der Arbeitsblätter für neue Arbeitsmappen ab.

Dim intBlatt As Integer
intBlatt=Application.SheetsInNewWorkbook

Dann legst du die Anzahl der Blätter für deine neue Mappe fest, in diesem Fall sollen es 12 sein.

Application.SheetsInNewWorkbook=12

Jetzt legst du eine neue Mappe an und gibst ihr einen Namen. Wie das geht, habe ich in meinem Beitrag „VBA-Methoden: Eine Datei neu erstellen und speichern als“ beschrieben:

Workbooks.Add
ActiveWorkbook.SaveAs Filename:=“C:\Excel\VBA\VBA_NeuDatei.xlsx“

Den Ablageort gibst du mit der Pfadangabe gleich mit an.

Du hast jetzt eine neue Arbeitsmappe mit 12 Arbeitsblättern.

Nun solltest du die Einstellung für die Anzahl der Blätter wieder auf den Standard setzen und die Datei speichern und schließen.

Application.SheetsInNewWorkbook=intBlatt
ActiveWorkbook.Save
ActiveWorkbook.Close

Das Makro gesamt:

Sub ArbBlätter()
Dim intBlatt As Integer
intBlatt=Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook=12
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=“C:\Excel\VBA\VBA_NeuDatei.xlsx“
Application.SheetsInNewWorkbook=intBlatt
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

Natürlich kannst du den 12 Arbeitsblättern in deiner neuen Mappe gleich noch neue Namen geben, z.B.“Januar“ bis „Dezember“.

Füge dazu im einfachsten Weg diese Codezeilen in dein Makro vor den Anweisungen .Save und .Close ein:

ActiveWorkbook.Sheets(1).Name=“Januar“
ActiveWorkbook.Sheets(2).Name=“Februar“

usw. bis „Dezember“.

Einen besseren Weg zeige ich mal in einem künftigen Beitrag.

Summe unter Bedingungen bei nichtnumerischen Werten

 

Einleitung

Angeregt durch die Anfrage eines Lesers, die ich zunächst nicht beantworten konnte, ist dieser Beitrag entstanden.

In der Anfrage ging es darum, Flugzeiten zu addieren, wenn zwei Bedingungen in einer anderen Spalte eingehalten werden. Das Problem war, dass die Spalte mit den Flugzeiten auch nichtnumerische Werte enthalten sollten, z.B. in Klammern gesetzt oder mit Buchstaben versehen.

(4:00)

4:00 xz

Der Leser wollte das Problem mit der Funktion SUMMENPRODUKT lösen, hatte aber keinen Erfolg damit.

Doch mal meine Versuche im Detail. Als Zahlenformat ist [hh]:mm zu verwenden.

Summen ohne nichtnumerische Werte und zwei Nebenbedingungen

Die Tabelle könnte etwa so aussehen:

Nichtnumerisch1

Nehme ich SUMMENPRODUKT

=SUMMENPRODUKT((B24:B42={„QW“.“LK“})*(C24:C42))

erhalte ich als Ergebnis 52:30

Die entsprechenden Zellen sind blau hervorgehoben.

Nehme ich SUMMEWENN

=SUMMEWENN(B24:B42;{„QW“.“LK“};C24:C42)

erhalte ich als Ergebnis 27:00

Das ist nur die Summe der Zeiten, denen die Bedingung „QW“ zugeordnet ist.

Selbst wenn die Formel mit Strg+Shift+Enter als Matrixformel eingegeben wird, bleibt das Ergebnis. SUMMEWENN ist daher nicht geeignet.

Nehme ich SUMMEWENNS

=SUMMEWENNS(C24:C42;B24:B42;“QW“;B24:B42;“LK“)

erhalte ich das Ergebnis 0.

Das ist logisch, denn die Abfrage verlangt, dass sowohl „QW“ als auch „LK“ als Bedingung erfüllt wird und das ist nicht der Fall.

Versuche ich, das Kriterium_1 mit der ODER-Funktion zu definieren, geht auch das nicht.

=SUMMEWENNS(C24:C42;B24:B42;ODER(„QW“;“LK“))

=0

Nehme ich SUMME in Verbindung mit WENN

={SUMME(WENN(B24:B42={„QW“.“LK“};C24:C42))}

erhalte ich mit 52:30 wieder das richtige Ergebnis. Die Formel ist jedoch mit Strg+Shift+Enter als Matrixformel abzuschließen.

Zusammengefasst ist festzuhalten, dass die Funktionen SUMMENPRODUKT und SUMME in Verbindung mit WENN geeignet sind, Flugzeiten bei zwei Nebenbedingungen zu addieren.

Summen mit nichtnumerischen Werten und zwei Nebenbedingungen

Nichtnumerisch2

Die Flugzeiten wurden in drei Zellen der Tabelle nichtnumerisch gestaltet.

Nehme ich SUMMENPRODUKT

=SUMMENPRODUKT((B85:B103={„QW“.“LK“})*(C85:C103))

erhalte ich als Ergebnis #WERT!

Warum?

Vergleiche ich die Werte in B85:B103 mit den Bedingungen „QW“ bzw. „LK“, ergibt diese Abfrage entweder WAHR oder FALSCH.

Multipliziere ich WAHR oder FALSCH nun mit den nichtnumerischen Werten, wie es SUMMENPRODUKT tut, erhalte ich #WERT!.

Die Summe all dieser Produkte ergibt dann auch #WERT!

In nachstehender Tabelle habe ich das zusammengefasst.

Nichtnumerisch3

Nehme ich SUMMEWENN

=SUMMEWENN(B85:B103;{„QW“.“LK“};C85:C103)

erhalte ich als Ergebnis 14:45

Das ist die Summe aller numerischen Zeiten, für die „QW“ zutrifft, „LK“ wird ignoriert.

Nehme ich SUMMEWENNS

=SUMMEWENNS(C85:C103;B85:B103;“QW“;B85:B103;@LK“)

erhalte ich als Ergebnis 0

Das ist wiederum logisch, denn die Abfrage verlangt, dass sowohl „QW“ als auch „LK“ als Bedingung erfüllt wird, das ist nicht der Fall.

Nehme ich SUMME in Verbindung mit WENN

={SUMME(WENN(B85:B103=“QW“.“LK“};C85:C103))}

=38:00

erhalte ich das richtige Ergebnis.

Die Formel ist wieder mit Strg+Shift+Enter als Matrixformel abzuschließen. Die entsprechenden Zellen sind blau hervorgehoben.

Damit kann die Leserfrage beantwortet werden. Die Lösung kann nicht mit der Funktion SUMMENPRODUKT herbeigeführt werden.

Zu verwenden ist eine Kombination aus den Funktionen SUMME und WENN, wie zum Schluss gezeigt.