ich habe mal wieder ein hoffentlich kleines Excel-Problem, wofür ich eine Lösung brauche.
Folgende Ausgangslage:
Spalte A = laufende Nummer von 1 bis ~ (z.Zt. 1235)
Spalte B = Vergleichswerte (Format Standard). Diese kommen aus einer anderen Datei (Import)
Ich benötige jetzt ein Makro VBA, welches folgende Prüfung vornimmt: alle Zeilenwerte mit Zeilenwert drüber und Zeilenwert drunter vergleichen und bei Ungleichheit ein # vor die laufende Nummer in Spalte A setzen.
Hier ein Beispiel
Spalte A Spalte B
1 11 12311
2 12 12311
3 13 17456
du schreibst " Das Makro soll die Spalte B durchprüfen und immer ein # in die Spalte A vor die Zahl setzen in der Zeile, wo eine Anomalie auftritt. Allerdings nicht wenn die Werte sich normal ändern, wie in Zeile 4 zu 5."
Meinst du damit die Markierung soll nur gesetzt werden wenn der Wert ungleich dem Wert in der Zelle darüber UND der Zelle darunter ist, oder was meinst du mit „normal ändern“
ja mit dem „UND“ ist eine gute Formulierung. Es handelt sich um große Datenmengen, die importiert werden. Jetzt macht die Messtechnik irgendein Fehler. Die Technikabteilung arbeitet mit Hochdruck daran, diesen Fehler zu analysieren, aber es gibt noch kein Ergebnis. Jetzt müssen die bisher erstellten Protokolle für den weiteren Arbeitsprozess verwendet werden. Es gibt also Kolonnen mit richtigen Zahlen (gleiche Werte) Dazwischen kommt dann eine Zeile mit einem falschen Wert, dann geht es in der Zahlenkolonne richtig weiter. Nach einer gewissen Zeilenanzahl wechselt die Werte auf ein neues Messergebnis (neuer Wert in einer Kolonne). Ich möchte diesen ‚falschen‘ Wert mit einem Hash in Spalte A herausfiltern, wenn der untere Zeilenwert UND der obere Zeilenwerte gleich sind.
um das von dir gewünschte Ergebnis zu erreichen brauchst du kein Macro.
Füge in die Zelle A2 folgende Formel ein:
=WENN(UND(B2B1;B2B3);"#"&ZEILE()-ZEILE(A$1)+1;ZEILE()-ZEILE(A$1)+1)
Zieh die Zelle A2 die ganze Spalte A runter……
Wenn du es als Makro brauchst:
Sub Prüfe_Werte()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row - 1
If Cells(i, 2) Cells(i - 1, 2) And Cells(i, 2) Cells(i + 1, 2) Then
Cells(i, 1) = „#“ & Cells(i, 1)
End If
Next i
End Sub
a = 2
a_b = 1
Do Until Range(„A“ & a) = „“
a_c = a + 1
If Range(„C“ & a_c) = Range(„C“ & a_b) Then
Range(„B“ & a) = „#“ & Range(„B“ & a)
Else
End If
a = a + 1
a_b = a - 1
Loop
hat dann genau das erreicht, was du gefragt hast:
Das Makro soll ein Hash in der entsprechenden Zeile setzen,
wenn der Zahlenwert oberhalb UND unterhalb gleich ist.
Ich hoffe, dass es bei dir jetzt klappt. Die Formatierung ist natürlich noch nicht optimal, aber das ist sicher eine Kleinigkeit und kann per Makro-Aufnahme gedeichselt werden.
vielen Dank für deine Antwort. Leider wusste ich bei der Antwort per e-mail nicht genau bei Deinem Listing, welche Zeichen ich löschen muss, weil sie nur der Darstellung (html) dienten, z.B. . Da es sich um eine schnelle Lösung handeln sollte, aber ich eine andere gewählt. Aber ich finde es toll, dass du so schnell geantwortet hast und sogar eine Lösung ohne Makro liefern konntest, obwohl diese Variante etwas unpraktisch läuft, da ich leider so 70 bis 80 Dateien überprüfen muss, die aus ca. jeweils 6000 Datenzeilen bestehen, da ist die Makro-Lösung schon schneller und komfortabler.