Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SUBTOTAL( ... in VBA ... )

Forumthread: SUBTOTAL( ... in VBA ... )

SUBTOTAL( ... in VBA ... )
12.07.2006 17:11:52
Susi
Hallo zusammen,
ich möchte in einer großen Tabelle Teilergebnisse berechnen. Jetzt habe ich mir in jeder Zeile wo ich ein teilergebnis haben möchte eine leere Zeile erzeugt. Wie wende ich jetzt das Subtotal an ?
Mein Code sieht so aus:
For i = 3 To iMaxZeilen + 1
' **************
' Zeile einfügen
' **************
Rows("" & i & ":" & i).Select
Selection.Insert Shift:=xlDown
' ***************
' Summen addieren
' ***************
Range("O" & i).Select
SUBTOTAL(9, ?:?)
Next i
Wie bastle ich das Subtotal zusammen wenn der Zähler Variabel ist? Mit Strinbasteleien geht es nicht.
Bitte um Hilfe
Danke und Gruß
SUSI
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 17:30:21
{Boris}
Hi Susi,
was spricht gegen das Standardfeature Daten-Teilergebnisse...?
Grüße Boris
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 17:32:32
Susi
Hallo,
SUBTOTAL ist doch das Teilergebnis Feature nur in englisch. Wie nutze ich das in VBA mit einem Zähler der Variable ist. Wie bastle ich den SUBTOTAL "String" zusammen in VBA?
Danke und Gruß
SUSI
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 17:38:27
{Boris}
Hi Susi,
die Übersetzung von Subtotal war mir schon klar, darum ging´s mir auch nicht.
Ich hab halt nur das Gefühl, dass Du das Rad ein 2. mal erfinden willst.
Nochmal: Warum nutzt du nicht das Standardfeature Daten&gtTeilergebnisse...?
Wie sind Deine Daten aufgebaut?
Grüße Boris
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 18:49:52
Susi
Hi,
ok nocheinmal. Ich möchte subtotal verwenden aber automatisiert und nicht über data....
Hiefür erbitte ich Hilfe für den Quellcode um die Liste automatisiert zu erstellen. Vielleicht verstehe ich ja das feature data..... nicht richtig. aber hier sind jede menge manuelle Aktionen notwendig und das möchte ich eben nicht.
Gruß
Susi
Anzeige
Noch offen
12.07.2006 19:10:54
{Boris}
Hi Susi,
solange Du die Frage nach Deiner Datenstruktur nicht nicht beantwortest, kann ich Dir nicht weiter helfen.
Und wenn ich Dir jetzt beschreibe, wie man einen String zu einer Formel verkettet, dann bringt das m.E. nach nix, da dein Ansatz imho nicht brauchbar ist.
Ist nicht bös gemeint - aber ich will nur Flickschusterei vermeiden.
Grüße Boris
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:07:48
daniel
Hallo
Subtotal existiert meines Wissens nach nicht als eigenständige VBA-Funktion, sondern nur als Excel-Funktion.
dh. du kannst es mit
1. Range("a1").forumla= "=subtotal(9,B:B)"
als Formel in eine Zelle reinschreiben oder
2. mit Worksheetfunction.Subtotal(9, Range("B:B"))
in VBA verwenden.
wobei das Verwenden von Subtotal bzw Teilergebnis nur Sinn macht, wenn gleichzeitig mit dem Autofilter gearbeitet wird.
Gruß, Daniel Eisert
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:13:23
SUSI
Prima vielen Dank so geht's
Eine Frage noch. Wie formatiere ich jetzt diese Subtotal Zeilen automatisch in VBA z.B.in Gelb mit einer 12er Schrift und bei den tausendern immer einen Punkt (1.000.000) ?
Danke im Voraus
Liebe Grüße
SUSI
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:34:36
{Boris}
Hi Susi,
zeig doch mal Deinen Code, dann kann man es einbauen.
Grüße Boris
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:47:33
SUSI
Hallo,
' *********************************************
' Erstellt Zwischensummen
' *********************************************

Private Sub PLZwischensummen()
' Summen addieren
Selection.Subtotal GroupBy:=8, Function:=xlSum, TotalList:=Array(15, 16, 17 _
), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
' Jetzt müsste er mir an den Total eingefügten  Zeilen diese einfärben
' die vorhandene Scriftart auf 12 setzen (Arial)
' mit 1.000er Punkte formatieren
End Sub

Alles automatisch also nicht händisch. Problem ist, dass die Zeile immer eine andere sein kann, da es täglich eine neue Liste gibt.
Vielen lieben Dank.
Gruß
SUSI
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:58:39
{Boris}
Hi Susi,
das hat ja nun mit deinem ersten Code gar nix mehr zu tun - gut so.
Am Einfachsten über die SpecialCells abfragen - nach diesem Prinzip (wenn sonst keine Formeln im Bereich enthalten sind):

Sub test()
With Range("B1:B100").SpecialCells(xlCellTypeFormulas)
.NumberFormatLocal = "#.##0,00"
.Font.Size = 12
.Font.Name = "Arial"
.Interior.ColorIndex = 6
End With
End Sub

Grüße Boris
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:59:55
SUSI
SUPER DANKE und einen schönen Abend.
Liebe Grüße
SUSI
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:39:16
Daniel
Hallo
so wie jeder andere Zelle auch mit
range("..").interior.colorindex = ?
range("..").font.Size = 12
range("..").NumberFormat = "#,##0.00"
solche Fragen löst man aber einfach, in dem den Makrorekorder anwirft und die Aktionen aufzeichnet, dann kann man sich das was man braucht rauskopieren, bzw abschreiben.
Bitte beim arbeiten mit dem Recorder darauf achten, daß dieser viel Unnötiges mit aufzeichnet.
Die ganze Selectiererei ist in VBA zu 99% überflüssig.
Gruß, Daniel
Anzeige
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 19:49:34
SUSI
Mein Problem ist nicht unbedingt die 3 Aktivitäten sondern mehr wie finde ich die SUBTOTAL-Zeilen um die Aktivitäten durchzuführen! Die Liste wird täglich erstellt und täglich sind die Zeilen andere wo ich das SUBTOTAl bilde.
Lieben Gruß
SUSI
AW: SUBTOTAL( ... in VBA ... )
12.07.2006 20:28:28
Daniel
Hallo
ich bin halt davon ausgegangen, daß du die Formatierungen dann anpassen willst, wenn du die Subtotal-Formel in die Zelle schreibst, und dann müßte die Addresse ja bekannt sein.
Falls du die Formatierung nachträglich anpassen willst, hat Boris ja schon einen sehr guten Weg beschrieben.
Gruß, Daniel
Anzeige
Einspruch
12.07.2006 19:13:31
{Boris}
Hi Daniel,
...wobei das Verwenden von Subtotal bzw Teilergebnis nur Sinn macht, wenn gleichzeitig mit dem Autofilter gearbeitet wird...
Mitnichten. Für Zwischenergebnisse ist die Funktion TEILERGEBNIS bestens geeignet, da sie andere TEILERGEBNIS-Funktionen im enthaltenen Bereich nicht mit berechnet.
Genau nach diesem Prinzip arbeitet doch das Feature Daten-Teilergebnisse.
Grüße Boris
Anzeige
AW: Einspruch Danke für den Hinweis
12.07.2006 19:27:36
Daniel
Hallo, und danke für den Hinweis
dies Funktion war mir bisher nicht bekannt, bisher kannte ich nur den Effekt, das ausgeblendete Werte nicht mit berechnet werden.
dh. ich kann mit Teilergebnis in der gleichen Spalte wie die Daten Zwischensummen bilden, ohne eine darunter stehende Gesamtsumme zu verfälschen, interessant.
Gruß Daniel Eisert
Anzeige
;
Anzeige

Infobox / Tutorial

SUBTOTAL in VBA: So funktioniert's!


Schritt-für-Schritt-Anleitung

Um die SUBTOTAL-Funktion in VBA effizient zu nutzen, folge diesen Schritten:

  1. Leere Zeilen einfügen: Füge für jede Zeile, in der du ein Teilergebnis berechnen möchtest, eine leere Zeile ein. Dies kannst du mit einer Schleife machen.

    For i = 3 To iMaxZeilen + 1
       Rows("" & i & ":" & i).Select
       Selection.Insert Shift:=xlDown
    Next i
  2. SUBTOTAL-Formel anwenden: Verwende die WorksheetFunction.Subtotal-Methode, um die Teilergebnisse zu berechnen. Der Parameter für den Funktionscode muss variabel erstellt werden.

    Range("O" & i).Formula = "=SUBTOTAL(9,B:B)"
  3. Variablen nutzen: Um die Formel dynamisch zu gestalten, kannst du den Zellbereich anhand von Variablen erstellen.

  4. Formatierung: Mit der Interior und Font-Eigenschaft kannst du die Formatierungen der Zeilen ändern.


Häufige Fehler und Lösungen

  • Fehler: SUBTOTAL funktioniert nicht
    Lösung: Stelle sicher, dass du die WorksheetFunction.Subtotal-Methode verwendest und der Funktionscode korrekt ist.

  • Fehler: Zeilen werden nicht formatiert
    Lösung: Überprüfe, ob du die richtigen Zellbereiche in der Formatierung angibst. Nutze SpecialCells, um gezielt die SUBTOTAL-Zeilen zu formatieren.


Alternative Methoden

Wenn du SUBTOTAL in VBA verwenden möchtest, gibt es auch alternative Ansätze:

  1. Direkte Formeleingabe: Du kannst die SUBTOTAL-Formel direkt in eine Zelle schreiben:

    Range("A1").Formula = "=SUBTOTAL(9,B:B)"
  2. Automatisierte Makros: Nutze den Makrorekorder, um häufige Aufgaben zu automatisieren, aber sei vorsichtig mit der überflüssigen Auswahl.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du SUBTOTAL in VBA einsetzen kannst:

  1. Teilergebnisse für eine Liste:

    Private Sub PLZwischensummen()
       Selection.Subtotal GroupBy:=8, Function:=xlSum, TotalList:=Array(15, 16, 17)
    End Sub
  2. Formatierung der SUBTOTAL-Zeilen:

    Sub FormatSubtotalRows()
       With Range("B1:B100").SpecialCells(xlCellTypeFormulas)
           .NumberFormat = "#.##0,00"
           .Font.Size = 12
           .Font.Name = "Arial"
           .Interior.ColorIndex = 6
       End With
    End Sub

Tipps für Profis

  • Nutze die application.worksheetfunction.subtotal, um Daten effizient zu aggregieren.
  • Vermeide unnötige Select-Befehle, um den Code zu optimieren.
  • Experimentiere mit verschiedenen Funktionscodes der SUBTOTAL-Funktion (z.B. 1 für Mittelwert, 9 für Summe).

FAQ: Häufige Fragen

1. Wie kann ich SUBTOTAL in VBA dynamisch gestalten?
Du kannst die Zellreferenzen und den Funktionscode in Variablen speichern und diese dann in deiner Formel verwenden.

2. Was ist der Unterschied zwischen SUBTOTAL und TEILERGEBNIS?
SUBTOTAL ist die englische Bezeichnung und funktioniert ähnlich, bietet jedoch die Option, nur sichtbare Zellen zu berücksichtigen, wenn ein Filter angewendet wird.

3. Kann ich SUBTOTAL auch ohne Autofilter verwenden?
Ja, SUBTOTAL funktioniert unabhängig vom Autofilter, jedoch macht es oft mehr Sinn, die Funktion zusammen mit Filtern zu nutzen, um präzisere Ergebnisse zu erhalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige