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

Formeln in Makro integrieren

Formeln in Makro integrieren
20.10.2021 21:59:20
Christian
Hallo,
ich bitte um eure Hilfe, es geht um nachfolgende Tabelle:
https://www.herber.de/bbs/user/148715.xlsm
Hintergrund meines Problems ist folgender, wen die Tabelle irgendwann mal fertig ist, erwarte ich, dass in jede der 3 Blätter zwischen 40.000 und 60.000 Zeilen stehen werden.
Entsprechend erwarte ich, dass die Formeln im Blatt Ergebnis, Spalten B, C sowie E bis Q eine sehr große Berechnungszeit haben werden.
Jetzt habe ich mir Gedanken gemacht, wie ich dem vorbeugen kann und mir sind 3 Möglichkeiten eingefallen
1. Die automatische Formelberechnung abschalten, diese Idee habe ich verworfen, da ich sie nicht für ein einzelnes Blatt sondern nur für das komplette Excel deaktivieren kann.
2. statt Formeln PQ nutzen, leider hab ich von PowerQuery zu wenig Ahnung
also blieb noch 3.
die Idee eines Makros, welches ich dann auch eher schlecht als recht, aber funktionierend umgesetzt habe.
Folgende Idee habe ich dabei versucht umzusetzen.
1. Ich schreibe die Formeln ausschließlich in Zeile 1.
2. Ich kopiere die Formeln aus B1, C1, D1 und E1 bis ans Ende der Tabelle und füge die Werte ab Zeile 2 ein, sodass die Formeln wieder nur in Zeile 1 stehen.
3. Ich sortiere die Tabelle neu (da sich durch die Berechnung zuvor die Daten in Spalte C und F geändert haben können).
4. Für den Fall dass durch das Sortieren die Formeln nicht mehr in Zeile 1 stehen, kopiere ich sie wieder in Zeile 1.
5. Mit den Formeln in F1:Q1 mache ich dasselbe wie in Punkt 2.
Lange Rede kurzer Sinn, nun meine Frage, lassen sich auch die Formeln in das Makro integrieren, sodass sie auch aus Zeile 1 draußen sind?
Wie würde das Makro dann aussehen?
Wenn jemand Ideen hat, die Formeln zu vereinfachen oder das Makro zu verkürzen natürlich auch gerne her damit.
Allerdings habe ich in den Formeln schon einige Eventualitäten eingebaut, die mit künftigen Zeilen erst noch kommen werden, wie Daten vor 1900 in Spalte F. (daher dann die +1461000 in der Datedif Formel).
Danke
Christian
PS: Für die die jetzt nur Bahnhof verstanden haben, kurz gesagt geht es mir darum, die Formeln in Ergebnis Zeile 1 ins Makro einzubauen und in dem Blatt gar nicht mehr stehen zu haben um mir damit zu sparen, dass die Formeln immer in Zeile 1 stehen müssen.
.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formeln in Makro integrieren
20.10.2021 22:30:51
Daniel
Hi
markiere dir Zelle B1 und lass dir mit folgendem Befehl die Formel im Direktfenster anzeigen:
?Replace(Selection.FormulaR1C1, """", """""")
der so angezeigte Text ist der Text, den du brauchst um die Formel per VBA zu schreiben
ins Makro kommt dann der Code:

With Sheets("Ergebnis").Usedrange
.With .Columns(2)
.FormulaR1C1 = "=hier der Text, den du oben ermittelt hast
.Formula = .Value
end With
end With
und das ganze dann wiederholt für jede Spalte.
btw, diese SVerweis-Formel =SVERWEIS(A1;Filme!A:B;2;FALSCH) kannst du folgendermaßen beschleunigen, wenn die Listen sehr lang sind:
1. sortiere die Tabelle Filme!A:B nach Spalte A aufsteigend
2. verwende dann diese Fomel: =Wenn(SVerweis(A1;Filme!A:B;1;WAHR)=A1;SVerweis(A1;Filme!A:B;2;Wahr);NV())
aufgrund der Sortierung kann man die schnellere Variante des SVerweises verwenden, was bei großen Datenmengen lohnenswert ist.
Wenn man die Formeln hinterher durch Werte ersetzt, könnte man bei dieser Formel =WENN(SVERWEIS(D1;Leute!A:C;3;FALSCH)="";"";SVERWEIS(D1;Leute!A:C;3;FALSCH)) die Wiederholung des SVerweises weglassen und ihn nur einmalig ausführen. Die 0 die bei Verweis auf eine leere Zelle entsteht, könnte man hinterher mit Cells.Replace 0, "", xlwhole auch rauslöschen.
dann spart man einen SVerweis.
Gruß Daniel
Anzeige
AW: Formeln in Makro integrieren
20.10.2021 23:24:15
Christian
Hallo Daniel,
danke erstmal für deine Mühe.
Das mit dem Direktfenster habe ich mir mal angeschaut, kannte ich bislang gar nicht. Werde mich dann morgen mal dran machen, das Makro umzubauen.
Jetzt aber erst mal Schlafenszeit, fast halb 12. Melde mich morgen wieder.
Christian
dann aber nicht mehr offen denn...
20.10.2021 23:56:20
Werner
Hallo,
....jetzt bist ja erst mal du dran.
Gruß Werner
AW: dann aber nicht mehr offen denn...
21.10.2021 09:10:19
Christian
Hallo Werner,
ok nach meinem Verständnis lasse ich das ganze offen, solange adas Problem nicht gelöst ist, sodass auch andere außer Daniel sich das Problem anschauen.
Gruß
Christian
AW: Formeln in Makro integrieren
21.10.2021 10:24:34
hary
Moin Christian
Im Bsp. Mappe 148721
Vor den with kommen keine Punkte.
zum anderen kommt hier ein Fehler.

With .Columns(12)
.FormulaR1C1 = "=WENN(ODER(C1="";F1="");"";MAX(F$1:F1))"
.Formula = .Value2
End With
Die Formel passt nicht zu R1C1. Die anderen hast du richtig geschrieben.
Habe deinen Code nicht aufgeraeumt. Formel muss anpassst werden..

Sub Makro3()
Dim loLetzte As Long, j As Long, x As Long, lC As Long
Application.ScreenUpdating = False
With Worksheets("Ergebnis").UsedRange
With .Columns(2)
.FormulaR1C1 = "=VLOOKUP(RC[-1],Filme!C[-1]:C,2,FALSE)"
.Formula = .Value2
End With
With .Columns(3)
.FormulaR1C1 = "=IF(VLOOKUP(RC[-2],Filme!C[-2]:C,3,FALSE)="""","""",VLOOKUP(RC[-2],Filme!C[-2]:C,3,FALSE))"
.Formula = .Value2
End With
With .Columns(5)
.FormulaR1C1 = "=VLOOKUP(RC[-1],Leute!C[-4]:C[-3],2,FALSE)"
.Formula = .Value2
End With
With .Columns(6)
.FormulaR1C1 = "=IF(VLOOKUP(RC[-2],Leute!C[-5]:C[-3],3,FALSE)="""","""",VLOOKUP(RC[-2],Leute!C[-5]:C[-3],3,FALSE))"
.Formula = .Value2
End With
End With
With Worksheets("Ergebnis")
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("C1:C" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("F1:F" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A1:Q" & loLetzte)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
With Worksheets("Ergebnis").UsedRange
With .Columns(7)
.FormulaR1C1 = "=IF(OR(RC[-4]="""",RC[-1]=""""),"""",IF(RC[-1]>RC[-4],0,DATEDIF(RC[-1]+1461000,RC[-4]+1461000,""Y"")))"
.Formula = .Value2
End With
With .Columns(8)
.FormulaR1C1 = "=IF(RC[-1]="""","""",IF(RC[-2]>RC[-5],0,DATEDIF(RC[-2]+1461000,RC[-5]+1461000,""YD"")))"
.Formula = .Value2
End With
With .Columns(9)
.FormulaR1C1 = "=IF(RC[-2]="""","""",IF(RC[-3]>RC[-6],0,RC[-6]-RC[-3]))"
.Formula = .Value2
End With
With .Columns(10)
.FormulaR1C1 = "=IF(OR(RC[-7]="""",RC[-4]=""""),"""",IF(COUNTIF(R1C[-6]:RC[-6],RC[-6])=1,RC[-4],""""))"
.Formula = .Value2
End With
With .Columns(11)
.FormulaR1C1 = "=IF(OR(RC[-8]="""",RC[-5]=""""),"""",RANK(RC[-5],R1C[-1]:RC[-1],0))"
.Formula = .Value2
End With
With .Columns(12)
.FormulaR1C1 = "=IF(OR(C1="";F1="");"";MAX(F$1:F1))"
.Formula = .Value2
End With
With .Columns(13)
.FormulaR1C1 = "=IF(OR(RC[-10]="""",RC[-7]="""",COUNT(R1C[-3]:RC[-3])"""",RC[-4]""""),DATEDIF(RC[-1],RC[-11],""Y""),"""")"
.Formula = .Value2
End With
With .Columns(15)
.FormulaR1C1 = "=IF(AND(RC[-4]"""",RC[-5]""""),DATEDIF(RC[-2],RC[-12],""YD""),"""")"
.Formula = .Value2
End With
With .Columns(16)
.FormulaR1C1 = "=IF(AND(RC[-5]"""",RC[-6]""""),RC[-13]-RC[-3],"""")"
.Formula = .Value2
End With
With .Columns(17)
.FormulaR1C1 = "=IF(RC[-6]
gruss hary
Anzeige
AW: Formeln in Makro integrieren
21.10.2021 10:53:49
Christian
Hallo Hary,
vielen Dank, jetzt funktioniert es. Bin ja schon froh nicht vollkommen auf dem Holzweg gewesen zu sein.
Aber vor einer Frage stehe ich trotzdem noch.
Mal gemäß dem Fall, ich sehe irgendwann in dem Leben dieser Mappe nochmal Bedarf, eine Formel zu ändern, wie bekomme ich die R1C1 Version der Formel denn wieder umgewandelt in die "normale" Art?
Gruß
Christian
AW: Formeln in Makro integrieren
21.10.2021 11:05:31
hary
Moin
Ganz einfach, nimm FormulaLocal. Dann wird die deutsche Formelschreibweise erwartet.
Bsp.

With .Columns(12)
.FormulaLocal = "=WENN(ODER(C1="""";F1="""");"""";MAX(F$1:F1))"
.Formula = .Value2
End With
gruss hary
Anzeige
AW: Formeln in Makro integrieren
21.10.2021 11:44:25
Christian
Hallo Daniel,
warum schlägst du mir dann diese so umständliche Art vor, es umzusetzen?
Danke Hary für den Hinweis
Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige