Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
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
Inhaltsverzeichnis

Kopieren von Daten; 0 Werte ausschließen

Kopieren von Daten; 0 Werte ausschließen
29.10.2021 21:47:31
Daten;
Hallo liebe Excel fans,
ich habe folgendes Problem: aus einer großen ungeordneten Tabelle (Quellblatt) möchte ich einzelne Spalten zur Weiterverarbeitung von diesem Quellblatt in ein neues Blatt (Zielblatt) übertragen. Das Quellblatt wird regelmäßig um neue Zeilen mit weiteren Datensätzen ergänzt. Die Daten aus diesen neuen Zeilen im Quelldatenblatt sollen dann ebenfalls automatisch in das Zielblatt übernommen werden.
Ich habe diese Aufgabe offenbar erfolgreich mit der INDEX Funktion gelöst; z.B.: Zelle neues Blatt = INDEX('Quellblatt'!D:D;) und weiter mit Füllbereich unten.
Das funktioniert soweit (ob es bessere Lösungsansätze gibt weiss ich nicht) - allerdings mit dem Problem, dass das Zielblatt riesig lang wird weil jede Menge Zeilen mit dem Wert 0 erzeugt werden. Dies erschwert natürlich die Weiterverarbeitung; im Zielblatt sollen weitere Berechnungen sowohl unten (letzte Zeile, Summenbildung) als auch in neuen Spalten rechts gemacht werden sowie diverse Filtermöglichkeiten implementiert werden. Die Nullzeilen immer zuerst über eine Filterfunktion auszublenden ist auf die Dauer wenig effizient. Ich such daher nach einem Weg, wie diese Zeilen mit Wert 0 (z.B. in Spalte A im Zielblatt) automatisch nicht angezeigt werden oder vielleicht noch besser, wie Zellen mit Wert 0 im Quellblatt möglichst erst gar nicht ins Zielblatt übertragen werden. Zur Veranschaulichung darf ich eine kleine Beispieldatei anfügen.https://www.herber.de/bbs/user/148863.xlsm
ich habe sehr wenig VBA know how - bitte um entsprechende Nachsicht.
Lieben Dank für Eure Ideen im vorhinein
Fiffi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nicht INDEX, sondern einfacher Zelbezug...
29.10.2021 22:09:54
{Boris}
Hi,
Deine INDEX-Funktion ergibt keinen Sinn - ganz im Gegenteil: Jede einzelne Formel erzeugt ein Array von 16384 Werten - weil Du den Spaltenindex ausgenullt hat (bzw. mit ;) angibst, was auf das Selbe hinausläuft).
Schreibe in A2 des Zielblattes:
=WENN(Quellblatt!D2="";"";Quellblatt!D2)
und runterkopieren. Analog für die anderen Spaltenbezüge. Also: KEIN Index, sondern ein einfacher Zellbezug mit vorangestellter WENN-Abfrage, ob die Zelle leer ist.
VG, Boris
Zellbezug natürlich... oT
29.10.2021 22:11:24
{Boris}
...
AW: Zellbezug natürlich... oT
30.10.2021 11:36:24
Bernd
Hi Boris,
Danke für die rasche und konstruktive Hilfe. Dein Tipp ist plausibel und scheint auch grundsätzlich sehr gut zu funktionieren. Um einen wechselnd großen Datensatz auf diese Weise im Zielblatt abgebildet zu bekommen habe ich allerdings mir erlaubt, deinen Tipp insoweit abzuändern, dass ich deine Formel nicht in Zeile A2 des Zielblatts schreibe sondern in A1 und dann in deiner Formel entsprechend D2 durch D1 ersetze.
und somit den Spaltenkopf mit integriere und dann diese Formel für die gesamte Spalte runterkopiere (Füllbereich unten).
Wenn ich das mit den weiteren Spalten meiner Datei analog mache (etwas mehr wie die abgespeckte Beispieldatei, die ich beigefügt hatte), dann bricht mir regelmäßig Excel zusammen. Als offensichtliche Ursache habe ich gefunden, dass die Dateigröße von zuvor lächerlichen 84 KB (ohne Zieldatei) auf 103 MB (!!) mit Zieldatei angewachsen ist.
Wie kann ich diese Riesendateien verhindern? Am einfachsten erscheint mir, den "Füllbereich unten" auf ein vorab bestimmte Zeilenzahl zu begrenzen, z.B. 2000, was für meine Zwecke wohl auch mehr als genug wäre. Besonders elegant ist dieses Procedere aber nicht; früher oder später erscheinen mir damit weitere Probleme vorprogrammiert, Gibt es eine besseren Lösungsansatz?
Danke im vorhinein!
Fiffi
Anzeige
AW: hierzu ...
30.10.2021 12:41:05
neopa
Hallo Bernd,
... natürlich sollte man Formeln nur soweit kopieren, wie sie denn max. wirklich benötigt werden, also bei Dir bis eben z.B. max Zeile 2000. Überflüssige lösche. Dazu markiere alle Zellen ab dieser Zeilennummer bis zum Ende und lösche alle diese Zeilen.
Solltest Du aber Zellformate und vor allem bedingte Formatieren über den gesamten Zeilen und /oder Spaltenbereich definiert haben, so sind vor allem letztere ein echte Ressourcenfresser. In bestimmen Fallen kannst Du dies auch nicht durch Löschen der nicht benötigten Zeilen und/oder Spalten wie für Zellinhalte beheben, wie zuvor aufgezeigt. Du müsstest dazu in diesen Bereichen evtl. die Formate noch auf die Excel-Standardeinstellungen zurück definieren.
Zu Deinem Problem mit Nichtdarstellung von Ergebniswerten 0 aus dem Formelbezug auf eine leere Zelle. Dies kannst Du einerseits mit der von Boris aufgezeigten Formel lösen oder auch durch benutzerdefiniertes Zahlenformat der Zellen. Mehr dazu sieh z.B. mal hier: https://www.online-excel.de/excel/singsel.php?f=71 welches dann allerdings den Nachteil hat, das übernommene echte Zahlen-Null-Werte auch nicht dargestellt werden.
Eine weitere Variante der Nichtdarstellung von Ergebnisnullwerten aus Bezug auf leere Zellen wäre unter der Voraussetzung, dass es sich ansonsten ausschließlich um Textwerte handelt ,wenn Du anstelle folgende Formel =WENN(Quellblatt!1="";"";Quellblatt!D1) einfach nur =Quellblatt!D1&"" schreibst.
Übrigens kann der Einsatz von INDEX(...;), wie Du eingangs angegeben hast, durchaus Sinn machen. Und zwar insbesondere dann, wenn Du in der Quelldatentabelle Zeilen zwischen den vorhandenen einfügen und auch Zeilen löschen willst und im Ergebnistabellenblatt immer eine 1:1 Ausgabe haben willst. Bei normalen Zelladressbezug können sich da Probleme einstellen.
Gruß Werner
.. , - ...
Anzeige
AW: hierzu ...
30.10.2021 20:58:27
Fiffi
Hi Werner,
Danke für die ausführliche Rückmeldung. es ist ja schön, dass auch hier verschiedene Wege nach Rom führen und ich hab auch mit diesen Vorschlägen etwas herumexperimentiert. Ein wesentliches Kriterium ist bei allen Lösungsansätzen, dass keine Datensätze irrtümlich unbemerkt verloren gehen dürfen. Bei den bisherigen Ansätzen kann man in der Zieltabelle z.B. eine Zeile löschen - die wird dann nicht mehr aus der Quelltabelle neu generiert. Das könnte durchaus problematisch sein - auch wenn ein Blattschutz einiges an Sicherheit bringen mag.
Deshalb alternativ der Gedanke: könnte man ein Makro definieren, bei dessen Ausführung die ursprünglichen Datenspalten aus der Quelldatei in eine Zieldatei transferiert werden - und zwar von vornherein nur soweit wie diese Spalten tatsächlich mit Werten gefüllt sind? In diesem Zusammenhang müsste freilich auch die Spaltenreihenfolge angepasst werden und auch eine Spalte nicht übertragen werden. Ist das ein valider Ansatz und wie müsste ein solches Makro lauten?
V.G.
Fiffi
Anzeige
AW: das von Dir nun geschilderte ...
31.10.2021 06:36:58
Dir
Hallo Fiffi,
... ist bei der Formellösung mit INDEX() äußert unwahrscheinlich.
Natürlich könnte man es auch mit VBA lösen, doch ich beschäftige mich nicht mit VBA. In einer neueren XL-Version würde ich das jedoch mit Power Query Funktionalität mit wenigen Mausklicks definieren können.
Gruß Werner
.. , - ...
AW: das von Dir nun geschilderte ...
02.11.2021 17:01:10
Dir
Besten Dank für den feedback. Auch wenn die Anregungen sehr hilfreich waren verfolge ich jetzt mal diesen Weg nicht weiter und suche einen komplett anderen Lösungsansatz über PIVOT Tabelle.
Gruß
Fiffi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige