Excel Zellformel per vba ändern
#1
Hallo zusammen,

darf ich Euch um einen Rat für folgende Aufgabe fragen?

Ich habe ein Workbook mit 90 Tabellenblättern, die alle gleich aufgebaut sind, sich aber in der Anzahl der Zeilen verändern können.
In der Ausgangstabelle stehen jeweils in Zelle "G31" und "G33" die folgenden Formeln:

"G31": =G29/WERT(LINKS(F31;FINDEN(" ";F31;1)-1))

"G33": =(G29/WERT(LINKS(F33;FINDEN(" ";F33;1)-1))

Diese beiden Formeln möchte ich gerne ändern damit wenn keine Zahlenwerte eingetragen sind #DIV/0! nicht erscheint.
Die geänderte Formel lautet ja so:

"G31": =Wennfehler(G29/WERT(LINKS(F31;FINDEN(" ";F31;1)-1));0)

"G33": =Wennfehler(G29/WERT(LINKS(F33;FINDEN(" ";F33;1)-1));0)

Wie kann ich diese Formel in allen Tabellenblättern per vba ändern?

Vielleicht könnt Ihr mir dazu einen Lösungsweg zeigen?
Top
#2
Hallo Erich,

ich habe deine Formel bei mir in der Zelle G31 eingetragen, bin in den VBA-Editor gewechselt und habe im Direktfenster (STRG + G) ?Range("G31").FormulaR1C1Local eingetragen und Return gedrückt Das Ergebnis war dies

=Z(-2)S/WERT(LINKS(ZS(-1);FINDEN(" ";ZS(-1);1)-1))

Wobei ich persönlich die englische Schreibweise verwenden würde.

Reicht dir das? Näheres erfährst Du hier
Gruß Stefan
Win 10 / Office 2016
Top
#3
Hallo,

90 Tabellenblätter die alle gleich aufgebaut sind, das ist schon mal ganz schlecht. Gleichartige Daten gehören auf ein Blatt. Wenn du nun schon zu VBA greifen möchtest, würde ich damit nicht die Formeln ändern, sondern das Makro so schreiben, dass es die Berechnung direkt ausführt und nur das Ergebnis in der Liste einträgt.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#4
(23.04.2020, 11:59)sharky51 schrieb: Wie kann ich diese Formel in allen Tabellenblättern per vba ändern?

Vielleicht könnt Ihr mir dazu einen Lösungsweg zeigen?

Hallo Erich, :19:

schau dir mal die Anlage an: :21:
[attachment=31304]
Top
#5
Hallo Erich,

muss es unbedingt VBA sein ?
wenn alle Tabellenblätter gleich aufgebaut sind und die Formeln auf jedem Tabellenblatt jeweils in den gleichen Zellen stehen, geht das auch ohne VBA ganz fix.
Im sogenannten "Gruppenmodus" kann man eine Änderung auf mehreren Taellenblättern gleichzeitig vornehmen.

Die zu bearbeitenden Tabellenblätter über die Tab-Register selektieren (Mehrfachauswahl mit Strg- bzw Shift-Taste) => alle Änderungen / Eingaben werden gleichzeitig auf alle selektierten Tabellenblätter übernommen.

Siehe z.B. hier:
https://www.schieb.de/745999/zelle-in-me...ig-aendern

Gruß
Fred
Top
#6
Hallo zusammen,

damit meine ich Stefan, Klaus-Dieter, Case und Fred.....vielen Dank für Eure Vorschläge.
Ich werde jetzt mal in Ruhe alle austesten.

Nur zu Erklärung, die Blätter sind zwar alle in Ihrer Struktur gleich aufgebaut, aber jedes Blatt ist einer anderen Firma zugeordnet.
D.h., es sind bereits eingetragene Daten in jedem Blatt vorhanden, die für sich auf jedem Blatt ein Alleinstellungsmerkmal haben.
Also alles auf ein Blatt ist somit ausgeschlossen und verbietet sich.
Die Tabellen wachsen auch mit jeder Eingabe von Daten, somit stehen die Formeln nicht in der gleichen Zelle, sie verschieben sich.
Top
#7
Hallo zusammen,

nochmals vielen Dank für Eure Beiträge.
Ich bin aber jetzt von der Formelgenerierung in den Zellen abgekommen und schreibe das errechnete vba-Ergebnis direkt in die Zellen.

So:
Code:
Sub Durchschnittswerte_Einzelblatt()
 
  lastRow = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
  gesSumRow = Range("Gesamt_Summe").Row
 
  If lastRow = 3 And Range("Gesamt_Summe") = 0 Then
      Cells(gesSumRow + 2, 7).Value = 0
      Cells(gesSumRow + 2, 7).NumberFormat = "#,##0.00 €"
      Cells(gesSumRow + 4, 7).Value = 0
      Cells(gesSumRow + 4, 7).NumberFormat = "#,##0.00 €"
  Else
      'MsgBox DateDiff("m", (Cells(4, 2).Value), (Cells(lastRow, 2).Value))
      'MsgBox DateDiff("yyyy", (Cells(4, 2).Value), (Cells(lastRow, 2).Value))
      monValue = Range("Gesamt_Summe") / DateDiff("m", (Cells(4, 2).Value), (Cells(lastRow, 2).Value))
      yearValue = Range("Gesamt_Summe") / (Cells(gesSumRow, 9).Value)
      Cells(gesSumRow + 2, 7).Value = monValue
      Cells(gesSumRow + 2, 7).NumberFormat = "#,##0.00 €"
      Cells(gesSumRow + 4, 7).Value = yearValue
      Cells(gesSumRow + 4, 7).NumberFormat = "#,##0.00 €"
  End If
End Sub

Dann bis zur nächten Verwirrung  Huh
Top


Gehe zu:


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