Anzeige
Archiv - Navigation
1628to1632
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
Zeilen ein und ausblenden
02.07.2018 08:39:09
EasyD
Hallo zusammen
ich würde gerne mal eure Meinung hören bevor ich anfange zu basteln. Folgende Problematik:
Ich habe auf einem Blatt (Quelle) in Spalte A Nummern von 1 bis 10.000 in einer lückenlose Liste. In Spalte B des Blattes werden diesen Nummern gewisse Werte zugewiesen. Dabei sind 0-Einträge in Spalte B möglich!
Jeder der Nummern aus Spalte A soll dann noch einer bestimmten Position zugeordnet sein auf einem anderen Blatt (Auswertung). Im Beispiel unten will ich also eine Position "1.Summe" auf dem Blatt Auswertung haben, welche die Werte B1:B3 (zzgl weitere, die Liste ist lang) aus dem Blatt Quelle enthält.
soweit unproblematisch mit Formeln zu lösen.
Beispielhaft:
Blatt Quelle
A1 = 10, B1 = 200
A2 = 20, B2 = 800
A3 = 30, B3 = 0
...
A100 = 95, B100 = 637
usw
Blatt Auswertung
C1 = "1.Summe", D1 = Summe(D2:D99)
C2 = QuelleA1, D2 = QuelleB1
C3 = QuelleA2, D3 = QuelleB2
C4 = QuelleA3, D4 = QuelleB3
....
C101 = "2.Summe", D101 = Summe(D102:D200)
C102 =QuelleA100, D102 = QuelleB100
usw
Die 1.Summe in AuswertungD1 würde also 1.000 betragen. Ich möchte per VBA die Zeilen auf dem Blatt Auswertung zwischen der 1.Summe und 2.Summe ein- und ausblenden können. Insoweit erstmal auch unproblematisch mit rows.visible...
Wenn ich ausblende, will ich auf Auswertung nur die Summenzeilen sehen (also Zeile1 und Zeile 101).
Wenn ich einblende, will ich die Zeilen dazwischen wieder sehen - aber - Die Zeile 4 welche den Wert 0 aus QuelleB3 enthält - die will ich NICHT sehen. Ebenso alle anderen solcher 0-Zeilen.
Würdet ihr das mit einer Schleife lösen und die Zeile nur dann einblenden, wenn die Zeile auf dem Blatt Quelle in Spalte B (oder halt SpalteD auf Auswertung, ist ja das gleiche) einen Wert 0 enthält?
Bei 10.000 Zeilen klingt das recht "langatmig". Gibt's eine bessere Lösung dafür?
Dank euch!

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 08:50:25
Oberschlumpf
Moin
und wie sollen die Zeilen mit Wert 0 in Spalte B wieder angezeigt werden, wenn du sie denn brauchst; z Bsp, um 0 gegen andere Werte zu ersetzen?
Zeig doch bitte mal per Upload eine Bsp-Datei mit Bsp-Daten. Damit lässt es sich besser testen.
Ciao
Thorsten
AW: Zeilen ein und ausblenden
02.07.2018 08:55:57
EasyD
bei Änderung muss ich einen Knopf drücken. Ist vielleicht nicht die beste Lösung, eine andere Idee hatte ich noch nicht.
Wegen der Bsp-Datei muss ich basteln, dauert ne Sekunde.
Bis gleich
AW: Zeilen ein und ausblenden
02.07.2018 09:13:52
EasyD
und da hätte ich dann mal was.
ich habe auf dem Blatt Auswertung schon so ausgeblendet, wie es sein soll.
Die Zeilen die ich NICHT sehen will hab ich gelb gemacht.
Danke schonmal!
https://www.herber.de/bbs/user/122431.xlsx
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 09:37:37
Oberschlumpf
Hi
hier, versuch mal:
https://www.herber.de/bbs/user/122432.xlsm
Ich fing an mit Programmieren, als mir auffiel, das Ganze funktioniert doch auch mit dem Autofilter.
In der Datei steht, welchen Filter du wo setzen musst.
Hilft das schon, oder soll trotzdem alles über einen Button laufen?
(den Button + alles an VBA-Code kannst du löschen, wenn der Autofilter reicht)
Ciao
Thorsten
AW: Zeilen ein und ausblenden
02.07.2018 09:23:03
Daniel
HI
würde ich über den Autofilter im Blatt Auswertung machen.
du müsstest hierzu eine Überschriftenzeilen einfügen.
in Spalte C filtern nach "enthält Summe" (Criteria1:="*Summe*")
in Spalte D filtern nach "entspricht nicht 0" (Criteria1:="0")
zum aufheben des Filters in einer bestimmten Spalte das Criteria dann einfach weglassen:
nur Summen anzeigen:
With Sheets("Auswertung").Usedrange
.Autofilter field:=3, Criteria1:="*Summe*"
.Autofilter field:=4
End with
Zwischenwerte ohne 0 anzeigen:
With Sheets("Auswertung").Usedrange
.Autofilter field:=3
.Autofilter field:=4 Criteria1:="0"
End with
einziges Problem hierbei wäre, wenn es Summen mit 0 geben würde, dann würdest du die Summenzeilen mit ausblenden.
da könntest du dir aber mit einer Hilfsspalte mit dieser Formel behelfen (Formel für Zeile 2)
=Wenn(Und(ZählenWenn(C2;"*Summe*")=0;D2=0);"x";"")

und dann mit dieser Hilfsspalte filtern:
With Sheets("Auswertung").Usedrange
.Autofilter field:=3
.Autofilter field:=5 Criteria1:="x"
End with

Gruß Daniel
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 09:33:01
EasyD
Über den Autofilter habe ich auch schon nachgedacht, ist ja auch das naheliegendste.
Vielleicht hätte ich dazu sagen sollen, wie ich auf meinen Ansatz mit der Schleife gekommen bin:
Diese Nummer mit ein und ausblenden will ich für jede Summe auf dem Blatt Auswertung eizeln vornehmen können. Es soll also möglich sein, den Bereich für die 1.Summe einzublenden, den Bereich für die 2.Summe aber ausgeblendet zu lassen.
Autofilter scheidet also aus oder irre ich mich....
AW: Zeilen ein und ausblenden
02.07.2018 09:41:21
Oberschlumpf
hach jaaa....
dann passt auch deine Problem-Beschreibung gar nicht zu der von dir gewünschten Lösung.
Bisher willst du, dass nur Summenzeilen eingeblendet bleiben. Bei Einblenden von "alles", sollen 0-Zeilen ausgeblendet bleiben.
Das bedeutet aber, dass immer alle! anderen Zeilen auch eingeblendet werden.
Von selektiver Einblendung "nur für Summe1, nur für Summe2, usw" war gar nicht die Rede.
Weiter viel Erfolg.
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 09:53:25
EasyD
ja das stimmt, sorry
aber:
die Summenzeilen sollen natürlich IMMER eingeblendet bleiben. Ich rede nur davon, den Bereich dazwischen ein und auszublenden und dies unter der Bedingung, dass 0-Zeilen in diesen Bereichen NIE eingeblendet werden.
Mist - lange hin und her gelabert und der Satz oben trifft das Problem eigentlich erst im Kern.
Tut mir leid!
AW: Zeilen ein und ausblenden
02.07.2018 11:03:20
Daniel
Hi
dann lass mal diesen Code über dein Blatt Auswertung laufen:

Sub Makro3()
Dim rng As Range
With Sheets("Auswertung")
For Each rng In .Columns(3).SpecialCells(xlCellTypeFormulas).Areas
rng.Rows.Group
Next
For Each rng In .Columns(4).SpecialCells(xlCellTypeFormulas)
If rng.Value = 0 Then
If Not rng.Offset(0, -1).Value Like "*Summe*" Then rng.EntireRow.RowHeight = 0.75
End If
Next
End With
End Sub
das richtet dir eine Gruppierung ein, mit hilfe der du schnell und einfach ohne weitern Code die Zwischenzeilen ein- und ausblenden kannst, entweder als ganzes oder auch einzeln für jede Summe.
dies geschieht über zusätzliche Buttons am linken rand.
für die Zeilen mit 0 wird die Zeilenhöhe auf 0.75 gesetzt. das ist die kleinstmögliche Zeilenhöhe, ohne die Zeilen ganz auszublenden.
wenn du die Buttons zum Ein/Ausblenden der einzelnen Blöcke nicht unterhalb sondern oberhalb des Blockes haben willst (dort wo deine Summe steht) kannst du das nächträglich noch ändern, wenn du im Menü DATEN - GLIEDERUNG auf das erweiterete Menü geht's (rechte untere Ecke anklicken "Hautzeilen unter Detailzeilen" -> Haken raus)
Gruß Daniel
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 11:48:02
EasyD
Sehr schön Daniel,
das ist schonmal recht elegant und vor allem flüssig.
Damit sich die Gruppierung bei mehrfachem Ausführen des Codes nicht unendlich erweitert sollte ich als erstes die evtl bereits bestehende Gruppierung erstmal aufheben (Rows.Ungroup) um deinen Code anschließend auszuführen, dürfte funtkionieren.
Ich würde das auch so machen, nur noch eine Ergänzungsfrage dazu:
lässt sich der Befehl "Gliederungsebene auf und zu" auch über VBA steuern? Der Makrorecorder bringt da nichts...
Ich würde das nämlich lieber über einzelne Commandbuttons in jeder Summenzeile steuern als mit den kleinen Pluszeichen am Rande...
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 11:53:32
Daniel
Hi
lässt sich glaube ich auch machen, aber nicht ganz so einfach.
da muss man glaube ich alten Excel4Makro-Code verwenden.
da kenn mich mich aber nicht aus, das müsstest du mal selber recherchieren.
ansonsten halte ich es nicht für besonders sinnvoll, zusätzliche Buttons in den Code einzubauen.
dann nimm lieber das BeforeDoubleClick-Event, dann brauchst du keine Buttons und nur ein Makro.
Gruß Daniel
AW: Zeilen ein und ausblenden
02.07.2018 12:57:22
EasyD
ok Daniel
ich dank Dir!
da ist auf jeden Fall mal der Denkanstoss den ich brauchte.
Ob ich die Gliederungsebene mittels Knopf auf und zu mache oder mit den Boardmitteln von Excel, ist ja auch schließlich Geschmackssache und weniger relevant.
Und wegen BeforeDoubleClick werde ich mich auch mal schlau machen....
Anzeige
AW: Zeilen ein und ausblenden
02.07.2018 13:13:21
Daniel
Hi
das mit dem BeforeDoubleklick ist eigentlich das einfachste bei deinem Tabellenaufbau.
damit kommst du mit dem geringsten Code aus.
mach folgendes:
1. füge diesen Code ins Modul des Tabellenblatts ein.
Damit blendest du bei Doppelklick auf eine Zelle mit Inhalt "*Summe*" alle Zeilen aus, die zwischen dieser und der nächsten Summenzeile stehen.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Zelle As Range
If Target.Value Like "*Summe*" Then
Set Zelle = Target.EntireColumn.Find(what:="Summe", _
after:=Target, lookat:=xlPart, searchdirection:=xlNext)
If Zelle.Row 

2. füge dann einen ActiveX-Commandbutton auf dem Blatt ein und weise ihm diesen Code zu.
Damit kannst du dann alle Zwischenzeilen zusammen ein- und ausblenden:
Private Sub CommandButton1_Click()
With Columns(3).SpecialCells(xlCellTypeFormulas).EntireRow
.Hidden = Not .Hidden
End With
End Sub
3. um die Zeilen mit 0 auszublenden, musst du einmalig die dir schon bekannte Schleife laufen lassen, um die Zeilenhöhe auf 0.75 zu setzen.
das funktioniert dann problemlos mit beliebiben Datenmengen, ohne dass du am Code was anpassen musst.
einzige Voraussetzung ist, dass in Spalte C die Zeilen mit "Summe" immer fixe Texte sind und die zwischenzeilen Formeln.
Der Code für den Button macht nämlich nichts anderes, als die Zeilen mit Formeln zu suchen und diese ein- und auszublenden.
Gruß Daniel
Anzeige
AW: Zeilen ein und ausblenden
03.07.2018 08:09:28
EasyD
Ein Träumchen Daniel
so hatte ich mir das exakt vorgestellt... ich hab nur noch das Problem, dass ich natürlich im echten Projekt dann korrekte Bezeichnungen für die Summenzeilen hab, und nicht das Wort "Summe"
aber da fällt mir schon was vernünftiges ein, bissl anpassen noch, dann funzt es!
Dank Dir vielmals!
AW: Zeilen ein und ausblenden
03.07.2018 16:29:17
Daniel
Hi
dann prüf doch, ob die Zelle eine Formel haben oder nicht, in den Summenzeilen steht da ja ein fixer Text drin, in den zwischenzeilen eine Formel, das kann man abfragen, z.B. mit .Formula
if not Target.hasFormula then

oder du prüfst, ob die angeklickte Zelle einen text enthält:
if Vartype(Target.Value) = vbString then

wenn die angeklickte Zelle neben der zuprüfenden Zelle liegt, kann man das mit .Offset(zeile, spalte) anpassen:
if not Target.Offset(0, 1).hasFormula then
Gruß Daniel
Anzeige
AW: Zeilen ein und ausblenden
03.07.2018 15:38:27
EasyD
Hey Daniel,
ich hoffe ich kann das Thema hier nochmal kurz aufmachen und Du liest das hier auch.
Ich habe eine Weile gebraucht den Code mit Offset so umzuarbeiten, dass er in der Spalte VOR dem Target nach dem Wort "Summe" sucht. Offset verwirrt mich leider immer.
Läuft jedenfalls...
Aber:
Leider fiel mir erst hinterher auf, dass ich einen Blattschutz drüber bügeln muss und dass die Zellen nicht auswählbar sein sollen. Mein Versuch funktnioniert leider nicht, sondern blendet immer nur (egal wo hin geklickt wird) die gleichen Zeilen ein und aus. Liegt wahrscheinlich an der zuletzt ausgewählten Zelle.
Aber vom Verständnis her dürfte das doch eigentlich klappen:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'per Doppelklick in Spalte B die Zeilen zwischen den Summen-Positionen ein und ausblenden (" _
Summe" in Spalte A)
Dim Zelle As Range
ActiveSheet.Unprotect
'Auswählen von Zellen erlauben
ActiveSheet.EnableSelection = xlNoRestrictions
If Target.Offset(0, -1).Value Like "*Summe*" Then ' "   " ist nur in den Positionssummen  _
enthalten
Set Zelle = Target.Offset(0, -1).EntireColumn.Find(what:="Summe", _
after:=Target.Offset(0, -1), lookat:=xlPart, searchdirection:=xlNext)
If Zelle.Row 

Anzeige
AW: Zeilen ein und ausblenden
03.07.2018 16:41:23
Daniel
Hi
Blattschutz ist natürlich ein Problem
die Zelle, die als Button dienen soll, muss auswählbar sein.
dh du erlaubst entweder das auswählen von nicht gesperrten Zellen, oder wenn das nicht gewünscht ist, kannst du auch als Button eine leere Nachbarzelle verwenden (Offset kennst du ja) und für diese auf "nicht gesperrt" setzen.
dann kannst du diese Zellen auch so formatieren, dass sie wie Buttons aussehen und ggf auch einen Text enthalten (ein/ausblenden)
Gruß Daniel
AW: Zeilen ein und ausblenden
03.07.2018 17:01:41
EasyD
was für ein unergründlicher Quell an Ideen ;)
klingt gut, im Grundsatz verstanden, werd es probieren.
Dank Dir!

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige