Anzeige
Archiv - Navigation
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Nullsaldenzeilen löschen mittels vba

Nullsaldenzeilen löschen mittels vba
16.05.2008 20:29:03
James
Hallo zusammen,
Ich habe folgdes vba-problem und komme einfach nicht auf die Lösung:
In einer Tabelle stehen untereinander diverse Zahlen, von denen einige (jedoch nicht alle) saldiert 0 ergeben. Diese Zeilen sollen aus der Tabelle entfernt werden. Der Saldo ergibt sich jedoch nicht zwingend aus nur zwei Zeilen.
Am Beispiel einer Tabelle mit 4 Zeilen ergibt sich nach meiner Überlegung folgende "Wenn - del"-Funktion:
wenn(a1+a2=0, del a1+a2)
wenn(a1+a2+a3=0, del a1+a2+a3)
wenn(a1+a2+a3+a4=0, del a1+a2+a3+a4)
wenn(a1+a3=0, del a1+a3)
wenn(a1+a3+a4=0, del a1+a3+a4)
wenn(a1+a4=0, del a1+a4)
wenn(a2+a3=0, del a2+a3)
wenn(a2+a3+a4=0, dell a2+a3+a4)
wenn(a2+a4=0, del A2+a4)
wenn(a3+a4=0, del a3+a4)
Das ganze müsste man doch eigentlich in vba-umsetzen können, allerdings komme ich nicht im entferntesten auf einen ansatz. Ich habe sogar schon versucht, mir einen Programmablaufplan zu entwerfen, bin kläglich gescheitert.
Insbesondere macht mir Probleme, dass sich nicht nur die zu addierenden Zeilennummen verändern, sondern auch die Anzahl der Additionen unterschiedlich ist (mal nur a1+a2, dann a1+a2+a3, dann mit Lücke a1+a3+a4...) Bei einer größeren Zeilenanzahl wird der Term ja unendlich lang.
Außerdem muss ich die Anzahl der Zeilen feststellen, die in der individuellen Tabelle enthalten sind (im Beispiel oben sind das 4, es könnten aber auch hunderte sein. Auch hier habe ich keinen Ansatz gefunden.
Schlussendlich wäre eine Messagebox interessant, die ausgibt wieviele Berechnungen Excel machen musste, diese ist jedoch nur Kür, keine Pflicht...
Kommt irgendjemand auf einen Lösungsvorschlag?
Vielen Dank für jeden Tipp schon im Voraus!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
DEN Ansatz f.Nullsaldenzeilen-Löschen per VBA...
16.05.2008 23:29:00
Luc:-?
...halte ich für sehr ungünstig, James!
Wenn schon bei 4 Zeilen derartig viele unterschiedliche Saldi möglich sind, was soll auf diese Weise denn bei 100en herauskommen? Monströs!
Nee, so kann das nichts wdn! Außerdem kommt es sicher auch auf Prioritäten an. Ein Bsp:
P: wenn A1+A2=0 → T: lösche diese Zellen; F: lösche nicht
P: wenn A1+A2+A3=0 → T: lösche diese Zellen; F: lösche nicht
Was ist, wenn A1 & A2 gleich sind, A3 aber ≠0? Sollen dann nur A1 & A2 gelöscht wdn oder auch noch A3?
Außerdem müssten alle zu löschenden Zellen gemerkt und erst zum Schluss gelöscht wdn, weil sonst die Beziehungen durcheinander kommen. Ein 1x geschriebenes VBA-Pgm passt sich nämlich nicht automatisch an TabBlatt-Veränderungen an!
Auch geht das nur mit Primärdaten! Auf die gelöschten Zellen dürfen keine Formeln verweisen, wenn sie gänzlich entfernt wdn sollen. Sollen nur die Zellinhalte entfernt wdn, ist das egal.
Wenn ich von Primärdaten ausgehe und auf dieser Annahme das Problem weiter denke, vermute ich, du willst deine Daten nur von sich ggseitig aufhebenden Werten bereinigen. Da leere Zeilen auch unschön sind, willst du sie sicher auch entfernen (wenn keine weiteren Daten in diesen Zeilen stehen?!).
Auch, wenn man das alles jetzt mal vernachlässigt, erhebt sich noch die Frage wie sich das in weiteren Zeilen fortsetzen mag! Geht das dann alles nach diesem Schema? Sowas kann man nicht pgmieren! Da streikt glatt die Tastatur... ;-)
Du musst nach einer einfacheren Logik suchen. So viele Berechnungen können einfach nicht erforderlich sein! Vieles ist doch bestimmt doppelt gemoppelt oder hebt sich ggseitig auf. So wäre das ja wie ein Turnier "Jeder gg Jeden" mit 100en Teilnehmern!
Ich glaube kaum, dass jemand die Zeit aufbringen wird, "auf Verdacht" Ordnung in die Zellabhängigkeiten zu bringen. Das wirst du schon selbst tun müssen.
Schlaf drüber und sieh dir doch alles noch mal in Ruhe an! Dann kommst du viell auf einen effektiveren Algorithmus, denn das ist der eigentliche Knackpunkt des Ganzen, nicht die pgmtechnische Umsetzung. Da kann man mit ineinandergeschachtelten Verarbeitungszyklen Select Case, der Switch-Fkt, bedingten Sprüngen über ganze PgmBlöcke hinweg und bedingten UP-Aufrufen arbeiten.
U.U. muss man hier wirklich das ganze Register "ziehen", aber evtl auch nicht. Auf die zugrundeliegende Logik, also deine Datenstrukturanalyse, kommt's halt in 1.Linie an! Denn wir sehen deine Daten und ihre Abhängigkeiten nunmal nicht!
Wenn du gar nicht klar kommen solltest und dir - wie ich vermute - so auch Keiner helfen kann, solltest du vielleicht P@ulchen's xlWerkstatt konsultieren, der kann dir eine Fernhilfe mit Zugriff auf deinen PC anbieten.
Gruß & trotzdem schöWE!
Luc :-?

Anzeige
AW: DEN Ansatz f.Nullsaldenzeilen-Löschen per VBA.
17.05.2008 17:46:00
James
Naja, wenn ich im Internet mal weiterlese, komme ich auf den "trial and error"-Ansatz.
Excel müsste also angehalten werden, a1+a2 zu addieren. Kommt nicht null raus, müsste excel sich sagen "Mist, aber ich habe ja Zeit..." und a1+a2+a3 addieren, usw. Wenn es einen Nullsaldo gefunden hat, soll es die Zeilen mit Nullsaldo löschen, und das Makro soll wieder von vorne starten. Erst wenn es einmal durch den Zahlenbereich durchgelaufen ist, ohne einen weiteren Nullsaldo zu finden, soll Excel sagen, "Ich habe es geschafft" und das Makro soll stoppen.
In Wikipedia finde ich hierzu den "Backtracking"-Ansatz, aber auch die "Brute-Force-Methode" gefunden, aber wie ich dieses Wissen jetzt umsetzen soll weiß ich nicht. Ich finde im Internet auch keinen vba-Code, wo jemand schon einmal Trial and Error umgesetzt hat.
Ein Datenbeispiel wäre
a1: -0,80
a2: 12,23
a3: -5,00
a4: -8,00
a5: -6,23
a6: 8,00
a7: 7,50
a8: 1,00
a9: 13,80
Im Bsp. müsste Excel die Lösung a2+a3+a5+a8 = 0 finden, löschen, anschließend das Makro neu starten, nun a4 (neu: a2) und a6 (neu a3) finden, löschen, neustarten, und nun sagen, einmal durchgelaufen, keine Null gefunden. Übrig bleiben a1, a7 und a8 aus der Anfangsmatrix
Es handelt sich bei den Daten um Primärdaten, die Datenmenge ist i.d.r kleiner als 100 Zeilen, die nullsalden liegen meist dich beieinander, Rechnerzeit und -Power ist reichlich vorhanden...
Eigentlich ist ein Computer für so eine Sache doch prädestiniert, er kann schnell rechnen und muss nicht nachdenken ;-).

Anzeige
Wie gesagt, sehr aufwendig und ich...
18.05.2008 03:33:28
Luc:-?
...müsste mich auch erst einlesen (nicht in VBA), James... ;-)
Und dafür hab' ich wirklich keine Zeit, tut mir leid.
Versuch's doch mal bei P@ulchen! Linkwar ja in meiner 1.Antwort enthalten...
Gruß Luc :-?
PS: Falls hier doch noch einer Zeit dafür hat - noch offen...

AW: Nullsaldenzeilen löschen mittels vba
18.05.2008 08:47:00
Gerd
Hallo James,
für welchen Anwendungszweck ist dies gedacht?
Falls Du nur für Dich die Zellen mit Nullsummen benötigst,
wäre eine Lösung mit eingebauter Intuition schon machbar.
Für eine begrenzte Anzahl Zellen eine einigermaßen umfassende Lösung ebenfalls.
Ansonsten bleibt es bei der Aussage von Luc, (mit meinen Worten)
"dass der Strom gequält" wird, weil die Anzahl möglicher Konstellationen
sehr groß wird.
Gruß Gerd
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige