Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1876to1880
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

Formelplatzhalter innerhalb eines Makros

Formelplatzhalter innerhalb eines Makros
11.04.2022 10:30:54
Daniela
Guten Morgen,
ich habe in einem Makro Teilergebnisse, in der ich in Spalte A Zahlenwerte aufsummieren lassen.
Zusätzlich möchte ich nun auch in der selben Zeile der jeweiligen Summe eine Aufrunden-Formel eingeben.
Es soll in L14 wie folgt aussehen:

Meine (Laien-)Idee war es nun in Spalte L durch suchen/ersetzen die Nullen, die Excel mir hierfür rauswirft (ich habe bei den Teilergebnissen Spalte L mit ausgewählt), durch die Formel zu ersetzen.
Allerdings soll ja jeweils der Bezug auf die korrekte Zeile gehen.
Daher die Frage: Gibt es hierbei die Möglichkeit einen Platzhalter für die Zeile (Spalte A steht ja fest) zu nehmen, so dass sich die Zelle in L immer auf die entsprechende Zelle in derselben Zeile in A bezieht?
Oder gibt es eine charmantere Lösung hierfür?
Lieben Dank im Voraus!
Gruß
Daniela

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
.. .FormulaLocalR1C1Local = "=Aufrunden(R1C/4;0)"
11.04.2022 10:34:53
Yal
owT (hat nicht mehr im Titel gepasst)
VG
Yal
AW: .. .FormulaLocalR1C1Local = "=Aufrunden(R1C/4;0)"
11.04.2022 10:39:16
Daniela
Hallo Yal,
danke für die schnelle Antwort.
Mir wird der Titel nicht ganz angezeigt, sondern mit Punkten und dann .. .FormulaLocalR1C1Local = "=Aufrunden(R1C/4;0)"
Da kommt ja wahrscheinlich noch etwas davor oder?
Und das owT muss ich hinten ransetzen? Sorry, aber das kenne ich leider nicht. Bin im VBA nicht gut.
Könntest Du mir die gesamte Formel bitte einmal in den Text schreiben und nicht in den Titel, damit ich alles sehen kann?
Danke Dir!
Gruß
Daniela
..der Rest
11.04.2022 10:51:39
Yal
ok. Sorry.
owT steht für "ohne weitere Text". Bedeutet, alles steht schon im Titel.
Wenn Du eine Formel unter laufenden Makrorekorder in Excel eingibt, dann bekommst Du folgendes raus (den Select per hand gekürzt):

Range("B1").FormulaR1C1 = ""=ROUND(RC1/4,0)"" 
Um nicht die Formel in Englisch eingeben zu müssen, verwendet man die Version FormulaR1C1Local, die die Formel in lokaler Sprache annimt.
Range("B1"9 ist die Zelle, wo die Formel reinkommt.
Und den "RC" in der Formel ist ein Row-Column Verweis. Entweder
relativ: RC[-1] die Spalte vor der wo die Formel sich befindet und in der aktuelle Zeile, oder
absolut: RC1 in der Spalte 1 aber in der aktuelle Zeile.
Geht auch in R2C, R[5]C[2], R2C[-1] usw.
VG
Yal
Anzeige
.FormulaR1C1Local = "AUFRUNDEN(R1C/4;0)" owT
11.04.2022 10:56:27
RPP63
Kaum nutzt man die richtige Eigenschaft, klappt es auch mit owT im Betreff. ;)
Gruß Ralf
Cells(i, "L").FormulaLocal = "ROUND(RC1/4;0)"
11.04.2022 11:05:04
Yal
Auf Englisch ist es sogar kürzer.
Aber ich sehe gerade mein Fehler: Spalte 1 der aktuelle Zeile ist gewollt: RC1
und nicht Zeile 1 der aktuelle Spalte: R1C
VG
Yal
Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)"
11.04.2022 11:06:55
Yal
FormulaR1C1, klar nicht FormulaLocal: Englisch und R1C1-Schreibform
VG
Yal
AW: Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)"
11.04.2022 11:19:51
Daniela
Ok wow, jetzt bin ich raus ;)
Ich habe verstanden, dass
Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)"
die richtige Lösung sein soll.
Könntet ihr mir bitte noch sagen, wie ich das ganze einzutragen habe, wenn mein letzter Eintrag
Columns("L:L").Select
Ist und ich danach die Zahl Null suchen möchte und diese dann mit dem Aufrunden ersetzen möchte?
Alles, was ich bisher versucht habe, läuft auf Fehler.
Danke & Gruß
Daniela
Anzeige
Makrorekorder
11.04.2022 11:57:51
Yal
Hallo Daniela,
da würde ich zuerst den Makrorekorder starten,
die Spalte L markieren,
die Funktion Suchen-Ersetzen anstossen,
damit die Nullen durch irgendwas anders (Vielleicht sogar direkt die Formel) ersetzten.
So hast Du ein Code-Basis, worauf Du die Endlösung bauen kannst. Wenn's klemmt, sind wir da.
Aber es wird am besten funktionieren, wenn Du es auf deiner Datei machst. Lerneffekt als Bonus.
VG
Yal
AW: Makrorekorder
11.04.2022 12:19:29
Daniela
Hallo Yal,
das habe ich auch getan, also in der Aufzeichnung versucht die Nullen durch die Formel zu ersetzen, aber er trägt mir da nur den Text der Formel ein und errechnet nichts, daher dachte ich, dass es darüber nicht geht.
Mein Makro sieht nach dem suchen/ersetzen so aus:
Selection.Subtotal GroupBy:=7, Function:=xlSum, TotalList:=Array(1, 12, 19) _
, Replace:=True, PageBreaks:=True, SummaryBelowData:=True
Columns("L:L").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("L:L").Select
Selection.Replace What:="0", Replacement:="=aufrunden(RC1/4;0)", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Range("L26").Select
End Sub
Jetzt die Frage, was davon ersetze ich mit:
Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)"
Ich habe während des Aufnehmens auch schon versucht das in ersetzen zu nehmen, aber auch das funktioniert nicht, sondern es wird nur als Text dargestellt.
Sorry, dass ich mich so blöd anstelle :(
Gruß
Daniela
Anzeige
AW: Makrorekorder
11.04.2022 13:28:02
Yal
Hallo Daniela,
es hat nicht mit blöd zu tun. Es ist normal, dass es hier an der Stelle klemmt und nachvollziehbar, dass Du noch nicht soweit bist.
Nach dem Du den Kopieren-Durch Wert ersetzen gemacht hast, sind alle Zelle der Spalte von Excel als "Inhalt" vermerkt, nicht mehr als Formeln.
Du musst es reaktivieren. Es geht in dem Du jede einzelne Zelle im Editiermodus öffnest (F2) und wieder ohne Änderung schliesst (Enter). Aber am schnellsten mit

Columns("L:L").TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, Tab:=True
direkt VOR dem End Sub.
Was ist das? es ist die Funktion "Text in Spalten", die im Menü "Daten" zu finden ist, mit Tab als Trennzeichen.
Was macht es? da es keine Tab in den Einträge in Spalte L, hat es keine andere Auswirkung, als alle Zellen der Spalte zu re-evaluieren. So werden die Formeln als Formeln wahrgenommen.
VG
Yal
Anzeige
AW: Makrorekorder
11.04.2022 14:24:14
Daniela
Hallo Yal,
ok, da hätte ich selbst drauf kommen können. Text in Spalten benutze ich in meinen Makros auch, um Zahlen als Zahlen zu konvertieren, wenn ich sie aus Texten kopiere.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Danke dafür!
Allerdings weiß ich leider noch immer nicht, wo ich das einsetze:
Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)"
Nur das ersetzen durch meine Aufrunden-Formel mit Bezug auf RC1 funktioniert nicht, da er sich dann die Zelle RC1 sucht und das natürlich immer Null ist, weil meine Liste bei weitem nicht so groß ist.
Gebe ich das so ein, läuft es auf Fehler:
Selection.Subtotal GroupBy:=7, Function:=xlSum, TotalList:=Array(1, 12, 19) _
, Replace:=True, PageBreaks:=True, SummaryBelowData:=True
Columns("L:L").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("L:L").Select
Selection.Replace What:="0", Replacement:=Cells(i, "L").FormulaR1C1 = "ROUND(RC1/4;0)", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Columns("L:L").TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, Tab:=True
End Sub
Verzweifelte Grüße
Daniela
Anzeige
AW: Makrorekorder
11.04.2022 15:42:06
Rudi
Hallo,

Selection.Subtotal GroupBy:=7, Function:=xlSum, TotalList:=Array(1, 12, 19) , _
Replace:=True, PageBreaks:=True, SummaryBelowData:=True
With Columns(12)    'L
.Copy
.pastespecial xlpastevalues
.Replace What:="0", Replacement:=vbnullstring, LookAt:= xlWhole
.specialcells(xlcelltypeblanks).FormulaR1C1 = "=ROUND(RC1/4,0)"
End With
End Sub
Gruß
Rudi
AW: Makrorekorder
11.04.2022 17:41:09
Daniela
Hallo Rudi,
danke für Deine Lösung.
Ich habe das in einem neuen Modul versucht und es funktioniert. Wenn ich es allerdings in mein bestehendes Makro einfügen möchte, dann bekomme ich folgende Fehlermeldung beim Ausführen:
Laufzeitfehler '1004':
Die Subtotal-Methode des Range-Objektes konnte nicht ausgeführt werden.
Ich habe vorher nur Spalte L als Werte eingefügt, da die Zahlenwerte aus einer Teilergebnisformel stammen. Bis dahin läuft es richtig durch.
Dann Deinen Teil eingefügt:

Columns("L:L").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.Subtotal GroupBy:=7, Function:=xlSum, TotalList:=Array(1, 12, 19), _
Replace:=True, PageBreaks:=True, SummaryBelowData:=True
With Columns(12)    'L
.Copy
.PasteSpecial xlPasteValues
.Replace What:="0", Replacement:=vbNullString, LookAt:=xlWhole
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=ROUND(RC1/4,0)"
End With
End Sub
Kannst Du mir daran erkennen, was ich falsch gemacht habe?
Danke schonmal!
Viele Grüße
Daniela
Anzeige
Hab den Fehler gefunden - owT
12.04.2022 09:22:25
Daniela
Gruß
Daniela

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige