Formel über VBA um einen bestimmten Wert vergrößern/verkleinen
#1
Hallo zusammen,
folgende Problematik:

Code:
   Sheets("Zwischenplan").Range("B5").FormulaR1C1 = "='Woche 1'!R107C1"

Das ist ein Teil meines aktuellen Codes.
Der Zellbezug der Formel kann sich aber aufgrund der Tabelle ändern, das heißt aus Woche 1'!R107C1 soll dann zum Beispiel Woche 1'!R109C1 werden.

Über einen anderen Codeschnipsel kann ich den Wert (nennen wir diesen Wert "Abweichung") ermitteln, um welchen sich der Zellbezug ändern soll.
Ist es nun möglich, einfach zu sagen, dass die Formel sich um diesen Wert "Abweichung" ändern soll? Also sowas wie: Woche 1'!R107C1 minus Abweichung?

"Abweichung" kann positiv oder negativ sein, aber das ist wahrscheinlich das geringste Problem.
Top
#2
Hallo,

so klappts:

    Dim intReihe As Integer
    
    intReihe = 15
    Range("B3") = "=Tabelle1!R" & intReihe & "C3"

Gruß Günter
Top
#3
Code:
Sub TEST()

Dim Zeile1 As Long
Dim Zeile2 As Long
Dim Abstand As Long

Zeile1 = 1
Zeile2 = Columns(1).Find(what:=Worksheets("Namen").Range("S1"), after:=Cells(Zeile1, 1)).Row
Abstand = Zeile2 - Zeile1 - 107

Worksheets("Woche 1").Range("B4") = "='Woche 1'!R" & Abstand & "C1"

End Sub


Mit diesem Code funktioniert es theoretisch, allerdings wollte ich ja, dass mir Excel di bestehende Formel durch einen Wert dazu addiert. Dieser Code ersetzt einfach ein Teil der Formel...

Ich möchte, dass aus:


Zitat: Woche 1'!R107C1


durch dazuaddieren von "Abstand" diese Formel wird


Zitat: Woche 1'!R109C1 werden


Ich habe so um die 60 verschiedene Zellen die auf diese Weise bearbeitet werden sollen.
Top
#4
Hallo,

einfach
Abstand = Columns(1).Find(what:=Worksheets("Namen").Range("S1"), after:=Cells(Zeile1, 1)).Row
Gruß Uwe
Top
#5
Hallo Kuwer,

danke erst mal für deine Antwort.

Das Problem dabei ist aber, dass ich wie oben erwähnt ca. 60 verschiedene Formeln habe.
Mit dieser Lösung müsste ich 60 verschiedene "Abstand" Namen haben und 60 verschiedene Suchkriterien.

Falls es nicht anders möglich ist, eine bestehende Formel so zu ändern wie ich es brauche, dann ist es halt so.
Dachte nur da gibt es einen Trick...
Top
#6
Hallo,
ich hatte dir in der Formel die Reihe als Variable eingebaut.
Irgendwie muß die Reihe ja berechnet werden.
Das kannst du mit 60 vorgegebenen Werten machen oder durch ermitteln der Zeile... von zu suchenden Begriffen.
Wie auch immer, in Excel ist die Glaskugel noch nicht eingebaut.
Irgendwie muß der Wert (die Reihe) der zu erzeugenden Formel mitgegeben werden.
Vielleicht kann jemand mit deinen Aussagen mehr anfangen wenn du eine aussagekräftige Beispieldatei hochlädtst.

Gruß Günter
Top
#7
Hallo zusammen,

ich habe das Problem ein kleines bisschen anders gelöst.

Meine eigentlich Formel sah ja zum Beispiel so aus:

Zitat:='Woche 1'!$A$121

Ich habe die Formel ein bisschen anders gestaltet, jetzt sieht die Formel so aus:


Zitat:=INDIREKT("'"&$B$33&"'!A"&121+"1")

In B33 steht der Name des Reiters (Woche 1). Der Zellbezug ist immer noch A121, allerdings ist in der Formel hinterlegt, dass die Zeilennummer 121 plus 1 gezählt wird.
Diese 1 steuere ich über ein Makro, wie schon oben geschrieben.

Hoffe, falls jemand das gleiche Problem haben sollte, dass ihm das hilft.

Danke aber auch natürlich für eure Hilfe.
Top
#8
Moin!
Auch hier wieder mein beliebter Hinweis:
Wochen- oder Monatsblätter sind schlicht Murks!
Indirekt() ist zwar eine "Lösung", aber als volatile Formel nur im Notfall zu verwenden, der hier nicht vorliegt.

Alle Daten in eine Tabelle,
  • Auswertung durch Filter iVm Teilergebnis,
  • Summewenn, Zählenwenn, Aggregat oder Summenprodukt
  • oder gleich ein Pivot-Table erstellen.
Wenn ein "Dashboard" oder eine Druckvorlage gewünscht wird, geht dies bequem mittels "Formular"-Blatt.
Dort werden die Daten dann mittels Verweis oder Index(Vergleich) "gezogen".

Two Cents
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste