Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dynamische Formel zum addieren (VBA)

Dynamische Formel zum addieren (VBA)
26.01.2022 15:40:31
Mumpfe
Servus Zusammen,
ich habe entweder ein Brett vorm Kopf oder das Problem ist tatsächlich nicht so einfach.
In Spalte A befinden sich "MR", "BR" und "Mod"
Bei MR sollen alle BR die darunter sind eine Summe bilden und diese Formel soll in Spalte B erscheinen
Bei BR sollen sich dann die Mods addieren.
Hier mal eine Beispieldatei in welcher ich die Formeln per Hand eingefügt habe.
Da in Spalte A immer wieder MR, BR und Mods hinzukommen oder entfallen, müssen sich dann eben die Formeln entsprechend anpassen.
https://www.herber.de/bbs/user/150688.xlsx
Ich hab schon alles mögliche mit Cases, While und If Schleifen probiert, aber irgendwie bekomm ichs im Kopf nicht zusammen.
Mit freundlichen Grüßen
Mumpfe

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dynamische Formel zum addieren (VBA)
26.01.2022 16:24:57
Theo
Hallo,
bin mir nicht sicher ob ich die Anforderung wirklich verstanden habe, aber ich denke so sollte es gehen.

Sub MRMRSummierer()
Dim xs As Worksheet
Dim LetzteZeile As Double
Dim i As Double
Dim u As Double
Dim BRSumme As Double
Dim ModSumme As Double
Set xs = ActiveSheet
'letzte Zeile ermitteln
LetzteZeile = xs.Cells(xs.Rows.Count, 1).End(xlUp).Row
'ModSumme
For i = 1 To LetzteZeile
If xs.Cells(i, 1).Value = "BR" Then
ModSumme = 0
For u = i + 1 To LetzteZeile
If xs.Cells(u, 1).Value = "Mod" Then
ModSumme = ModSumme + xs.Cells(u, 2).Value
End If
If xs.Cells(u, 1).Value = "BR" Or xs.Cells(u, 1).Value = "MR" Then Exit For
Next u
xs.Cells(i, 2).Value = ModSumme
End If
Next i
'BR SUMME
For i = 1 To LetzteZeile
If xs.Cells(i, 1).Value = "MR" Then
BRSumme = 0
For u = i + 1 To LetzteZeile
If xs.Cells(u, 1).Value = "BR" Then
BRSumme = BRSumme + xs.Cells(u, 2).Value
End If
If xs.Cells(u, 1).Value = "MR" Then Exit For
Next u
xs.Cells(i, 2).Value = BRSumme
End If
Next i
Set xs = Nothing
End Sub
Im ersten Schritt werden die Werte aus Spalte B von MOD aufaddiert bis das näschste BR bzw MR kommt.
Im zweiten Schritt werden die Werte die jetzt in Spalte B bei BR stehen aufaddiert und bei MR eingetragen.
Grüße
Theo
Anzeige
AW: Dynamische Formel zum addieren (VBA)
26.01.2022 17:29:00
Mumpfe
Hi Theo,
in der Zelle sollte halt dann eine Formel stehen, da anschließend der ganze Quark in einzelne Tabellen ohne Makros exportiert wird.
Grüße
AW: Dynamische Formel zum addieren (VBA)
26.01.2022 16:29:49
Michael
Die Spalte A sollte auf den Eintrag "MR" enden, die 1000 in der Formel könnte evtl. nicht reichen, weiß ja nicht wie viele Daten Du wirklich hast.
Die Zellen in denen Deine Rechnungen standen sind jetzt gelb unterlegt, nun stehen da meine ;-)
https://www.herber.de/bbs/user/150690.xlsx
VG
Michael
AW: Dynamische Formel zum addieren (VBA)
27.01.2022 14:43:41
Mumpfe
Hi,
funktioniert schonmal soweit nicht schlecht. Nur wie kann ich die Range O13:O986 dynamisch erweitern obwohl es in einer Excel Formel abgebildet ist?

Sub Formel()
Dim i As Long
Dim anz As Long
Dim s As String
anz = Uebersetzung.UsedRange.Rows.Count
For i = 12 To anz
If Uebersetzung.Cells(i, 15) = "Marke" Then
Uebersetzung.Cells(i, 15).EntireRow.Delete
End If
Next
For i = 12 To anz
s = "=SUMMEWENN(BEREICH.VERSCHIEBEN(INDIREKT(""O""&ZEILE()+1);;;VERGLEICH(""MR"";O13:O986;0);1);""BR"";BEREICH.VERSCHIEBEN(INDIREKT(""Q""&ZEILE()+1);;;VERGLEICH(""MR"";O13:O986;0);1))"
If Uebersetzung.Cells(i, 15) = "MR" Then
Uebersetzung.Cells(i, 17).FormulaLocal = s
End If
Next
End Sub

Anzeige
AW: Dynamische Formel zum addieren (VBA)
28.01.2022 17:14:57
Yal
Hallo Mumpfe,
wenn die Formel "relativ" übertragen werden sollte, dann musst Du diese als solche lesen.
Relativ bedeutet in den Fall, dass eine Formel in B1, die sich auf A1 bezieht, in der FormulaR1C1 irgendwas wie "RC(-1)" haben wird.
Also liest die FormulaR1C1 aus B1, ersetzt die "A" und "B" in "O" un "P" (weil diese fest sind) und füge diese in P13:P986 als FormulaR1C1 ein.
Es sollte ungefähr so aussehen:

Sub Formel_kopieren()
Dim F As String
F = Range("B1").FormulaR1C1
Debug.Print F
F = Replace(F, """A""", """O""")
F = Replace(F, """B""", """B""")
Debug.Print F
Range("P13:P986").FormulaR1C1 = F
End Sub
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige