Freigeben über

Excel VBA Zahl in Zelle X Hochzählen bis wert in Zelle Y 0 ist

Anonym
2021-09-15T13:52:16+00:00

Hallo zusammen,

ich habe leider wenig VBA Erfahrung und bisherige Funde in anderen Foren konnten mir nicht helfen.

Besteht die Möglichkeit, dass in der Zelle A2 der Zahlenwert in 0,01 Schritten hochgezählt wird, bis in der Zelle G2 der Wert 0,00 erreicht ist?

Freue mich über jegliche Hilfe.

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
{count} Stimmen

3 Antworten

Sortieren nach: Am hilfreichsten
  1. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2021-09-15T17:07:07+00:00

    Leider habe ich nur das Problem, dass es beim Makro zum Laufzeitfehler kommt, da einige Zellen in der Spalte leer sind, 0 oder #WERT enthalten.

    Das ist kein Problem des Makros an sich, sondern Deines Blattes. Und das gefundene Makro kannst Du vergessen, das macht was anderes.

    Also zeichnen wir einfach mal ein Makro auf:

    Sub Makro1()
    Range("G2").Select
    Range("G2").GoalSeek Goal:=0, ChangingCell:=Range("A2")
    End Sub

    Das SELECT können wir gleich löschen, das brauchen wir nicht, bleibt nur eine Zeile über die macht alles.

    Das Range("G2") gibt ein RANGE Objekt zurück, das ersetzen wird durch eine Variable "Dim R As Range".
    Dann brauchen wir nur noch eine Schleife die alle Zeilen durchläuft "For Each R In Range("G2:G20")".

    Beim Range("A2") ersetzen wir die 2 durch die Zeile in der R gerade ist => R.Row

    Dann machen wir noch eine Prüfung ob in R überhaupt eine Formel ist "If R.HasFormula Then"

    Sub Makro1()
    Dim R As Range
    For Each R In Range("G2:G20")
    If R.HasFormula Then
    R.GoalSeek Goal:=0, ChangingCell:=Range("A" & R.Row)
    End If
    Next
    End Sub

    Und um automatisch zu ermitteln wo das Ende in Spalte G ist ersetzen wir
    Range("G2:G20")

    durch

    Range("G2", Range("G" & Rows.Count).End(xlUp))

    Das wars. Alles klar soweit?

    Andreas.

    0 Kommentare Keine Kommentare
  2. Anonym
    2021-09-15T15:48:45+00:00

    Hi,

    vielen Dank für Deine Antwort, das war schonmal ziemlich hilfreich.

    Allerdings möchte ich mehrere Zeilen gleichzeitig anpassen.

    Ich habe auch ein passendes Makro gefunden:

    Sub myGoalSeek() 
    
    Dim i As Long 
    
    Dim LRow As Long 
    
    Dim myGoal As Integer 
    
    myGoal = 0 
    
    With ActiveSheet 
    
        LRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
    
        For i = 2 To LRow 
    
            .Range("N" & i).GoalSeek Goal:=myGoal, _ 
    
                ChangingCell:=.Range("A" & i) 
    
            myGoal = myGoal + 0.01 
    
        Next 
    
    End With 
    
    End Sub 
    

    Leider habe ich nur das Problem, dass es beim Makro zum Laufzeitfehler kommt, da einige Zellen in der Spalte leer sind, 0 oder #WERT enthalten.

    Ist es möglich das nur Zellen aus der Spalte berücksichtigt werden, welche Zahlen enthalten?

    Bzw. gibt evtl. doch eine einfachere Lösung?

    Mit dem Solver ist es leider auch nicht möglich mehrere Zielzellen gleichzeitig auszuwählen.

    0 Kommentare Keine Kommentare
  3. Andreas Killer 144K Zuverlässigkeitspunkte Freiwilliger Moderator
    2021-09-15T14:31:38+00:00

    Dafür braucht es kein VBA und für eine so simple Aufgabe kann man die Zielwertsuche verwenden.
    https://support.microsoft.com/de-de/office/verwenden-der-zielwertsuche-zum-ermitteln-des-gew%C3%BCnschten-ergebnisses-durch-anpassen-eines-eingabewerts-320cb99e-f4a4-417f-b1c3-4f369d6e66c7

    Daten \ Datentools \ Was wäre wenn Analyse \ Zielwertsuche

    Und OK klicken. Für komplexere Modelle gibt es den Solver in Excel.
    https://support.microsoft.com/de-de/office/erkennen-und-l%C3%B6sen-eines-problems-mithilfe-von-solver-5d1a388f-079d-43ac-a7eb-f63e45925040

    Andreas.

    0 Kommentare Keine Kommentare