11.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen!

Bitte bitte helft mir, sonst fang ich an zu heulen.
Ich kenne mich mit VBA nicht gut aus, habe aber mein Problem
eigentlich gelöst, bis auf eine kleine Kleinigkeit.

Folgendes:

Ich habe mir ein VBA-Macro in Excel gebastelt, dass die Zellen einer
bestimmten Spalte von oben nach unten absucht. Steht in der Zelle
eine 1 dann ist gut. Steht in der Zelle eine 0, dann soll die ganze
Zeile ausgeblendet werden.

Mein einziges Problem, die Zellen die durchsucht werden beinhalten
eine WENN-Funktion. Und die 1 oder 0 wird eben je nach
Bedingung automatisch eingetragen...

Mein VBA-Macro nimmt aber zum checken der Zellen nicht den
"Wert", sondern eben den echten, kompletten Inhalt der Zelle- also
die Formel...

Wenn ich die 1 oder 0 selbst eintrage, dann funktioniert es!!!

Wie kann ich dem VBA-Macro nun sagen, dass es den "Wert" der
Zelle zum checken verwenden soll???

Ich leg mich jetzt mal schlafen.

Über eine Antwort würde ich mich sehr freuen!!
Vielen Dank!

13 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Gut wenn Du dannn ausgeschlafen hast, kannst Du ja Deimn Makro hochladen. Icvh vermute Du möchtest es dor geänderrt haben. Warum benutzt Du nicht Autofilter.

Gruß Hajo
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Lisa,

du musst den Zellwert mit .Value abfragen. Hier ein Beispiel:

Sub test()

If Cells(1, 3).Value = 1 Then
MsgBox "In Zelle C3 steht 1"
Else
MsgBox "In Zelle C3 steht keine 1"
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Guten Morgen!

Erstmal vielen Danke für eure Antwort!

@ M.O.
Vielen Dank! Leider geht es nicht oder ich mache etwas falsch :-/
Hier ist das Makro, dass ich um dieses .Value erweitert habe.

Sub ausblenden()

For i = 1 To Cells(5000, 3).End(xlUp).Row

If Cells(i, 3).Value = 1 Then
Rows(i).Hidden = True

ElseIf IsEmpty(Cells(i, 3)) Then
End If

Next i

End Sub


Die Zellen die geprüft werden sind im Prinzip die Spalte C von Zeile
1 bis 5000. In den Zellen steht die Formel:

=WENN(B16=$B$1;1;0)


Es funktioniert einfach nicht :-(
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Lisa,

anbei mein Vorschlag

Option Explicit

Sub ausblenden()
Dim i As Integer
For i = Cells(Rows.Count, 3).End(xlUp).Row To 1 Step -1
If Cells(i, 3).Value = 1 Then
Rows(i).Hidden = True
End If
Next
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Lisa,

so läuft es schneller und der Bildschirm flackert nicht.

Option Explicit

Sub ausblenden()
Dim i As Integer
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 3).End(xlUp).Row To 1 Step -1
If Cells(i, 3).Value = 1 Then
Rows(i).Hidden = True
End If
Next
Application.ScreenUpdating = True
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Reiner!

Erstmal VIELN DANK für deine Hilfe!
Jetzt geht es!!!

Aber mal noch eine Frage:
Wieso geht es denn nicht bei mir???

Wenn ich jetzt mal mein Makro von oben noch weiter vereinfache
und leere Zellen nicht berücksichtige, dann sieht das ja so aus:

[code]Sub ausblenden()

For i = 1 To Cells(100, 3).End(xlUp).Row

If Cells(i, 3) = 1 Then
Rows(i).Hidden = True
End If

Next i

End Sub[/code]

Und wenn ich jetzt sogar in die Zellen der 3. Spalte manuell eine 1
eintrage, dann tut sich trotzdem nix :-(
Gestern ging es noch manuell...

Was ist denn daran falsch- ich will doch auch dazu lernen :-)))
0 Punkte
Beantwortet von
Hat sich erledigt!
Danke für eure Hilfe!!
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Lisa,

"von hinten" ist hiebei das Zauberwort :-)

Das Löschen und Ausblenden von Zeilen / Spalten sollte immer von unten nach oben / rechts nach links erfolgen, sonst verschluckt sich das Makro und liefert falsche Ergebnisse.

Gruß
Rainer
0 Punkte
Beantwortet von
Danke Reiner :-)
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^^

es spielt keine rolle welche richtung der vergleich stattfindet,vielmehr ist es ein konstruct um anfaengerfreundlich zu sein ^^

gruss nighty
...