shaggy84
Goto Top

Zellen summieren und Ergebnis übergeben

Hallo Forum Team, bastla, und alle anderen

noch eine weitere Frage...

Ich möchte mehrere Zellen summieren und das Ergebnis übergeben.

Folgender Sachverhalt:

Ich habe eine Spalte DR, in der ein Typ steht. Es stehen aber oft mehrere gleiche Typen untereinander.

In Spalten CL bis CQ stehen die Jahresumsätze der einzelnen Jahre.

Das Ergebnis soll nur noch eine Zeile des Typs mit der Summe aller Zeilen und Spaltenabschnitte der Umsätze ergeben. (Der Rest wird später gelöscht)

1. addiere Zellen der gleichen Zeile CL bis CQ in Zwischenablage
2. schau in der nächsten Zeile in Spalte DR ob der Typ gleich ist
3a. wenn ja, springe zur nächsten Zeile und addiere Zeilen CL bis CQ zur Zwischenablage hinzu
3b. wenn nein, lösche soeben dursuchte Zeilen bis auf aktuelle und setze Ergebnis bei aktueller Zeile in DV ein.
4. wenn nein, springe eine Zeile weiter und beginne von vorne (natürlich ohne die schon fertigen Ergebnisse zu löschen)

Grüße, Gregor

P.S. Mein Excel VBA Buch kommt bald face-smile

Content-Key: 82780

Url: https://administrator.de/contentid/82780

Printed on: April 27, 2024 at 00:04 o'clock

Member: bastla
bastla Mar 11, 2008 at 12:18:29 (UTC)
Goto Top
Hallo Shaggy84!

Eigentlich lässt sich diese Aufgabe relativ einfach auch ohne VBA lösen (hier gezeigt für Excel 2003):

Falls Du noch keine Liste der verschiedenen Typen hast, kannst Du diese erzeugen, indem Du die Spalte DR markierst, "Daten / Filter / Spezialfilter"und dort die Optionen "An eine andere Stelle kopieren" und "Keine Duplikate" wählst sowie für "Kopieren nach:" die erste Zelle einer freien Spalte (im selben Blatt) - für das Beispiel unten etwa EE2 - angibst. Die Eingabe eines Kriteriums entfällt, da Du ja alle "Typ"-Einträge benötigst.

Sobald es diese Liste gibt, kannst Du mit SUMMEWENN() die Werte jeweils einer Spalte und mit einer einfachen Summenformel diese Spaltensummen zusammenfassen.

Beispiel: Wenn Deine Typen ab EE2 aufgelistet wären (und die Daten in CL2:CQ999 stünden), könntest Du folgende Formel in EG2 eingeben und entsprechend nach unten und nach rechts kopieren:
=SUMMEWENN($DR$2:$DR$999;$EE2;CL$2:CL$999)
Damit hättest du schon einmal die Zeilen zusammengefasst. Dann noch in EF2 (und per AutoAusfüllen in den Zellen darunter) eine einfache Summenformel
=SUMME(EG2:EL2)
und die Spalten EE und EF enthielten die von Dir gewünschte Zuordnung "Typ / Gesamtsumme für Typ".

[Edit] Als Ergänzung: Wenn Du mit den Ergebnissen zufrieden bist, kannst du diese kopieren und über "Inhalte einfügen... / Werte" von den ursprünglichen Daten unabhängig machen, sodass diese dann tatsächlich gelöscht werden könnten. [/Edit]

Grüße
bastla
Member: Shaggy84
Shaggy84 Mar 11, 2008 at 12:29:07 (UTC)
Goto Top
Hallo bastla,

mein Problem an der Sache ist, das dies ein Teil meines VBA Codes werden soll, den ich quasi in der Mitte einfüge face-smile (Hatte ich aber auch net erwähnt muss ich hinzu fügen)

Die Zellen die ich hier miteinander addiere existieren hinterher garnicht mehr, es sollen quasi hier nur noch der Typ und der Gesamtumsatz stehen, zusammen mit weiteren Sachen die ich schon fertig habe.

Aber ich tüftel mal ein wenig rum, danke erstmal für deine Hinweise face-wink

P.S. Ich hole heute auch mein VBA Buch ab damit ich net dauernd was posten (und deine Zeit in Anspruch nehmen) muss
Member: bastla
bastla Mar 11, 2008 at 13:35:05 (UTC)
Goto Top
Hallo Shaggy!

Die Umsetzung Deines Pseudocodes sähe etwa so aus:
Sub Zusammenfassen()

Const ZeileVon = 2
Const TypSpalte = "DR"  
Const SummenSpalte = "DV"  
Const DatenSpalteVon = "CL"  
Const DatenSpalteBis = "CQ"  

Zeile = ZeileVon
DatenSpalteVonNr = Columns(DatenSpalteVon).Column 'Spaltennummer ermitteln (für Schleife)  
DatenSpalteBisNr = Columns(DatenSpalteBis).Column 'Spaltennummer ermitteln (für Schleife  

Do While Cells(Zeile, TypSpalte).Value <> ""  
    For i = DatenSpalteVonNr To DatenSpalteBisNr
        Summe = Summe + Cells(Zeile, i).Value
    Next
       
    If Cells(Zeile, TypSpalte).Value <> Cells(Zeile + 1, TypSpalte).Value Then
        Cells(Zeile, SummenSpalte).Value = Summe
        Summe = 0
        Zeile = Zeile + 1
    Else
        Rows(Zeile).Delete
    End If
Loop
End Sub

... damit ich net dauernd was posten (und deine Zeit in Anspruch nehmen) muss ...
Solange Du Zeit hast, auf eine Antwort zu warten ... face-wink

Grüße
bastla
Member: Shaggy84
Shaggy84 Mar 12, 2008 at 08:43:39 (UTC)
Goto Top
Guten Morgen bastla,

wie so oft (oder quasi immer) ist dein Code perfekt und läuft sehr gut face-smile

Gut, ich sollte schon auch die Spaltennummern direkt vergeben und nicht zu bequem sein, aber vielleicht bleibt es so ja auch übersichtlicher

Eine Frage hätte ich aber noch (auch wenn mein neues Buch jetzt neben mir liegt und ich mich damit ausführlich beschäftige...)

In der Ergebnisansicht stehen nun immer noch vereinzelt gleiche Typen, da es u.A. dazwischen wieder einen anderen Typen gegeben hat. Meine Idee wäre nun zuvor die Spalte der Typen alphabetisch zu sortieren (natürlich die ganze Zeile gleich mitnehmen) und deinen Code dann durchlaufen zu lassen...

Mal schaun ob ich selber drauf komme, bin aber auch für jegliche Hilfe dankbar face-wink
Member: bastla
bastla Mar 12, 2008 at 10:50:23 (UTC)
Goto Top
Hallo Shaggy84!

Wie schon an anderer Stelle (in Deinem anderen Thread) empfohlen wurde: einfach ein Makro dafür aufzeichnen und analysieren ...

Grüße
bastla
Member: Shaggy84
Shaggy84 Mar 12, 2008 at 13:10:53 (UTC)
Goto Top
Hallo bastla,

ja des stimmt schon, mach ich auch z.T., aber an manche Funktionen wie diese doppelte Sortierung klappt dann doch nicht so einfach damit

'Datenstruktur alphabetisch in Spalte I und DR sortieren  
Range _
(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Sort Key1:=Range("I1"), _  
Order1:=xlAscending, Key2:=Range("DR1"), _  
Order2:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom

Müsst dir so langsam mal nen Bier für die Hilfe ausgeben, hier schon einmal ein virtuelles als Vorschuss c(_)

Grüße, Gregor
Member: bastla
bastla Mar 12, 2008 at 13:49:11 (UTC)
Goto Top
Hallo Shaggy84!

Müsst dir so langsam mal nen Bier für die Hilfe ausgeben ...
Lieb von Dir, aber an Wochentagen mit einem "t" im Namen trinke ich kein Bier ... face-wink

Grüße
bastla