Eine Variable in einer Formel mit VBA (Button) ändern

DSRocker

Lt. Junior Grade
Registriert
Juli 2011
Beiträge
329
Hallo zusammen,

Ich habe eine Summenprodukt-Formel mit Angaben von Zeilen.
Wenn die Zeile, die dort angegeben ist, leer ist, dann funktioniert die Formel nicht.

Da die Zeilen jedes mal gefüllt werden und ich nicht jedesmal die Summenprodukt-Formel manuel anpassen will,
besteht sicherlich die Möglichkeit diese Formel mit einem "button" (mit VBA-Code) zu ändern.
Es muss eigentlich nur die Anagabe der Zelle um 5 erhöht werden...

Hoffe es ist verständlich was ich will ;-)

Vielen Dank im Voraus
Gruß
DSRocker
 
Dann wäre es ganz nett die Formel und auch die Zelle zu wissen um einen vorführbaren Code bauen zu können.
Ach ja, was genau meint «die Angabe der Zelle um 5 erhöht» - was soll da um 5 erhöht werden?

CN8
 
Im Grunde genommen, spielt es keine Rolle wie die Formel aussieht:
wichtig ist, dass die Angabe der Zeile um einen bestimmte Wert erhöht wird!
z.B.:
=SUMME(A8:A13)
mit einem Button soll jetzt aus (A8:A13) => (A8:A18) werden

damit kann ich schon mal nach etwas suchen und dann ersetzen...:

Private Sub GuVFormel_Click()
löschen = "A13" 'ersetzen (hier wird ja einfach nach einer Zeichenfolge gesucht... bringt mir nicht viel, da diese sich ja ändern soll)
einfügen = "A18" 'einfügen
For Each cell In Selection
If cell.HasFormula = True Then
cell.Formula = Application.WorksheetFunction.Substitute(cell.Formula, löschen, einfügen)
End If
Next
End Sub

Gruß
DSRocker
 
Zuletzt bearbeitet:
DSRocker schrieb:
Im Grunde genommen, spielt es keine Rolle wie die Formel aussieht:
wichtig ist, dass die Angabe der Zeile um einen bestimmte Wert erhöht wird!
Nun ja, da bin ich komplett anderer Meinung, da ich doch etwas tiefer in der Materie VBA drin stecke ...
Code:
Option Explicit

Sub FormelAendern()
   Dim strFormel As String
   Dim Pos As Integer
   Dim Bis As String
   Dim Ze As Integer, Sp As String
   
   Dim KlammerAuf As Integer, KlammerZu As Integer
   Dim strBereich As String
   Dim OldRow As Integer, NewRow As Integer
   
   With ActiveCell
      strFormel = .Formula
      If Left(strFormel, 1) = "=" Then
         KlammerAuf = InStr(strFormel, "(")
         KlammerZu = InStr(strFormel, ")")
         strBereich = Mid(strFormel, KlammerAuf + 1, KlammerZu - KlammerAuf - 1)
         
         OldRow = Range(strBereich).Rows(Range(strBereich).Rows.Count).Row
         NewRow = OldRow + 5
         Sp = Split(Cells(1, Range(strBereich).Column).Address, "$")(1)
         .Formula = Left(strFormel, InStr(strFormel, ":")) & Sp & NewRow
      End If
   End With
End Sub
Den Rest wirst du dir wahrscheinlich selber anpassen können.
 
Vielen Dank für den Code.
Verstehe jetzt warum die Formel, die ich ändern will doch so wichtig ist ;-)

hier ist die Formel, die ich benutze (fettmarkierte bereiche sollen um 5 erhöht werden)

=RUNDEN(SUMMENPRODUKT((JAHR(sold!W11:W950)='GuV Topf'!S4)*((sold!AE11:AE950))*(sold!AE11:AE950>0)*(sold!H11:H950="Option"));2)

Wäre für einen vollständigen Code sehr dankbar!
 
Unschuldige Rückfrage: diese 950 - muss unser Button diese auch erst erkennen um sie um 5 hochzuzählen?
Und würde es immer die erst Zahl vor der Zeichenkombination «)=» sein, damit man sie dahin durchhangeln kann?

CN8
 
Die 950 bleibt natürlich nicht für immer! jedes Mal, wenn im Sheet "sold" weitere Zeilen dazu kommen (sind immer 5er Schritte), muss dann auch diese (jetzt noch) 950 um 5 erhöht werden!

Es sei den ich kann in die Formel noch eine Formel einbauen, die mir dann diese 950 erhöht, wenn in Sheet "sold" nächste Zeile befüllt ist... ?!?!
 
... hmm....
keine Lösung?!?!
 
Zurück
Oben