ich sitze schon eine ganze Weile an einer Aufgabe, bei der ich eine Liste mit Zahlen in eine komprimiertere Darstellung umwandeln muss. Dieses sollte idealerweise in VBA programmiert sein, da ich das Ganze in einen schon bestehenden VBA-Code einflechten möchte. Leider habe ich bis jetzt noch keinen Code hinbekommen, der mir das gewünschte Ergebnis liefert.
Mein VBA-Code erzeugt mir die Auswertung, wie man sie links im Bild sehen kann. Nun möchte ich meine Auswertung so komprimiert haben wie rechts im Bild: links und rechts von einer Null soll jeweils nur die höchste Zahl eingetragen werden. Die Nullen hingegen sollen immer angezeigt werden.
Ich würde mich sehr freuen, wenn mir jemand bei der Lösung dieses Problems behilflich sein könnte.
Spalte I (bzw. allgemein: die Spalte nach der letzten Spalte) bleibt leer. Sie wird benötigt als Abschluss (siehe Formel). Fast alle der Voraussetzungen (außer: Zwischen den Nullen aufsteigend, damit es immer um die "jeweils letzte Nichtnull" geht) fallen hier weg:
J1: =TEXTTEILEN(TEXTVERKETTEN("-";;WENNFEHLER(1/(1/WECHSELN(" "&((A1:H1>B1:I1)+(A1:H1>0)<>1)*(A1:H1-1%)&" ";" 0 ";""))+1%;""));"-") Falls man die Nullen auch noch "packen" möchte, hätte man die Minuszahlen dafür. Ist aber von Dir nicht angefordert.
Erst mal recht herzlichen Dank für deine Mühe, aber ich bin leider auf der Suche nach einer VBA-Lösung, welchen ich in meinen schon bestehenden VBA-Code einflechten möchte. Aber trotzdem noch mal vielen Dank!
Ich antworte, weil mir das Problem Spaß macht. Du kannst also gern die Nichtverwendbarkeit bekunden.
Grundsätzlich kann man eine Formel in VBA verwenden, VBA in einer Formel aber nicht (wenn man UDF außen vor lässt).
Außerdem kann man jede Formel (so man sie denn versteht) durchaus auch "als Pseudocode" für eine native VBA-Lösung verwenden (also auch mit IF und FOR).
da kann ich snb nur recht geben: Es ist sinnvoller den vorhanden Code zu überarbeiten, als dessen Ausgabe zu analysieren.
Was musst du tun? Statt einen Wert in eine Zelle zu schreiben, merkst du ihn dir falls er höher ist als der bisher gemerkte. Wenn eine Null kommt, geht das Spiel von vorne los.
Nehmen wir an, deine Zahl steckt in der Variable Erg. Dann könnte das so aussehen:
Code:
Dim aktSp as Long Dim aktZeile as Long Dim Max as Long 'oder Double ... aktZeile = irgendwas_größer_0 ... If Erg > Max Then Max = Erg If Erg = 0 Then aktSp = aktSp + 1 Cells(aktZeile, aktSp) = Max Max = 0 aktSp = aktSp + 1 Cells(aktZeile, aktSp) = 0 End If ... If Bedingung_für_neue_Zeile Then Cells(aktZeile, aktSp) = Max aktZeile = aktZeile + 1 aktSp = 0 Max = 0 End If