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

Formel über VBA ausführen?!

Formel über VBA ausführen?!
30.11.2021 12:01:08
maylmz
Hallo zusammen,
ich stehe gerade vor folgendem Problem:
in meiner Datei gibt es in sehr vielen Zellen Unmengen an Formeln (Verweise/Vergleiche/Wenn/Wahl usw.. ) wodurch das "manuelle" überschreiben der Zellen ziemlich träge ist.
Nun zu meiner Frage an die ganzen Excel Profis:
Gibt es die Möglichkeit Formeln über VBA laufen zu lassen ohne es in die Zellen zu schreiben? Meine Hoffnung ist, dass das manuelle überschreiben der Zellen hierdurch flüssiger wird?!
Über Recorder kann ich meine Formel einer beliebigen Zelle aufnehmen. Beim Ausführen schreibt er mir diese aufgenommene Formel in meine Zelle rein und gibt dann den Wert raus. Meine Vorstellung ist, Makro mit Formel ausführen und Inhalt rausgeben statt die Formel in die Zelle zu schreiben.
So sieht einer der aufgenommenen Formeln aus:

Sub Test()
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(RC2=""A"",CHOOSE(MID(""442222244111114433333"",1+MOD(R4C,21), 1), ""f"",""sp"",""n"",""""),IF(RC2=""B"",CHOOSE(MID(""443333344222224411111"",1+MOD(R4C,21), 1), ""f"",""sp"",""n"",""""),IF(RC2=""C"",CHOOSE(MID(""441111144333334422222"",1+MOD(R4C,21), 1), ""f"",""sp"",""n"",""""),IF(RC2=""D"",CHOOSE(MID(""22111112211111"",1+MOD(R4C,14), 1), ""f"",""""),IF(" & _
"RC2=""E"",CHOOSE(MID(""442222244111114444444"",1+MOD(R4C,21), 1), ""f"",""sp"",""n"",""""),IF(RC2=""F"",CHOOSE(MID(""441111144444444444444"",1+MOD(R4C,21), 1), ""f"",""sp"",""n"",""""),IF(RC2=""G"",CHOOSE(MID(""33111113322222"",1+MOD(R4C,14), 1), ""f"",""sp"",""""),IF(RC2=""H"",CHOOSE(MID(""33222223311111"",1+MOD(R4C,14), 1), ""f"",""sp"",""""))))))))),"""")" & _
End Sub
Vielen Dank u. Gruß
maylmz

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel über VBA ausführen?!
30.11.2021 12:19:49
volti
Hallo,
ich habe früher auch ganze Bereiche mit riesigen Formeln per VBA gefüllt, berechnen lassen und dann durch Werte ersetzt.
Hier ein Beispiel für einen Bereich (Deine Formel ergab bei mir einen Syntaxfehler)
Code:

[Cc]

Sub Test() With Range("B1:B5") .FormulaLocal = "=A1*2" ' Formel setzen ' ActiveSheet.Calculate ' ggf. neu berechnen .Value = .Value ' Werte übernehmen End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Formel über VBA ausführen?!
30.11.2021 14:38:09
maylmz
Vielen lieben Dank, genau wie ich es mir vorgestellt hatte.
AW: Formel über VBA ausführen?!
30.11.2021 13:59:51
Yal
Hallo May,
Du kannst auch deine Monster-Formel durch eine User Defined Formula ersetzen.
Dann hast nur übrig in jede Zelle
= Schicht($B5;C$4)
Wenn Du die Fälle f, sp, n und leer so arrangiert, dass immer das gleich ist, u.a. in dem Du den Fall "Leer" immer an erste Stelle hast, dann hast keine Ausnahme mehr.
Die UDF sieht dann so aus:

Public Function Schicht(ZeilenWert, Spaltenwert) As String
Dim ref As String
Select Case ZeilenWert
Case "A": ref = "002222200111110033333"
Case "B": ref = "003333300222220011111"
Case "C": ref = "001111100333330022222"
Case "D": ref = "00111110011111"
Case "E": ref = "002222200111110000000"
Case "F": ref = "001111100000000000000"
Case "G": ref = "00111110022222"
Case "H": ref = "00222220011111"
End Select
Schicht = Array("", "f", "sp", "n")(Mid(ref, 1 + Spaltenwert Mod Len(ref), 1))
End Function
Ein Array startet mit Position 0.
Da Leer jetzt vorn, sind die 2 in Fall "D" jetzt null, die 3 in Fälle G und H null und in den restlichen sind die 4 jetzt null.
Wäre übrigens Spätchicht "sp" nicht 2 sondern einstellig und "nicht im Einsatz" ein Punkt anstatt leer, könntest Du direkt die 3- bzw 2-wochigen Referenz so schreiben:

..nnnnn..sssss..fffff
was auch lesbarer wäre.
Dann könntest Du direkt diese Schicht-Wellen in einem 2 spaltigen Bereich ablegen und die Formel würde so aussehen
=TEIL(SVERWEIS($B5;;2;0);REST (C$4; LÄNGE(SVERWEIS($B5; ;2;0))+1;1)
Man könnte auch die 21-stelligen Listen verdoppeln und die 14-stelligen verdreifachen, dann könnte man alles als Rest von Div durch 42 rechnen...
VG
Yal
Anzeige
AW: Formel über VBA ausführen?!
30.11.2021 16:11:55
Yal
... dementsprechend würden es so aussehen:

Public Function Schicht(ZeilenWert, Spaltenwert) As String
Dim ref As String
Select Case ZeilenWert
Case "A": ref = "..sssss..fffff..nnnnn"
Case "B": ref = "..nnnnn..sssss..fffff"
Case "C": ref = "..fffff..nnnnn..sssss"
Case "D": ref = "..fffff..fffff"
Case "E": ref = "..sssss..fffff......."
Case "F": ref = "..fffff.............."
Case "G": ref = "..fffff..sssss"
Case "H": ref = "..sssss..fffff"
End Select
Schicht = Mid(ref, 1 + Spaltenwert Mod Len(ref), 1)
End Function
wenn der "sp" Dir sehr sehr lieb ist, dann so:

Public Function Schicht(ZeilenWert, Spaltenwert) As String
Dim ref As String
Select Case ZeilenWert
Case "A": ref = "..sssss..fffff..nnnnn"
Case "B": ref = "..nnnnn..sssss..fffff"
Case "C": ref = "..fffff..nnnnn..sssss"
Case "D": ref = "..fffff..fffff"
Case "E": ref = "..sssss..fffff......."
Case "F": ref = "..fffff.............."
Case "G": ref = "..fffff..sssss"
Case "H": ref = "..sssss..fffff"
End Select
Schicht = Replace(Mid(ref, 1 + Spaltenwert Mod Len(ref), 1), "s", "sp")
End Function
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige