Excel automatisch Zeilen ausblenden wenn in zwei Spalten Werte sind
Hallo zusammen,
ich habe eine Excelliste mit einer Gutscheinübersicht. Dort ist neben anderen Spalten, eine Spalte G wann der Gutschein ausgestellt wurde und eine Spalte H wann dieser eingelöst wurde. Ich möchte nun erreichen, dass die entsprechende Zeile ausgeblendet wird, wenn sowohl in der Zelle G als auch in der Zelle H dieser Spalte ein Wert eingetragen wurde.
Wahrscheinlich lässt sich das nur mit VBA lösen, oder? Könnte da jemand helfen?
VG
ich habe eine Excelliste mit einer Gutscheinübersicht. Dort ist neben anderen Spalten, eine Spalte G wann der Gutschein ausgestellt wurde und eine Spalte H wann dieser eingelöst wurde. Ich möchte nun erreichen, dass die entsprechende Zeile ausgeblendet wird, wenn sowohl in der Zelle G als auch in der Zelle H dieser Spalte ein Wert eingetragen wurde.
Wahrscheinlich lässt sich das nur mit VBA lösen, oder? Könnte da jemand helfen?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3220038098
Url: https://administrator.de/contentid/3220038098
Ausgedruckt am: 05.11.2024 um 23:11 Uhr
11 Kommentare
Neuester Kommentar
Servus @justlukas .
Automatisch sobald sich Zellen in den Spalten ändern folgendermaßen:
Grüße Uwe
Automatisch sobald sich Zellen in den Spalten ändern folgendermaßen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
If Not Intersect(Range("G:H"), Target) Is Nothing Then
For Each cell In Target
If Cells(cell.Row, "G") <> "" And Cells(cell.Row, "H") <> "" Then
cell.EntireRow.Hidden = True
End If
Next
End If
End Sub
Grüße Uwe
Zitat von @justlukas:
Kann man es einrichten, dass das Ausblenden nicht automatisch (also ich Echtzeit), sondern per Knopfruck bzw. per Schaltfläche passiert?
Klar, Code oben in dem Sheet austauschen durchKann man es einrichten, dass das Ausblenden nicht automatisch (also ich Echtzeit), sondern per Knopfruck bzw. per Schaltfläche passiert?
Sub HideRows()
Dim r As Long
For r = 1 To UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Cells(r, "G") <> "" And Cells(r, "H") <> "" Then
Rows(r).Hidden = True
End If
Next
End Sub
Bzw. wenn man den Code nicht im Code-Backend des jeweiligen Sheets platzieren möchte sondern egal wo (Modul/Klasse) so schreiben und das Sheets(1) durch das jeweils gewünschte Sheet ersetzen.
Sub HideRows()
Dim r As Long
With Sheets(1)
For r = 1 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
If .Cells(r, "G") <> "" And .Cells(r, "H") <> "" Then
.Rows(r).Hidden = True
End If
Next
End With
End Sub
Hallo Lukas,
warum setzt du nicht einfach eine Formel rein die bei Vorhandensein von Werten in beiden Feldern ein Datum oder Feld leert. Anschließend auf diese Spalte einen Filter und diesen einfach aktualsieren.
Schon sind auch alle Zeilen weg.
Man muss doch nicht jede Kleinigkeit mit einer "Programmierung" lösen.
Zumal du ja sowieso irgendwo hin klicken willst damit es ausgeblendet wird.
Grüße vom it-frosch
warum setzt du nicht einfach eine Formel rein die bei Vorhandensein von Werten in beiden Feldern ein Datum oder Feld leert. Anschließend auf diese Spalte einen Filter und diesen einfach aktualsieren.
Schon sind auch alle Zeilen weg.
Man muss doch nicht jede Kleinigkeit mit einer "Programmierung" lösen.
Zumal du ja sowieso irgendwo hin klicken willst damit es ausgeblendet wird.
Grüße vom it-frosch
Zitat von @colinardo:
und mit Button verbinden.
Bzw. wenn man den Code nicht im Code-Backend des jeweiligen Sheets platzieren möchte sondern egal wo (Modul/Klasse) so schreiben und das Sheets(1) durch das jeweils gewünschte Sheet ersetzen.
Zitat von @justlukas:
Kann man es einrichten, dass das Ausblenden nicht automatisch (also ich Echtzeit), sondern per Knopfruck bzw. per Schaltfläche passiert?
Klar, Code oben in dem Sheet austauschen durchKann man es einrichten, dass das Ausblenden nicht automatisch (also ich Echtzeit), sondern per Knopfruck bzw. per Schaltfläche passiert?
Sub HideRows()
Dim r As Long
For r = 1 To UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Cells(r, "G") <> "" And Cells(r, "H") <> "" Then
Rows(r).Hidden = True
End If
Next
End Sub
Bzw. wenn man den Code nicht im Code-Backend des jeweiligen Sheets platzieren möchte sondern egal wo (Modul/Klasse) so schreiben und das Sheets(1) durch das jeweils gewünschte Sheet ersetzen.
Sub HideRows()
Dim r As Long
With Sheets(1)
For r = 1 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
If .Cells(r, "G") <> "" And .Cells(r, "H") <> "" Then
.Rows(r).Hidden = True
End If
Next
End With
End Sub
Ich schließe mich Lukas an, danke für den Beitrag!
Allerdings benötige ich für meinen zweck eine kleine Änderung an dem Code:
Die Zelle soll nicht nur befüllt sein, sondern einen bestimmten wert erhalten.
Beispiel: In Spalte "G" soll der Wert größer 1 o.ä. sein (die Zellen in der Spalte werden mit einem datum befüllt). In Spalte "H" wird enwteder Ja oder nein geschrieben werden. Wenn dann in Spalte G ein Datum und in Spalte H ein Ja steht, soll die Zelle, in der das vorkommt ausgeblendet werden. Bei nein muss nichts passieren. Bei der bestehenden Formel wurde die erste Zelle in der Spalte A1 (wird als Spalten Überschrift genutzt) auch gelöscht. Deswegen wenn möglich die Zeile 1 komplett von dem Code aussparen. Vielen Dank vorab!!
Servus @ThePoly, willkommen auf Administrator.de!
Grüße Uwe
Beispiel: In Spalte "G" soll der Wert größer 1 o.ä. sein (die Zellen in der Spalte werden mit einem datum befüllt). In Spalte "H" wird enwteder Ja oder nein geschrieben werden. Wenn dann in Spalte G ein Datum und in Spalte H ein Ja steht, soll die Zelle, in der das vorkommt ausgeblendet werden. Bei nein muss nichts passieren. Bei der bestehenden Formel wurde die erste Zelle in der Spalte A1 (wird als Spalten Überschrift genutzt) auch gelöscht. Deswegen wenn möglich die Zeile 1 komplett von dem Code aussparen. Vielen Dank vorab!!
Gerne kein Problem, das erreichst du hiermit:Sub HideRows()
Dim r As Long
With Sheets(1)
For r = 2 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
If IsDate(.Cells(r, "G").Value) And LCase(.Cells(r, "H").Value) = "ja" Then
.Rows(r).Hidden = True
End If
Next
End With
End Sub
Hallo Uwe,
besten dank für die schnelle Rückmeldung!
Es funktioniert leider noch nicht ganz, folgender Stand:
Ich habe deinen Code 1:1 übernommen, lediglich habe ich durch ausgetauscht. Leider lässt er sich nicht ausführen und bemängelt folgenden Abschnitt
Kann es sein, dass es mit dem Button bereits in dem Code vorkommt? Und was hat es mit auf sich, muss ich da etwas anpassen?
Noch eine kleine Anmerkung: der Fehler lautet: "Fehler beim Kompilieren: Unzulässiger oder nicht ausreichend definierter Verweis"
Vielen Dank!
Ricardo
besten dank für die schnelle Rückmeldung!
Es funktioniert leider noch nicht ganz, folgender Stand:
Ich habe deinen Code 1:1 übernommen, lediglich habe ich
Sub HideRows()
Private Sub CommandButton1_Click()
.UsedRange
Kann es sein, dass es mit dem Button bereits in dem Code vorkommt? Und was hat es mit
With Sheets(1)
Noch eine kleine Anmerkung: der Fehler lautet: "Fehler beim Kompilieren: Unzulässiger oder nicht ausreichend definierter Verweis"
Vielen Dank!
Ricardo
Steht eigentlich oben schon alles im Beitrag für beide Varianten ausführlich erklärt. Bitte auch diese erst lesen. Merci.
Wenn du also einen Button hast kannst du die Methode aus dessen Click-Event so ausführen
Das Sheets(1) bezeichnet das Arbeitsblatt auf dem der folgende Code ausgeführt wird, in dem Fall also das erste Sheet der Arbeitsmappe!
Du kannst hier auch mir Namen arbeiten, bspw. With Sheets("Tabelle1"), oder auch With ActiveSheet für das aktuell ausgewählte Sheet.
Bei weiteren Grundlagen-Fragen dazu bitte PN damit der Thread des TOs hier nicht unübersichtlich wird (s. Diskussionsrichtlinien). Merci.
<Closed>
Grüße Uwe
Wenn du also einen Button hast kannst du die Methode aus dessen Click-Event so ausführen
Private Sub CommandButton1_Click()
HideRows
End Sub
Sub HideRows()
Dim r As Long
With Sheets(1)
For r = 2 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
If IsDate(.Cells(r, "G").Value) And LCase(.Cells(r, "H").Value) = "ja" Then
.Rows(r).Hidden = True
End If
Next
End With
End Sub
Das Sheets(1) bezeichnet das Arbeitsblatt auf dem der folgende Code ausgeführt wird, in dem Fall also das erste Sheet der Arbeitsmappe!
Du kannst hier auch mir Namen arbeiten, bspw. With Sheets("Tabelle1"), oder auch With ActiveSheet für das aktuell ausgewählte Sheet.
Bei weiteren Grundlagen-Fragen dazu bitte PN damit der Thread des TOs hier nicht unübersichtlich wird (s. Diskussionsrichtlinien). Merci.
<Closed>
Grüße Uwe