Anzeige
Archiv - Navigation
1048to1052
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

VBA - Berechnung ohne Formeleintrag

VBA - Berechnung ohne Formeleintrag
18.02.2009 02:59:00
kasi
Hallo liebe Excelprofis,
im Grunde bin ich jemand der lieber allein etwas herausfindet als jemanden um Hilfe zu bitten, aber ich weiß jetzt einfach nicht weiter :-(
Nach 6 Tagen rumforschen in allen möglichen Foren geb ich mich geschlagen und will nun doch hier fragend mein Glück versuchen...
wie ich so oft gelesen hab, ist das erste Problem das Problem zu schildern. Ich versuch mich mal daran und hoffe es gelingt halbwegs verständlich...
Kurze Erklärung:
Das gesamte Projekt umfasst jetzt etwa 18.000 Formeln - und da ist Exel so langsam geworden das es keinen Spaß mehr macht :-( bei jedem einzelnen Klick fängt Excel an das komplette Projekt zu berechnen...
Somit muss ich wohl nun doch auf etwas ausweichen wovon ich keine Ahnung hab :-(
Ich möchte einen Großteil der Formeln durch eine VBA Berechnung ersetzen.
Was will ich machen:
Ich möchte erreichen, dass in VBA eine Berechnung durchgeführt wird - aber nur das Ergebnis ausgewiesen wird - ohne Formel... davon gibt es schon genug...
Status:
R38 fragt via Summeprodukt C38 nach AH38 ab und gibt das Ergebnis aus
=SUMMENPRODUKT((D$38:D$300)*($C$38:$C$300=$AH38)*1)
Gleiches geschieht in W38
=SUMMENPRODUKT((I$38:I$300)*($H$38:$H$300=$AH38)*1)
sowie in AB38
=SUMMENPRODUKT((N$38:N$300)*($M$38:$M$300=$AH38)*1)
in AL38 werden alle Ergebnisse summiert
=SUMME(R38;W38;AB38)
AO38 überprüft nun ob in AL38 ein Ergebnis passend zur Abfrage AH35 steht
=WENN(AL38=0;"";AH38)
somit entsteht in AH eine Liste mit Ergebnissen - allerdings mit Lücken
über ein VBA, was ich Gottseidank bei meiner Suche gefunden hab, kann ich diese Liste viel luxuriöser als mit meiner Formellösung sortieren:

Sub kasi()
Range("AO38:AO833").Select
Selection.Copy
Range("AP38").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Sort Key1:=Range("AP38"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("AQ38").Select
End Sub


AQ38 weist jetzt dieser sortierten Liste die berechneten Ergebnisse aus AL38 zu
=SVERWEIS(AP38;$AH$38:$AL$833;5;FALSCH)
Was soll geändert werden:
Um Excel wieder auf erträgliche Wartezeit zu bringen, möchte ich die Summeprodukt (bzw die vorher von mir verwendete Summewenn) Formeln als VBA ausführen - vielleicht sogar gleich noch die Summierung der drei Summeprodukt (Summewenn) Formeln aus AL38? Das wär natürlich Oberluxus...
Wenn ich das mit dem Macrorecorder aufnehme kommt folgendes raus:


Sub kasi2()
'   ActiveCell.FormulaR1C1 = "=SUMIF(R38C3:R300C4,RC[16],R38C4:R300C4)"
Range("R39").Select
Range("R38").Select
Selection.AutoFill Destination:=Range("R38:R833")
Range("R38:R833").Select
Range("R38").Select
End Sub


soweit so gut - nur bin ich jetzt wieder genau da, wo ich vorher war - es stehen Formeln da...
ich möchte doch aber nur das Ergebnis :-(
jetzt könnte ich natürlich mit einem "die Ergebnisse kopieren, neue Zelle aufrufen, Werte einfügen, Formeln wieder löschen" Makro das ganze lösen. Aber das ist doch nicht richtig... das muss doch irgendwie anders gehen...
Hilfe :-(
*auf-knien-rumrutsch* kann mir bitte jemand den richtigen Weg zeigen?
In Hoffnung auf eine rettende Hand
lg kasi

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ein paar Grundsätze...
18.02.2009 10:03:00
Renee
Hi Kasi,
Zitat: bei jedem einzelnen Klick fängt Excel an das komplette Projekt zu berechnen...
Das kannst du über die Extras - Optionen - Berechnung - Manuell, verhindern. Excel berechnet dann nur noch, wenn du entweder F9 drückst, oder ggf. beim Speichern neu berechnen. Natürlich könntest du das auch über ein Makro steuern, z.B. so:

Sub BerechnungUmschalten()
Application.Calculation = IIf(Application.Calculation = xlCalculationManual, _
xlCalculationAutomatic, xlCalculationManual)
End Sub


Denn Zustand der Berechnung siehst du in der Statusbar:
Bereit heisst alles ist berechnet.
Bereit Berechnen heisst es wurden Änderungen vorgenommen und noch nicht neu berechnet, also ggf. F9 drücken, wenn eine Berechnung erwünscht ist.
Zitat: Ich möchte einen Großteil der Formeln durch eine VBA Berechnung ersetzen.
Grundsätzlich dauert eine Berechnung in VBA IMMER LÄNGER als eine reine Formellösung. Natürlich hast du recht mit dem Ansatz: Formelresultate durch Werte zu ersetzen (wie in deinem Codeschnipsel 1 beschrieben). Nach deinem Codeschnipsel 2 (Bereich mit Formeln füllen, müsstest du also wieder die Formeln mit Werten ersetzen, also nach dem Schema:


...Bereich mit Formeln füllen... (Codeschnipsel 2)
Application.Calculate
...Bereich kopieren und Inhalte (Werte) einfügen... (Codeschnipsel 1)


GreetZ Renée

Anzeige
AW: VBA - Berechnung ohne Formeleintrag
18.02.2009 10:37:00
Luschi
Hallo kasi,
die Ausführungen von Renée sind völlig korrekt. Es gibt aber noch 2 Punkte, die gegen eine
Vba-Variante sprechen:
- nicht für jede Excel-Funktion gibt es eine paßgenaue Vba-Variante
- ändert sich die Tabellenstuktur (neuer Tabellenname, Löschen oder Hinzufügen von Zeilen und Spalten,
  Verschieben von Zellbereichen auf dem selben oder in ein neues/anderes Blatt ...)
Bei diesem 2. Punkt kann man bei der großen Anzahl von Formeln die Vba-Variante nicht mehr nachkorrigieren. Versuche beim nächsten Projekt das Ganze in Teilprojekte aufzugliedern.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA - Berechnung ohne Formeleintrag
18.02.2009 16:07:00
kasi
ooohh - Hallo Euch beiden,
erst einmal herzlichsten Dank das Ihr Euch hierzu gemeldet hab! :-)
zu den Ausführungen von Renee:
zu "manuelle Berechnung"
das mit dem manuellen Abschalten der Berechnung bzw der F9 Variante wusste ich noch nicht. Find ich ausgesprochen gut - das wäre ja eine genial einfache Lösung. Leider klappt das in diesem Fall nicht wirklich. Dazu müsste man das Projekt in der Berechnung teilen können.
Der erste und eigentliche Hauptteil beinhaltet eine Suchfunktion - die muss natürlich bei jeder Neueingabe eines Wertes automatisch berechnen.
Den zweiten Teil - das was ich hier eigentlich als VBA zu machen dachte, den müsste man bei Bedarf berechnen lassen können.
Geht sowas auch? *grübel*
zu "VBA"
da hatte ich ja mit meiner Variante, wo ich dachte es sei falsch, also doch recht?!! So macht man das tatsächlich? Die Formel mit VBA eintragen, das Ergebnis kopieren und wieder als Wert einfügen?
Aha - und ich dachte... ja ich weiß garnicht... das es irgendwie anders geht...
:-))
zu den Ausführungen von Luschi:
Das ist ein sehr wichtiger Hinweis für mich, dass nicht alle Excel Versionen gleich mit VBA umgehen. Das Projekt wird am Ende vielleicht auf ganz vielen PC laufen :-)
Von daher muss ich wohl wirklich recht sparsam mit VBA umgehen...
Was ich nicht verstehe ist der Hinweis dies in Teilprojekte zu gliedern...
Wie ist das gemeint? Wenn das Ding mal fertig ist, dann ist das ein "Programm", eine Datei, und soll auf jedem beliebigen PC (der Excel hat) funktionieren...
Nochmals danke ich Euch für die Hilfe und die Ausdauer die lange Beschreibung zu studieren :-))
lgkasi
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige