Excel Schleife über eingeblendete Zellen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 04.09.2015 19:00:57

Hallo zusammen,
ich habe eine Frage ich habe eine Liste mit zwei Spalten und wenn in beiden 0 steht, soll die Zeile ausgeblendet werden. Wenn jedoch die rechte Spalte nicht null ist, die Zelle links davon 0 und die Zelle darüber nicht null ist, dann sollen die beiden Zellen ausgetauscht werden, so dass auf eine Zelle alles nicht 0 ist. Nun klappt das bei mir soweit, dass mein Code funktioniert solange dazwischen keine ausgeblendeten Zeilen sind. Wie kann ich meinen Code ändern, dass es nur mit eingeblendeten funktioniert.
Vielen herzlichen Dank
Liebe Grüsse

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: Daniel
Geschrieben am: 04.09.2015 19:20:37
Hi
du könntest beispielsweise zunächst einmal die Zeilennummern der sichtbaren Zeilen in ein Array schreiben.
Dann läufst du mit einer Schleife über dieses Array und liest zum Indexeintrag die jeweilige Zeilennummer aus dem Array und arbeitest mit dieser Zeilennummer.
sieht im Ansatz etwa so aus:


Dim Zeile() as long
dim i as long
Dim rng as Range
'--- Zeilennummern der sichtbaren Zeilen ermitteln
With ActiveSheet.Usedrange.Columns(1).SpecialCells(xlcelltypevisible)
    Redim Zeile(1 to .Cells.Count)
    for each rng in .Cells
        i = i + 1
        Zeile(i) = rng.Row
    Next
End with
'--- prüfen, ob der Wert der zweiten sichtbaren Zelle in Spalte A gleich dem darunterliegenden  _
Wert ist
i = 2
If Cells(Zeile(i), 1) = Cells(Zeile(i + 1), 1) Then...

Gruß Daniel

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 04.09.2015 19:57:29
Hey vielen Dank für die schnelle Antwort. Habe es jetzt zuhause versucht nachzustellen, da ich _ nicht im Büro bin. Bei mir klappt es aber leider nicht. Sieht jemand den Fehler? Vielen Dank!


Sub test()
         Dim n As Long, laR As Long
             laR = Cells(Rows.Count, 4).End(xlUp).Row
             For n = 1 To 10
               If Cells(n, 3).Value = "0" And Cells(n, 4).Value = "" Then
                 Cells(n, 3).EntireRow.Hidden = True
End If
If Cells(n, 3).Value = "0" And Cells(n, 4).Value = "0" Then
                 Cells(n, 3).EntireRow.Hidden = True
End If
    Next n
Dim Zeile() As Long
Dim i As Long
Dim rng As Range
'--- Zeilennummern der sichtbaren Zeilen ermitteln
With ActiveSheet.UsedRange.Columns(3).SpecialCells(xlCellTypeVisible)
    ReDim Zeile(3 To .Cells.Count)
    For Each rng In .Cells
        i = i + 1
        Zeile(i) = rng.Row
    Next
End With
'--- prüfen, ob der Wert der zweiten sichtbaren Zelle in Spalte A gleich dem darunterliegenden  _
_
Wert ist
If Cells(Zeile(i - 1), 3).Value > "0" And Cells(Zeile(i), 3).Value = "0" And Cells(Zeile(i), 4). _
Value > 0 Then
Temp = Cells(Zeile(i), 3)
Cells(Zeile(i), 3) = Cells(Zeile(i - 1), 3)
Cells(Zeile(i - 1), 3) = Temp
End If
End Sub


Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: Daniel
Geschrieben am: 04.09.2015 21:32:17
Hi
"klappt nicht" ist als Fehlermeldung genauso hilfreich wie der Hinweis: "wenns nicht klappt, machs anders"
beschreib mal bitte genauer, was nicht klappt.
gibts ne Fehlermeldung? Wenn ja in welcher Programmzeile und wie lautet die Fehlermeldung (Nummer, Text)?
wenn nein, was sollte deiner Meinung nach passieren und was passiert tatsächlich?
Nützlich ist immer auch das Hochladen der Datei, damit man den Fehler direkt ausprobieren kann.
ist wie beim Arzt, Patient auf dem Tisch ist immer besser als ne Telefonberatung.
naja, ein Fehler ist schon mal, dass du beim Dimensionieren der Variablen Zeile() den Index mit der Zeilennummer verwechselt
Gurß Daniel

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 04.09.2015 21:54:16
Hey Daniel,
Danke für deine Antwort. Es tut mir leid, dass ich das Problem nicht beschrieben habe. Bei mir kommt immer die Fehlermeldung "Indexfehler ausserhalb des gültigen Bereichs*. Der Debugger zeigt mir jedoch keine Zeile an. Leider habe ich das Richtige File erst wieder am Montag. Könntest du mir näher erklären, was ich genau verwechselt habe. Sorry sind sehr wahrscheinlich dumme Fragen, aber bin zurzeit noch blutiger Anfänger im VBA.
Danke vielmal!

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: Daniel
Geschrieben am: 05.09.2015 15:34:21
HI
hier z.B. ReDim Zeile(3 To .Cells.Count)
das muss immer lauten ReDim Zeile(1 To .Cells.Count)
und im folgenden Teil (bei der Überprüfung) hast du dann vergessen zu bestimmen, welche Zeilen du überhaupt mit eineander vergleichen willst (das i)
bedenke, ich kenne deine Datei und deine Aufgabenstellung nicht.
daher kann ich dir auch keinen fertigen Code erstellen, den du hirnlos kopieren und dann sofort verwendemn kannst.
Gruss Daniel

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 05.09.2015 17:46:43
Vielen lieben Dank Daniel! Jetzt nach dem ich die 1 eingefügt habe, funktioniert es nach meinen Wünschen. Schönes Wochenende wünsche ich dir! :)

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 07.09.2015 18:48:06
Hey,
ich bins nochmal, hab hier noch meinen aktuellen Code, doch es funktioniert nicht wie gewünscht. Wenn ich den Code durchführe kommt keine Fehlermeldung, aber es tut sich auch nichts.
Mein Ziel ist es, dass ich zuerst nach gewissen Kriterien 0er ausblende. Falls jedoch rechts von der Null eine Zahl ist und oberhalb auch, dann sollen die Zellen ausgetauscht werden. Das ganze klappt bei mir, solange keine ausgeblendeten Werte dazwischen sind. Würde gerne meine Datei hochladen, aber leider klappt das nicht. Danke für jede Hilfe.


Private Sub CommandButton2_Click()
Dim n As Integer
For n = 8 To 200
  If Cells(n, 3).Value = "0" And Cells(n, 5).Value = "" Then
    Rows(n).EntireRow.Hidden = True
  End If
   If Cells(n, 3).Value = "0" And Cells(n, 5).Value = "0" Then
    Rows(n).EntireRow.Hidden = True
  End If
  If Cells(n, 3).Value = "" And Cells(n, 5).Value = "0" Then
    Rows(n).EntireRow.Hidden = True
  End If
Next
'--- Zeilennummern der sichtbaren Zeilen ermitteln
With ActiveSheet.UsedRange.Columns(3).SpecialCells(xlCellTypeVisible)
ReDim Zeile(1 To .Cells.Count)
For Each rng In .Cells
          i = i + 1
          Zeile(i) = rng.Row
 
   Next
  End With
  
  '--- prüfen, ob der Wert der zweiten sichtbaren Zelle in Spalte A gleich dem  _
darunterliegenden _
 _
  Wert ist
  
  If Cells(Zeile(i - 1), 3).Value > "0" And Cells(Zeile(i), 3).Value = "0" And Cells(Zeile(i),  _
5).Value > "0" Then
  Temp = Cells(Zeile(i), 3)
  Cells(Zeile(i), 3) = Cells(Zeile(i - 1), 3)
  Cells(Zeile(i - 1), 3) = Temp
Temp2 = Cells(Zeile(i), 1)
  Cells(Zeile(i), 1) = Cells(Zeile(i - 1), 1)
  Cells(Zeile(i - 1), 1) = Temp2
    End If
For n = 8 To 200
  If Cells(n, 3).Value = "0" And Cells(n, 5).Value = "" Then
    Rows(n).EntireRow.Hidden = True
  End If
  Next
End Sub


Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: Daniel
Geschrieben am: 07.09.2015 18:59:04
Hi
hast du auch die Hinweise auf der Downloadseite beachtet:
- Datei darf nicht länger als 300kb sein
- xlsb ist nicht zulässig (dh xlsm nehmen)
- Verzeichnis und Dateiname dürfen kein Leerzeichen enthalten
Gruß Daniel

Bild

Betrifft: AW: Excel Schleife über eingeblendete Zellen
von: mischiz
Geschrieben am: 07.09.2015 19:26:01
Hey Daniel,
Doch die habe ich eigentlich beachtet, aber lag wohl an meinem Macbook. Jetzt am Windows-Desktop klappts. Hier die Datei: https://www.herber.de/bbs/user/100070.xlsm
Dann wird mein Unterfangen etwas verständlicher :)
Danke für deine grosse Hilfe!!

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Excel Schleife über eingeblendete Zellen"