Hallo Robert,
ich habe mal eine Prüfroutine für deine Formeln gebastelt. Dabei wird die erste Zahl in der Formel so lange um 1 erhöht, bis das Ergebnis größer Null ist:
Sub groesserNull()
Dim lngZeile As Long
Dim lngSpalte As Long
Dim strFormel As String
Dim arrFormel() As Variant
Dim lngZaehler As Long
Dim i As Long
'alle Zeile in Spalte Ddurchlaufen
For lngZeile = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
'Prüfen, ob etwas in Spalte D steht
If IsEmpty(Cells(lngZeile, 4)) = False Then
'Zaehler auf Null zurücksetzen
lngZaehler = 0
'String für Formel leeren
strFormel = ""
'Schleife für das Suchen des Endes der Formel =
Do Until Cells(lngZeile, 4 + lngZaehler).Value = "="
lngZaehler = lngZaehler + 1
Loop
'letztes Zeichen = nicht mit einlsen
lngZaehler = lngZaehler - 1
'nun die Spalten einlesen
arrFormel = Range(Cells(lngZeile, 4), Cells(lngZeile, 4 + lngZaehler))
'und Formel zusammenbauen
For i = LBound(arrFormel, 2) To UBound(arrFormel, 2)
strFormel = strFormel & arrFormel(1, i)
Next i
'nun prüfen ob Formel größer Null
If Evaluate(strFormel) < 1 Then
'nun Schleife, die den ersten Wert so lange erhöht, bis das Ergebnis größer Null ist
Do Until Evaluate(strFormel) > 0
'ersten Wert erhöhen
arrFormel(1, 1) = arrFormel(1, 1) + 1
'und Formel neu zusammenbauen
strFormel = ""
For i = LBound(arrFormel, 2) To UBound(arrFormel, 2)
strFormel = strFormel & arrFormel(1, i)
Next i
Loop
'dann den neuen Wert für Spalte D in Tabelle schreiben
Cells(lngZeile, 4) = arrFormel(1, 1)
End If
End If
Next lngZeile
End Sub
Du kannst das Makro in ein allgemeines Modul deiner Arbeitsmappe kopieren.
Am Ende des Codes, mit dem du deine Zufallszahlen generierst kannst du (vor End Sub) die folgende Zeile einfügen:
Call groesserNull
Dann wird das Makro automatisch aufgerufen.
Bei dem Makro gehe ich davon aus, dass die erste Zahl der Formel immer in Spalte D steht.
Gruß
M.O.