Zellbezug in Formeln mittels Makro um Wert X verändern
#1
Hallo Zusammen,

ein Bekannter hat mich um Hilfe gebeten, nur leider sind meine Excel kenntnisse was Makros angeht doch stark begrenzt.

Zum Anliegen:
Ist es Möglich ein Makro so zu schreiben das alle Zellen auf Formeln überprüft und bei einer Formel die Zellbezeichnung z.B. "A1" mit einem Wert "X" (der Variabel eingegeben wird) z.B. "20" auf "A1" Addiert und als ergebniss "A21" ergibt.
Perfekt abgerundet wäre noch die möglichkeit zur Überprüfung auf welches Tabellenblatt die Formel zugreift und hier verschiedene Additionswerte pro Tabellenblatt eingegeben werden könnten.

Ich habe etwas mit der Makro aufzeichnung rumgespielt aber so richtig schön ist das leider nicht. Hier kann ich es nur für eine einzelne Zelle verändern. Was bei mehr als 100 Formeln á13 Tabellenblätter mehr als Aufwändig wäre.
Und was noch hinzukommt das wenn ich die "B" Spalte verändere, verändert das Makro mir auch das Tabellenblatt und den Buchstaben. (Siehe Bild) (Es soll nur die Zahl verändert werden)

Code:
Sub test1()
'
' test1 Makro
'

'
    ActiveCell.FormulaR1C1 = "=Einn!R[20]C"
End Sub

In Tabelle Einn & Aus stehen die Werte Numerisch und in W1 werden die Werte mittels "=Einn!A1" dargestellt. (Siehe Bild)
Ich möchte mittels Makro am besten auf einen Schlag die Werte von A1 & B1 in A21 & B21 ändern lassen. Und das für alle Zellbezeichnungen. (Siehe Bild)
Das hier ist nur eine sehr vereinfachte Variante der zu verändernden Tabellenblätter. (Siehe Bild)

Ich weiß natürlich das es zuviel verlangt ist hier den Makro Code zu verlangen. Daher währe es sehr schön wenn Ihr mir Vorschläge machen könntet wo und wie ich überhaupt anfangen könnte um soetwas zu realisieren.

Vielen Dank.

Gruß


Angehängte Dateien Thumbnail(s)
   
Top
#2
Hallöchen,

Du kannst mit HasFormula ermitteln, ob eine drin steht.
Wenn ja, kannst Du den Formeltext zerlegen. mit INSTR ermittelst Du die Positionen der eckigen Klammern, kannst die Formel in 3 Teile zerlegen und beim Zahlenwert Deine 20 dazu addieren. Hast Du da nur einfache Formeln mit einem Zellverweis oder geht es um mehr?

Das könnte z.B. für eine Formel in A3 so aussehen:
Code:
Sub SplitFormula()
Dim strFormula
If Range("A3").HasFormula Then
  strFormula = Split(Split(Range("A3").FormulaR1C1, "[")(1), "]")(0) '
  strFormula = Replace(Range("A3").FormulaR1C1, "R[" & strFormula & "]", "R[" & strFormula + 20 & "]")
  Range("A3").FormulaR1C1 = strFormula
End If
End Sub

Oder Du fügst die Formel auf einem anderen Blatt ein, aschneidest A1 aus und fügst es 21 Zellen daneben ein Smile
Im Aufgezeichneten Code ist dann zwar nix von der Formel zu sehen, aber es funktioniert. Nicht immer. Aber auch nicht immer öfter Smile
Problem ist ja vor allem, dass Du nicht in jeder Formel auf A1 verweist Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Vielen Dank für deine Antwort.

Ich hatte nochmal mit meinem Bekannten gesprochen und so leicht ist es leider doch nicht.
Mit dem Kopieren und Einfügen hätte es sonst perfekt geklappt.

In den Tabellenblättern W1 bis W13 sind leider nicht alle Formeln um Faktor X verschoben.
Wir sind dabei auf eine anderen lösungs idee gekommen.

Da wir die W1 Tabelle sowie so komplett überarbeiten müssen und daraus dann W2 bis W13 generieren wollen,
könnte mann ja die Formel so abändern das durch ein Makro der aktuelle Zellverweis ausgelesen und in eine Formel ergänzt wieder in die Zelle eingetragen wird.

Code:
Aus:
=Einn!A1

Wird:
=INDIREKT("[b]Einn!A[/b]"&([b]1[/b]+$J$21))

wobei "Einn!A" und "1" in der Formel durch die ausgelesene ersetzt wird.
Die Zelle $J$21 ist hier nur ein Beispiel und beschreibt nur den verschiebe Faktor. Dieser Variiert auf jedem Tabellenblatt W1 bis W13.

Problem ist nur das die bezugs Formel (z.B. =Einn!A1) in vielen Zellen noch in Formeln verarbeitet wird.
Hier müsste mann aus der Formel alle Zellbezüge auslesen und ohne das "=" wieder einfügen.

Code:
Aus:
=WENN(UND([b]Einn!$M$11[/b]<>"";[b]Einn!$C$26[/b]<>"");[b]Einn!$C$26[/b];"")

Wird:
=WENN(UND(INDIREKT("[b]Einn!A[/b]"&([b]11[/b]+$J$21))<>"";INDIREKT("[b]Einn!A[/b]"&([b]11[/b]+$J$21))<>"");INDIREKT("[b]Einn!A[/b]"&([b]11[/b]+$J$21));"")

Hinzu kommt noch das der verschiebe Faktro beim Tabellenblatt Einn & Aus nicht gleich ist.
Wie man das noch mit ins Makro einbauen könnte ist mir noch unklar.

Da ich mit Makros bis jetzt nichts zu tuhen hatte wäre es schön wenn mir hier jemand helfen könnte.

Vielen Dank

Gruß
Top
#4
Hallo

ein offenes Wort, bei dem Beispiel mit "İndirekt" Formel steige ich geistig aus!  "Det ,st mir zu hoch, wah .." 
Geht das nicht auch viel einfacher??   Z.B. mit der kurzen und einfachen Formel   =Einn!A21  ???
Das liesse sich m.E. viel einfacher als Makro mit einem Suchlauf umsetzen.  

Noch eine Frage, kannst du uns eine Beispieldatei mit Lösungen hochladen? Vielleicht haben wir dann noch ein paar gute Ideen wie man diese Aufgabe lösen kann.

mfg  Gast 123
Top


Gehe zu:


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