Office - Word, Excel und Co. 9.744 Themen, 41.408 Beiträge

Excel Summenbildung

Mick1 / 14 Antworten / Flachansicht Nickles

Hallo! Ich habe da ne "kleinere Prblematik" und hoffe wieder mal auf Hilfe. Also folgendes: normale Exceltabellenblatt ( Office 2013) A1 bis A13 normale Datumseingabe; in B1 bis B13 sind Geldbeträge, da aber unterschiedliche farbige Zellen ( rot, gelb grün, braun usw.) eingetragen. Nun möchte ich aber  z.B. in B14 nur die Summe der Zahlen/Beträge von B1 bis B13, die in der roten Zellen hinterlegt sind, in B15 die in den gelben Kästchen eingetragen sind usw. Wie macht man das? Vielen Dank schon mal imvoraus.

bei Antwort benachrichtigen
neanderix Edgar Rau „Hallo Mick1, das kannst Du nur mit VBA lösen, hier ein kleines Makro: sub summe1 Dim i As Integer Dim summe1 As Single i 1 ...“
Optionen

Hört die unart, alles vorher zu .Select en denn nie auf?!

sub summe1()

Dim i As Integer
Dim summe1 As Single
    i=1
    For i = 1 To 13
   If  Cells(i, 2).Interior.Colorindex = 3 Then
        summe1 = summe1 + Cells(i, 2)
    End If
    Next
    Cells(14, 2)= summe1


End Sub

Ob die neu gestaltete If Anweisung so funktioniert, kann ich jetzt und hier nicht mit letzter Bestimmheit sagen (ich meine aber: ja, denn auch "Cells" kennt "Interior".

Die "Formula" anweisung hinter dem letzten Cells ist überflüssig.

Übrigens lässt sich das noch etwas eleganter schreiben

sub summe2

Dim summe2 as Single

Dim tws As Worksheet

Dim zelle As Range

Set tws = ThisWorkbook.Worksheet("Tabelle1")

For Each zelle IN tws.Range("B1:B13")

 if zelle.interior.colorindex=3 Then

    summe2 =summe 2 + zelle

End If

Next zelle

tws.Range("A14")=summe2

End Sub

Zur Erklärung:

die zweite DIM Anweisung dimensioniert die Variable tws als Variable vom Typ "Worksheet" - sie nimmt also ein Worksheet auf.

Die zweite DIM Anweisung dimensioniert die Variable als eine vom Typ Range - sie kann also einen beliebigen Zellbereich aufnehmen.

Die Zeile:

Set tws = ThisWorkbook.Worksheet("Tabelle1")

weist der Variablen tws das in klammern hinter .Worksheet angegebenene Arbeitsblatt zu.

Ich habe hier Tabelle1 reingeschrieben, der name ist den tatsächlichen Gegebenheiten anzupassen.

Mit der nachstehenden For Each ... IN ... NEXT Schleife durchlaufen wir den in ""Range" espeicherten Zellbereich Zelle für Zelle.

Die letzte Anweisung weist der Zelle B14 den in summe2 enthaltenen Wert zu.

Vollständig würde diese Anweisung lauten:

tws.Range("A14").Value=summe2

.Value ist aber die Standardmethode der .Range-Methode, d.h. wenn nichts näher spezifiziert wird wird automatisch ".Value" ausgeführt - dieses Verhalten habe ich hier genutzt.

Ansonsten gilt:

Faustregel: in VBA nur dann "Activate"n und/oder "Select"en, wenn es unvermeidlich und absolut nötig ist - beide Methoden kosten unnötig Zeit - die sich bei solch einem kleinen Projekt nicht bemerkbar macht, bei größeren Tabellen aber sehrwohl, auch bei kleinen Routinen.

Aus meiner sicht ist die Nutzung dieser Methoden schlechter Programmierstil, weil sie in den allermeisten Fällen eben gerade nicht nötig sind - sie zeigen meist nur, dass sich der Programmierer mit den Objekten und deren Methoden nicht genügend auseinandergesetzt hat.

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen