Toptorials Tutorials WeblogoLogobild kleinLogobild kleinToptorials Tutorials Weblogo
  • ALLE THEMEN IM ÜBERBLICK
  • YouTube
  • INFOS
    • SITEMAP
    • ÜBER TOPTORIALS
✕
            No results See all results

            Excel VBA Kurs – Teil 04: Dynamischen Bereich summieren & Nicht Zahlen markieren

            • Startseite
            • Tutorials Microsoft Office Excel Excel VBA
            • Excel VBA Kurs – Teil 04: Dynamischen Bereich summieren & Nicht Zahlen markieren

            Dynamischen Bereich summieren & Nicht Zahlen markieren

            In diesem vierten Teil meiner Excel-VBA-Tutorialreihe bauen wir auf den Grundlagen der vorherigen Videos auf und machen einen kleinen, aber sehr praxisnahen Schritt nach vorne: Wir summieren Werte nicht mehr aus einem festen Bereich wie A1, sondern dynamisch bis zur letzten gefüllten Zeile in Spalte A.

            Das Makro prüft dabei jede Zelle im Bereich, addiert nur echte Zahlen zur Summe und ignoriert alles, was keine Zahl ist. Zusätzlich zählen wir mit, wie viele Zellen übersprungen wurden – und markieren diese optional direkt im Tabellenblatt, damit man sofort sieht, welche Eingaben nicht zur Berechnung gepasst haben. Am Ende wird die Summe in B1 ausgegeben und bei Bedarf erscheint ein Hinweisfenster mit der Anzahl ignorierter Zellen.

            Wichtig: Dieses Tutorial ist Teil 4 der Serie und setzt das Grundlagenwissen aus den ersten Teilen voraus (z.B. Makros starten, Module/Prozeduren, Variablen, Option Explicit). Wenn du neu in VBA bist, schau dir bitte zuerst Tutorial 1 an – dann kannst du hier ohne Lücken mitmachen und verstehst jeden Schritt.

            Voraussetzung: Bitte zuerst Teil 1 anschauen (Entwicklertools aktivieren, Modul anlegen, Option Explicit). Den Link findest du hier:

            Excel VBA Kurs – Teil 01: Start mit Hello World – Modul, Makro, Option Explicit

            ⬇️ Den vollständigen Code kannst du weiter unten über den Downloadlink herunterladen.

            Achtung:

            Benutzt zum Üben eine separate Tabelle für Testzwecke oder eine Kopie des Originals damit Euch keine Daten verloren gehen.

            Fertiger Aufbau

            Vorschaubild dynamischen Bereich summieren Nicht-Zahlen markieren

            Vorschaubild dynamischen Bereich summieren Nicht-Zahlen markieren

            Code Zeile für Zeile erklärt

            Option Explicit

            Erzwingt, dass jede Variable vorher mit Dim deklariert werden muss. Tippfehler bei Variablennamen werden so sofort als Fehler erkannt.

            Public Sub SummeBereich_Dynamisch()

            Start einer öffentlichen Prozedur (Makro), die du aus Excel heraus starten kannst. Sie heißt „SummeBereich_Dynamisch“.

            Dim ws As Worksheet

            Legt die Variable ws an. Sie wird später auf ein Tabellenblatt zeigen.

            Dim lastRow As Long

            Legt lastRow an. Darin wird später die Nummer der letzten gefüllten Zeile in Spalte A gespeichert.

            Dim rng As Range

            Legt rng an. Diese Variable wird später den zu prüfenden Zellbereich (z.B. A1:A37) enthalten.

            Dim summe As Double

            Legt summe an. Hier kommt später die berechnete Summe rein (auch mit Dezimalstellen möglich).

            Dim ignoriert As Long

            Legt ignoriert an. Hier wird gezählt, wie viele Zellen keine Zahl enthalten (aber nicht leer sind).

            ' Arbeitsblatt wählen (eine Variante aktivieren)
            ' Variante 1: Aktives Blatt (einfach, aber weniger robust)

            Würde das aktuell angeklickte Blatt verwenden (wenn man die nächste Zeile entkommentiert).

            'Set ws = ActiveSheet

            Würde ws auf das aktuell aktive Blatt setzen.

            ' Variante 2: Aktives Blatt, aber garantiert in der Mappe mit dem Code

            Würde das aktive Blatt der Arbeitsmappe verwenden, in der der Code gespeichert ist.

            'Set ws = ThisWorkbook.ActiveSheet

            Würde ws auf das aktive Blatt in ThisWorkbook setzen.

            ' Variante 3: Fester Blattname (robust, aber Name muss exakt passen)

            Würde ein Blatt über den sichtbaren Tab-Namen auswählen.

            'Set ws = ThisWorkbook.Worksheets("Tabelle1")

            Würde ws auf das Blatt setzen, dessen Tab-Name genau „Tabelle1“ ist.

            ' Variante 4: Codename (sehr robust, unabhängig vom Tab-Namen)

            Verwendet den Blatt-Codenamen (Objektname), der sich nicht ändert, wenn man den Tab umbenennt.

            Tabellenobjekt im VBA Projekt Explorer

            Tabellenobjekt im VBA Projekt Explorer

            ' -> Im VBA-Editor links z.B. "Tabelle1 (Tabelle1)" -> Tabelle1 ist der Codename

            Erklärung, wo man Codename und Tab-Name im VBA-Editor sieht.

            Derzeit aktiviert

            Set ws = Tabelle1

            Setzt ws auf das Blattobjekt mit dem Codenamen Tabelle1. Das ist sehr robust, weil es unabhängig vom Tab-Namen ist.

            ' Sicherheitscheck: Spalte A komplett leer?

            Es wird geprüft, ob in Spalte A überhaupt Inhalte vorhanden sind.

             If Application.WorksheetFunction.CountA(ws.Columns("A")) = 0 Then

            Zählt alle nicht-leeren Zellen in Spalte A. Wenn das Ergebnis 0 ist, ist die Spalte komplett leer und der Code springt in den If-Block.

            MsgBox "In Spalte A sind keine Werte vorhanden.", vbExclamation, "Abbruch"

            Zeigt eine Meldung an: Text „In Spalte A sind keine Werte vorhanden.“, mit Warnsymbol und dem Fenstertitel „Abbruch“.

            Exit Sub

            Beendet das Makro sofort, damit danach nichts weiter ausgeführt wird.

            End If

            Beendet den If-Block.

            ' Letzte gefüllte Zeile in Spalte A finden

            Jetzt wird bestimmt, wie weit der Bereich nach unten geht.

            lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

            Geht in Spalte A ganz nach unten (letzte mögliche Zeile), springt dann wie Strg+Pfeil hoch zur letzten gefüllten Zelle und speichert deren Zeilennummer in lastRow.

            Set rng = ws.Range("A1:A" & lastRow)

            Setzt rng auf den Bereich von A1 bis zur Zelle in Spalte A mit der Zeilennummer lastRow (z.B. A1:A37).

            ' Alte Markierungen entfernen (optional, aber hilfreich)

            Vorherige gelbe Markierungen werden entfernt, damit man nur die aktuellen sieht.

            rng.Interior.Pattern = xlNone

            Entfernt Hintergrundmuster/Füllung im gesamten Bereich rng (setzt die Zellfüllung praktisch zurück).

            ' Rechnen

            Jetzt wird die Summe berechnet und die ignorierten Zellen werden gezählt.

            summe = SummeAusBereich_Sicher(rng, ignoriert, True)

            Ruft die Function auf, übergibt den Bereich rng, übergibt ignoriert als ByRef (wird darin gesetzt) und True zum Markieren. Der Rückgabewert (Summe) landet in summe.

            ' Ergebnis ausgeben

            Die Summe wird ins Blatt geschrieben.

            ws.Range("B1").Value = summe

            Schreibt die berechnete Summe in die Zelle B1 des ausgewählten Tabellenblatts.

            If ignoriert > 0 Then

            Prüft, ob es mindestens eine nicht-leere Zelle gab, die keine Zahl war.

            MsgBox ignoriert & " Zelle(n) wurden ignoriert (keine Zahl) und markiert.", vbInformation, "Hinweis"

            Zeigt eine Info-Meldung an, z.B. „3 Zelle(n) wurden ignoriert…“. ignoriert & hängt die Zahl vorne an den Text.

            End If

            Beendet den If-Block.

            End Sub

            Beendet das Makro SummeBereich_Dynamisch.

            Private Function SummeAusBereich_Sicher(ByVal rng As Range, ByRef ignoriert As Long, ByVal markieren As Boolean) As Double

            Start einer privaten Function, die einen Double-Wert zurückgibt. rng ist der zu prüfende Bereich, ignoriert wird als ByRef nach außen zurückgegeben, markieren ist ein True/False-Schalter.

            Dim c As Range

            Legt c an. Das wird in der Schleife jeweils eine einzelne Zelle aus dem Bereich rng sein.

            Dim summe As Double

            Legt eine lokale Variable summe an, in der innerhalb der Function aufaddiert wird.

            summe = 0

            Startwert der Summe auf 0 setzen.

            ignoriert = 0

            Startwert der ignorierten Zellen auf 0 setzen (wird nach außen zurückgegeben, weil ByRef).

            For Each c In rng.Cells

            Start einer Schleife: gehe jede einzelne Zelle im Bereich rng nacheinander durch und lege sie in c ab.

            If IsEmpty(c.Value) Then

            Prüft, ob die Zelle wirklich leer ist. Wenn ja, wird nichts gemacht.

            ' leer -> nichts tun

            Kommentar: Leere Zellen werden übersprungen.

            ElseIf IsNumeric(c.Value) Then

            Wenn die Zelle nicht leer ist: Prüft, ob der Zellinhalt eine Zahl ist.

            summe = summe + CDbl(c.Value)

            Wandelt den Zellwert sicher in Double um und addiert ihn zur laufenden Summe.

            Else

            Trifft zu, wenn die Zelle nicht leer ist, aber auch keine Zahl enthält (z.B. Text).

            ignoriert = ignoriert + 1

            Erhöht den Zähler für ignorierte Zellen um 1.

            If markieren Then

            Prüft, ob der Schalter markieren auf True steht.

            c.Interior.Color = vbYellow

            Färbt die aktuelle Zelle gelb, damit man sieht, welche Einträge ignoriert wurden.

            End If

            Beendet den If-Block für das Markieren.

            End If

            Beendet den If-Block der Zellprüfung (leer / Zahl / sonstiges).

            Next c

            Nimmt die nächste Zelle aus rng.Cells und wiederholt die Schleife, bis alle Zellen geprüft wurden.

            SummeAusBereich_Sicher = summe

            Setzt den Rückgabewert der Function auf die berechnete Summe.

            End Function

            Beendet die Function.


            Download Dateien:

            Alle Inhalte und Codebeispiele auf dieser Seite dienen ausschließlich zu Lern- und Demonstrationszwecken. Die Anwendung erfolgt auf eigenes Risiko. Ich übernehme keine Gewähr für Richtigkeit, Vollständigkeit oder Eignung für einen bestimmten Zweck und keine Haftung für direkte oder indirekte Schäden (z. B. Datenverlust), die durch das Ausführen, Verwenden oder Anpassen des Codes entstehen. Bitte erstelle vorab ein Backup und teste den Code zunächst in einer separaten Testdatei, bevor du ihn in produktiven Arbeitsmappen einsetzt.

            Download Dynamischen-Bereich-summieren-und-Nicht-Zahlen-markieren Excel Datei mit Makro

            Download Dynamischen-Bereich-summieren-und-Nicht-Zahlen-markieren als Text zum Kopieren

            Video zu diesem Tutorial:

             

            Das könnte Dich auch interessieren

            • Arbeitsmappe erstellen und speichern in Excel VBA
            • Auf Zellen zugreifen mit Cells in Excel VBA
            • Do Loop Schleife in Excel VBA
            • Eine eigene Funktion erstellen ganz einfach (Excel)
            • Entwicklertools anzeigen / Makro / VBA Visual Basic (Microsoft Word)
            • Excel VBA Kommentare schreiben
            • For Each Schleife in Excel VBA
            • For Next Schleife in Excel VBA
            • Hello World mit Excel VBA programmieren

            Schreibe einen Kommentar Antwort abbrechen

            Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

            Mehr von mir über Excel

            • Übersichts-Liste der Microsoft Excel Tutorials
            • Tutorials über Microsoft Excel
            • Excel
            • Excel VBA
            • Alle meine Videos auf YouTube
            • Tutorial Wunsch Liste

            Neue Beiträge

            • Excel VBA Kurs – Teil 04: Dynamischen Bereich summieren & Nicht Zahlen markieren
            • Excel VBA Kurs – Teil 03: Zahlen in einem Bereich sicher summieren
            • Excel VBA Kurs – Teil 02: Zellen auslesen, addieren & Ergebnis schreiben
            • Excel VBA Kurs – Teil 01: Start mit Hello World – Modul, Makro, Option Explicit
            • Python in LibreOffice Calc: Formular auslesen und auswerten

            Neue Kommentare

            • Chris bei Eine eigene Funktion erstellen (OpenOffice Calc)
            • osman bei Eine eigene Funktion erstellen (OpenOffice Calc)
            • Erdmann bei Wochentag von einem Datum ausgeben (LibreOffice Calc)
            • Chris bei Tutorial Wunsch Liste
            • Sabine Kniffka bei Tutorial Wunsch Liste

            Schlagwörter – Wolke

            anfänger Anleitung anpassen ausrechnen auswahlliste Bedingte Formatierung berechnen Calc Datum Download Dropdownliste einfügen entfernen erstellen Excel FreeOffice Funktion google hinzufügen Jahresplan Kalender Lernvideo LibreOffice löschen Makro markieren Microsoft OpenOffice PlanMaker programmierung script spreadsheets Sverweis Tabelle tabellen Tutorial VBA Video Wenn Wenn Funktion Word wps spreadsheets Zeilen Zelle Zellen
            KONTAKT   IMPRESSUM    DATENSCHUTZERKLÄRUNG    HAFTUNGSAUSSCHLUSS (Disclaimer)   © copyright TOPTORIALS