Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1276to1280
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

Franz:Tab mit Wertebereich rechnen + Result loggen

Franz:Tab mit Wertebereich rechnen + Result loggen
Christian
Hallo Franz,
vielen Dank für deine Antwort. Leider war der Thread schon archiviert, so dass ich das Thema noch einmal als neuen Beitrag reinstelle. (Die Emailbenachrichtigung deiner Antwort hatte mich nicht erreicht.)
Einige der von dir skizzierten Möglichkeiten sind schon verlockend. Wusste gar nicht, dass so was geht (-:
Es wäre natürlich genial, wenn die Eingaben und die Ausgaben in einem separaten Excel-file stattfinden. Damit ist dann fast unbegrenzte Flexibiltät der Anwendung ohne ständiges copy-pasten des VBA codes gegeben.
Der Einfachheit halber würde ich lieber keine userforms verwenden, sondern einfache Eingaben in Zellen präferieren.
Zu der Anzahl der Variablen reicht erst mal eine. Da ich selber auch gerne bastle, würde mir als Start diese Grund-Version erstmal reichen. Auf Basis eines funktionierenden Codes, kann ich dann ja immer noch weiter ausbauen, wenn der Bedarf entsteht.
Wichtige wäre noch, dass die Zielwert-Suche auf älteren Rechnern zu Abstürzen führte. Ich vermute, dass die Tabelle zu komplex war und die Berechnung nicht so schnell erfolgen konnte, wie die Zielwertsuche die Eingabewerte variiert. Wie kann man daher nach jedem Durchlauf eine kurze Pause programmieren, damit der Prozessor nachkommt?
Ich hoffe, der Thread wird noch einmal aufgegriffen.
Schon mal die besten Grüße und Danke,
Christian
_______________________________________________________________________________
Liebe Excelianer,
folgende Aufgabe möchte ich automatisieren:
Ich muss immer mal wieder Vergleichsrechnungen in großen Tabellen anstellen, in denen sich meist nur 1 Wert ändert.
Bisher habe ich jedesmal den Wert geändert, Ergebnis notiert, neuer Wert, wieder notiert u.s.w.
Nun möchte eine Routine schreiben, mit der ich:
1. Festlegen kann in welcher Zelle der Wert geändert werden soll.
2. Mit welchem Startwert ich anfangen will.
3. Festlegen in welchem Intervall (z.B. 1 bis 10 in 2erschritten) der Wert geändert werden soll
4. Festlegen welche Ergebniszelle ausgelesen werden soll.
5. Festlegen in welcher Zelle beginnend das ausgelesene Ergebnis geschrieben werden soll und
5. Den Durchlauf starten und nach jedem Durchlauf das ausgelesene Ergebnis untereinander in eine Spalte loggen kann.
Ich habe bereits einen ganz ähnlichen Code zusammengefunden, der in etwa das macht, was ich auch brauche, jedoch nur weniger flexibilät. Ich muss zugeben, dass ich es aber nicht so hinbekomme, wie es am Ende aussehen soll.
Ich würde mich freuen, wenn jemand ein paar Ideen dazu hat. Der Basiscode steht unten:
Sub PPA_Sensitivity(s_type, S_IRR, i_first_row, S_output_variable, S_output_result)
Dim s_set_value As String
Dim S_sheet As String
Dim i_set_row As Integer
Dim S_equ As String
Dim A_results(1000, 2) As Variant
Dim i_numloop As Integer
Dim II As Integer
Dim b_is_array As Boolean
Dim S_Original_location As String
'clear the contents of the results sheet for the rows to be reported
Sheets("Sensitivity Results").Select
Range(S_output_variable + "3:" + S_output_result + "10000").Select
Selection.ClearContents
i_set_row = i_first_row
S_equ = S_IRR
S_sheet = "Sensitivity analysis"
'select sensitivity sheet
Sheets(S_sheet).Select
'Turn off all the autofiltering
Sheets(S_sheet).AutoFilterMode = False
'find the original location of the data
S_Original_location = Right(Worksheets(S_sheet).Range("B" + CStr(i_set_row)).Formula,
Len(Worksheets(S_sheet).Range("B" + CStr(i_set_row)).Formula) - 1)
'store the set value in an internal variable for later usage.
b_is_array = Worksheets("Project Data").Range(S_Original_location).HasArray
s_set_value = Worksheets("Project Data").Range(S_Original_location).Formula
'Calculate the number loops that need to be made
i_numloop = CInt((Worksheets(S_sheet).Range("B" + CStr(i_set_row + 2)).Value -
Worksheets(S_sheet).Range("B" + CStr(i_set_row + 1)).Value) / Worksheets(S_sheet).
Range("B" + CStr(i_set_row + 3)).Value)
'write the variable in question to the results sheet
If s_type = "IRR" Then
Worksheets("Sensitivity Results").Range(S_output_result + CStr(2)).Value = "IRR"
End If
For II = 0 To i_numloop
A_results(II, 0) = Worksheets(S_sheet).Range("B" + CStr(i_set_row + 1)).Value +  _
Worksheets(S_sheet).Range("B" + CStr(i_set_row + 3)).Value * II
'put the current value in the cell on the project description page
Worksheets("Project Data").Range(S_Original_location).Value = A_results(II, 0)
Calculate
A_results(II, 1) = Worksheets("Cash Flow").Range(S_equ).Value
'Write the data to the results sheet
Worksheets("Sensitivity Results").Range(S_output_variable + CStr(II + 3)).Value =   _
A_results(II, 0)
Worksheets("Sensitivity Results").Range(S_output_result + CStr(II + 3)).Value =   _
A_results(II, 1)
Next II
'Now put the original value back into the project data sheet
If b_is_array Then
Worksheets("Project Data").Range(S_Original_location).FormulaArray = s_set_value
Else
Worksheets("Project Data").Range(S_Original_location).Value = s_set_value
End If
End Sub

_______________________________________________________________________________
Hallo Christian,
im Prinzip keine große Affäre.
Allerdings braucht es noch ein wenig Strategie.
Mein Vorschlag wäre, dass du ein separates Tabellenblatt anlegst, in dem die erforderlichen Eingaben gemacht werden.
Die Eingabe könnte man auch in einem Userform machen. Das ist etwas Geschmackssache.
Ein Tabellenblatt ist geringfügig einfacher zu handhaben und programmieren - insbesondere für Anfänger.
Die Ergebnisliste könnte man im gleichen Blatt ausgeben oder jeweils auf einem eigenen Tabellenblatt. Da muss du festlegen, was für dich besser passt.
Eine weitere entscheidende Festlegung:
Willst du das Eingabeblatt jeweils als zusätzliches Blatt in den Dateien mit den Berechnungs-Tabellenblättern einfügen oder ist dir eine externe Datei lieber, in der die Datei/Tabellenblatt ausgewählt werden kann in der die Varianten berechnet werden soll. Die externe Variante hat natürlich den Vorteil, dass deine bestehenden Dateien ohne Makros und im Prinzip unverändert bleiben.
Ich muss immer mal wieder Vergleichsrechnungen in großen Tabellen anstellen, in denen sich meist nur 1 Wert ändert. Du schreibst "meist". Wenn es vorkommt, dass mehr als 1 Wert variert werden soll, dann sollte das direkt berüchsichtigt werden. Soll dann auch die 2. Zelle in einer Schleife schrittweise geändert werden? Wie groß ist den die max. Anzahl der zu varierenden Zellen?
Überleg dir mal wie du es gerne hättest.
Gruß
Franz
___________________________________________________________________________________

Tabelle mit Wertebereich rechnen + Result loggen
11.09.2012 18:33:25
fcs
Hallo Christian,
hier eine Datei zur Steuerung der Berechnung von Variationen.
https://www.herber.de/bbs/user/81799.xlsm
Integriert sind
- Dateiauswahl
- Blattauswahl
- Parameter-Eingabe für 1 Ergebniszelle und 1 bzw. 2 änderbare Zellen.
Das Blatt "Muster" ist die Basis für die Datenausgabe. Hier kannst du auch noch Formatierungen und Basistexte anpassen.
Es wird vor jeder Variationsberechnung in eine Zielmappe kopiert.
Alte/leistungsschwache Rechner:
Der Berechnungsmodus wird vom Makro generell auf Manuell gesetzt.
Nach dem Eintragen der Werte wird immer das Tabellenblatt mit den Formeln neu berechnet.
Trotzdem kann Excel bei aufwendigen Berechnungen (z.B. Matrixformeln über große Zellbereiche) in die Knie gehen - speziell wenn der Arbeitsspeicher etwas knapp ist und große Datenmenge auf die Festplatte ausgelagert werden müssen.
Gruß
Franz

Anzeige
AW: Tabelle mit Wertebereich rechnen + Result loggen
12.09.2012 10:05:09
Christian
Hallo Franz,
cooles Teil. Das ist ja ein ganz schöner Codeblock. Da versuch ich mal durchzusteigen.
Freue mich schon, das ganze morgen auszuprobieren.
Melde mich wie es funktioniert.
Bis dahin viele Grüße und Dank,
Christian

AW: Tabelle mit Wertebereich rechnen + Result loggen
13.09.2012 14:57:49
Christian
Hallo Franz,
ich probiere jetzt schon eine ganze Weile rum, habe aber immer die Meldung beim compilieren: Else ohne IF
und zwar im Modul Varianten an dieser Stelle:
MsgBox "Fertig"
Else
MsgBox "Das in " & wksSteuer.Range("Tabelle_Q").Address
Liegts an mir?
Viele Grüße,
Christian

Anzeige
AW: Tabelle mit Wertebereich rechnen + Result loggen
13.09.2012 15:46:22
Christian
Hallo Franz,
habs hinbekommen. Irgendwo war ein Bedingungsende nicht definiert.
Das Toll funktioniert jetzt super - aber nur bei kleinen Tabellen. Bei sehr großen Tabellen schafft Excel es nicht schnell genug zu rechnen und in der Ergebnistabelle stehen immer die gleichen unveränderten Zahlen.
Kann man das Makro noch weiter verlangsamen?
Viele Grüße,
Christian

AW: Tabelle mit Wertebereich rechnen + Result loggen
14.09.2012 00:14:03
fcs
Hallo Christian,
sind die Formeln, die nach dem Ändern der Eingaben, eine Neuberechnung ergeben sollen auf mehrere Tabellenblätter verteilt?
Wenn ja, dann ersetze im Code "wksCalc.Calculate" durch "Application.Calculate" dann sollte es funktionieren.
Calculate sorgt für eine Neuberechnung und das Makro wartet ab, bis diese abgeschlossen ist.
Calculate bezieht sich aber immer auf den vorgegebenen Bereich.
Pausen im Code einbauen bringt nichts, weil Excel dann garnichts mehr macht sondern eben eine Pause.
Gruß
Franz

Anzeige
GELÖST: Tabelle mit Wertebereich rechnen + Re
17.09.2012 10:42:19
Christian
Hallo Franz,
genau so ist es. Jetzt läuft es rund.
Vielen Dank für deine Hilfe, die es absolut auf den Punkt gebracht hat.
Beste Grüße,
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige