Hallo Sabine,
du setzt am Ende jedes Durchlaufs intZeile wieder auf 8, während du die Spalten hochzählst. Deshalb werden nur die obersten Zellen erfasst. Du musst also eine zweite Schleife in die erste einschießen, in der du die Zeilen durchläufst. In der Zeile If .Cells(intZeile).Value = "" Then fehlt die Angabe für die Spalte. Der Code dürfte einen Syntaxfehler ergeben.
Ich kenne deine Anforderungen nicht, aber ich vermute, dass du Wertetabellen für Funktionen erzeugen willst. Bist du dir dann sicher, dass zwischen zwei Nullstellen nur ein Extrema liegt? Das ist im Allgemeinen nicht der Fall. Betrachte z.B. y=x^4-2*x*x-2.
Bei einer nummerischen Berechnung bleibt wohl nichts anderes übrig, als die Differenzen eines Wertes zu dem vorhergehenden und nachfolgenden Punkt zu prüfen und beim Umschlagen des Vorzeichens auf ein Minimum oder Maximum zu schließen. Es ist aber nicht sicher, dass du alle Extrema so erwischt, weil dieses wiederum von der Intervallbereite und der Funktion abhängt. Z.B. wird y=sin(1/x) für x gegen 0 immer Probleme bereiten.
Ich habe hier ein Makro zum Auffinden von Nullstellen etc., das ich im Wesentlichen nur hinsichtlich der Markierung der Nullstellen angepasst habe. Es bezieht sich auf das aktive Tabellenblatt. Di wirst es vielleicht noch anpassen müssen. Mit zwei Do-Loop-Schleifen wäre es auch gegangen. Kleiner und größer musst du durch die entsprechenden Zeichen ersetzen (damit gibt es hier oft Probleme).
Sub max_min()
Zeile1 = 8
Spalte1 = 2
farbemax = 3
farbemin = 5
Cells.Interior.ColorIndex = xlNone
For j = Spalte1 To Cells(8, Columns.Count).End(xlToLeft).Column'letzte beschrieben Spalte
s = Sgn(Cells(Zeile1 + 1, j) - Cells(Zeile1, j))'Vorzeichen, Prüfung für die erste Zelle (Rand)
If s = 0 Then'wenn Beginn mit 0, muss man sehen, wohin sich die Fkt entwickelt
For i = Zeile1 To Cells(Rows.Count, j).End(xlUp).Row - 1'letzte beschrieben Zeile -1
t = Sgn(Cells(i + 1, j) - Cells(i, j))
If t <> 0 Then Exit For
Next i
If i Zeile1 Then
Cells(i, j).Interior.ColorIndex = Cells(i - 1, j).Interior.ColorIndex
End If
End Select
Next i
Next j
End Sub
Das Speichern von Werten in einer Tabelle geht mit
sheets("TabellenblattnameZiel").Cells(Zeile,Spalte)=....
Noch ein Hinweis: Wenn du ein Problem mit der Syntax eines speziellen Excel-Befehls wie z.B. das Einfärben einer Zelle oder der Schrift in der Zelle (beides sind Farbmarkierungen!) hast, empfehle ich dir, als ersten Schritt ein solches Teilmakro aufzuzeichnen. Damit erhälst durch meisten einen Ansatz zum weiteren Vorgehen.
Gruß
Holger
Sabine schrieb am 17.06.2009 23:00:23:
Nullstellen, Maxima, Minima
Hallo,
mit folgendem Makro wollte ich eigentlich Nullstellen (fett) und dazwischen Maxima (rot) und Minima (blau) in allen Arbeitsblättern einer Excel-Datei (Excel 2007) markieren. Dummerweise läuft es in der obersten Zeile der mehrspaltigen Tabelle einmal quer durch obwohl doch meines Erachtens nach die zweite If-Anweisung sagt, dass die Spalte erst gewechselt werden soll, wenn eine Leere Zelle erreicht wird also am Ende der Spalte.
Wo liegt der Fehler und wie erkläre ich, dass zwischen zwei Nullstellen das Maximum bzw. Minimum markiert werden soll.
Wie lagere ich die gefundenen Nullstellen, Maxima und Minima mit ihren Koordinaten zur Weiterverarbeitung in eine separate Tabelle aus.
Meine Kenntnisse in VBA sind auf Anfänger-Niveau, so dass ich mich über jede Hilfe freuen würde.
Vielen Dank
Sabine
Sub Vorzeichenwechsel_Max_Min_Markieren()
Dim intZeile As Integer
Dim nextZeile As Integer
Dim intSpalte As Integer
With Tabelle8
intZeile = 8
nextZeile = 9
intSpalte = 2
Do Until .Cells(intZeile, intSpalte).Value = ""
If .Cells(intZeile, intSpalte).Value >= 0 And _
.Cells(nextZeile, intSpalte).Value <= 0 Then
.Cells(intZeile, intSpalte).Font.Bold = True
End If
intZeile = intZeile + 1
nextZeile = nextZeile + 1
If .Cells(intZeile).Value = "" Then
intZeile = 8
intSpalte = intSpalte + 1
End If
Loop
End With
End Sub
|