Variation von 2 Zellen über vorgegebene Werte und Ausgabe von jeweiligen Ergebnissen aus anderen Zellen in eine neue Arbeitsmappe schreiben

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von CeliMnortU.

    Variation von 2 Zellen über vorgegebene Werte und Ausgabe von jeweiligen Ergebnissen aus anderen Zellen in eine neue Arbeitsmappe schreiben

    Hallo liebe VBAler,

    ich möchte in einer Exceldatei ("Test1") durch Variation von 2 Zellen auf einem Arbeitsblatt (z.B. A4 und A5 in "Tabelle 2") mit festen Parametern (für A4: 9 Werte und für A5: 5 Werte) die jeweiligen Ergebnisse aus 4 anderen Zellen (z.B. B7:B9 und C7 in "Tabelle2") auslesen und in eine andere Arbeitsmappe ("Test2") schreiben. Bislang versuche ich mit einem Makro in "Test2" die andere Datei anzusprechen und weiß allerdings nicht, wie ich die betreffenden Zellen mehrfach ändern kann und die einzelnen Zwischenergebnisse auslesen und speichern kann. Vielleicht ist es hilfreich zu wissen, dass die Ergebnisse durch eine umfangreiche Berechnung über mehrere Tabellenblätter generiert werden.

    Hat jemand einen Ansatz, welche Funktionen mir bei der Lösung des Problems helfen könnten?

    Viele Grüße
    Alex

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub BC()
    3. Dim VarHK As Variant
    4. Dim VarNRC As Variant
    5. Workbooks.Open "C:\Eigene Dateien\Test1.xls"
    6. With Tabelle2 'Kalkulationstabelle
    7. VarHK = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A4") 'zu ändernde Zielzellen
    8. VarNRC = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A5")
    9. For VarHK = -10 To 10 Step 1 'HK Variation
    10. For VarNRC = 2700000 To 3300000 Step 100000 'NRC Variation
    11. Workbooks("Test2.xls").Worksheets("Tabelle1").Range("A1:A3") = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("B7:B9") 'Teilergebnisse in Ziel speichern
    12. Workbooks("Test2.xls").Worksheets("Tabelle1").Range("A4") = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("C7")
    13. Next VarHK
    14. Next VarNRC
    15. Workbooks("Test1.xls").Close False
    16. End With
    17. End Sub


    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Ich bin mal so frei und verwende Tags, damit dein Code lesbar wird:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub BC()
    3. Dim VarHK As Variant
    4. Dim VarNRC As Variant
    5. Workbooks.Open "C:\Eigene Dateien\Test1.xls"
    6. With Tabelle2 'Kalkulationstabelle
    7. VarHK = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A4") 'zu ändernde Zielzellen
    8. VarNRC = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A5")
    9. For VarHK = -10 To 10 Step 1 'HK Variation
    10. For VarNRC = 2700000 To 3300000 Step 100000 'NRC Variation
    11. Workbooks("Test2.xls").Worksheets("Tabelle1").Range("A1:A3") = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("B7:B9") 'Teilergebnisse in Ziel speichern
    12. Workbooks("Test2.xls").Worksheets("Tabelle1").Range("A4") = Workbooks("Test1.xls").Worksheets("Tabelle2").Range("C7")
    13. Next VarHK
    14. Next VarNRC
    15. Workbooks("Test1.xls").Close False
    16. End With
    17. End Sub

    Da wären noch ein paar Fragen:
    - Hast du 3 Workbooks? Test1, Test2 und ein drittes, wo dein Code läuft?
    - Kannst du die 3 Worksheets mit Workbook und Sheet-Name benennen?
    - Welchen Einfluss auf die Berechnung sollen die Parameter in A4 und A5 haben?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo Alex ,
    nachfolgend ein paar Tipps für deinen Code:
    1. Wenn du Zellen mit verschiedenen Werten füllen möchtest, muss die Zelle links vom Gleichheitszeichen stehen und der Wert rechts davon…

    Visual Basic-Quellcode

    1. Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A4").Value = VarHK

    2. Der Platz an dem du diesen Code einbaust, liegt üblicherweise direkt nach der for-Schleife durch die der variable Wert bestimmt wird…

    Visual Basic-Quellcode

    1. For VarHK = -10 To 10 Step 1 'HK Variation
    2. Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A4").Value = VarHK
    3. For VarNRC = 2700000 To 3300000 Step 100000 'NRC Variation
    4. Workbooks("Test1.xls").Worksheets("Tabelle2").Range("A5").Value = VarNRC

    3. Wenn du innerhalb der Schleifen immer die gleichen Zellen in Test2.xls ansprichst, überschreibst du die Werte wieder und bekommst am Ende nur die Werte der letzten Schleife
    Versuch es mal mit ActiveCell.Offset
    4. Die beiden Next-Zeilen sind falsch herum…
    Erst beendest du die innere Schleife (VarNRC) und danach erst die äußere (VarHK)

    Viel Erfolg mit deinem Projekt.
    Celi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „CeliMnortU“ ()

    Danke für eure Antworten!
    Mir ist soeben noch etwas aufgefallen. Wenn ich die Parameter in Schleifen ändere, dann habe ich auf die jetzige Art jedoch nicht alle möglichen Permutationen abgefragt, richtig? Mir fällt dazu momentan keine logische Syntax ein. Möglicherweise vorher alle Kombinationsmöglichkeiten ausgeben lassen und damit schrittweise die Kalkulation laufen lassen?

    @petaod
    Da wären noch ein paar Fragen:
    - Hast du 3 Workbooks? Test1, Test2 und ein drittes, wo dein Code läuft?
    - Kannst du die 3 Worksheets mit Workbook und Sheet-Name benennen?
    - Welchen Einfluss auf die Berechnung sollen die Parameter in A4 und A5 haben?


    - Es gibt zum einen das Ursprungsworkbook (nennen wir es "Cashflowkalkulation") und ein zweites, indem ich die verschiedenen Ergebnisse ausgegeben haben möchte
    - In "Cashflowkalkulation" auf "Tabelle2" sind A4 und A5 Parameter (HK und NRC), die geänderte Ergebnisse in B7:B9 und in C7 liefern. Ziel ist es, die Sensibilität der jeweiligen Parameter zu untersuchen

    @CeliMnortU
    3. Wenn du innerhalb der Schleifen immer die gleichen Zellen in Test2.xls ansprichst, überschreibst du die Werte wieder und bekommst am Ende nur die Werte der letzten Schleife
    Versuch es mal mit ActiveCell.Offset


    Das ist eines der Hauptprobleme. Danke für den Tipp mit ActiveCell.Offset! Bisher habe ich damit noch nicht gearbeitet und hatte an eine Lösung mit cells(i,1) und i=i+1 gedacht für jeden Durchgang in der Schleife und weiß nicht mehr genau, wie ich das einbauen kann.

    Ich bin was VBA angeht sehr eingerostet und deshalb die vielen einfachen Fehler. Danke euch für das nette und hilfreiche Feedback!

    Viele Grüße
    Alex

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „AlexSrontgorrth“ ()

    verschachtelte for-Schleifen

    Bei verschachtelten for-Schleifen läuft es wie folgt:

    - die äußere for-Schleife setzt den ersten Wert (in deinem Fall VarHK = -10)
    - die innere for-Schleife wird für jeden Wert einmal durchlaufen (hier: VarNRC von 2,7mio bis 3,3mio in 100.000er Schritten)
    - die äußere for-Schleife setzt den zweiten Wert (in deinem Fall VarHK = -9)
    - die innere for-Schleife wird für jeden Wert einmal durchlaufen (hier: VarNRC von 2,7mio bis 3,3mio in 100.000er Schritten)
    usw.

    Das bedeutet, dass du meiner Meinung nach alle Kombinationen haben solltest.