• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Voorwaardelijk rijen verbergen

Status
Niet open voor verdere reacties.

Excelgeek

Gebruiker
Lid geworden
5 dec 2020
Berichten
5
Hallo,

Om voorwaardelijk een rij automatisch te verbergen heb ik de volgende VBA-code gevonden:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [A1] = "nee" Then
Rows("2").EntireRow.Hidden = True
Else
Rows("2").EntireRow.Hidden = False
End If
End Sub

Vraag: Maar wat als er nu een rij in de spreadsheet wordt toegevoegd boven rij 2 en de originele rij 2 dan rij 3 wordt? Hoe kan ik het voorwaardelijk verbergen van een rij dynamisch maken?

Alvast bedankt voor jullie hulp!

Groet,
Excelgeek
 
geef die rij of een cel uit die rij een naam en gebruik die dan om die rij te verbergen, iets in de zin als range("MijnOorspronkelijkeCelA2").entirerow.hidden=(range("A1").value="nee").
Als bijvraag, moet dat met een selection_change event, is dat niet een beetje overkill ?
 
Laatst bewerkt:
Deze misschien?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Range
    For Each x In Range("A1:A100")
        If x.Value = "nee" Then
            x.Offset(1, 0).EntireRow.Hidden = True
        Else
            x.Offset(1, 0).EntireRow.Hidden = False
        End If
    Next
End Sub


Pas wel het bereik A1:A100 aan naar het bereik waar nee in kan voorkomen.
Zet niet "A:A", want dan wordt het bereik te groot. Had ik eerst geprobeerd, maar 'k heb m'n bestand dan geforceerd moeten afsluiten gezien het te veel tijd in beslag nam.

succes
Luc
 
De 'Else' statement is overbodig.
 
Toch niet :).
Enfin... hangt er natuurlijk vanaf wat de gebruiker echt wil.
Maar die Else maakt de rij opnieuw zichtbaar als je die nee verwijdert.
Iets wat je eigenlijk ook mag verwachten indien je de oorspronkelijke code bekijkt.
 
Pas wel het bereik A1:A100 aan naar het bereik waar nee in kan voorkomen.
Zet niet "A:A", want dan wordt het bereik te groot. Had ik eerst geprobeerd, maar 'k heb m'n bestand dan geforceerd moeten afsluiten gezien het te veel tijd in beslag nam.
Zo kan dat wel:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    For Each x In Range("A:A").SpecialCells(2)
        x.Offset(1, 0).EntireRow.Hidden = x.Value = "nee"
    Next
End Sub
En is die hele If..Then..Else constructie dus niet nodig ;)
 
Laatst bewerkt:
Bij iedere change gaat hij een loop maken. Ik zou een intersect invoegen of de code onder een worksheet_activate event zetten
 
Of een controle als eerste regel:
Code:
If Target.Column > 1 Then Exit Sub
 
#2 lijkt mij de juiste oplossing in deze.
 
Opgelet met die SpecialCells(2).
Dan kijk je niet naar de cellen die je gewoon leegmaakt.
Dus als daar ooit 'nee' in stond, en je gaat die vervolgens verwijderen, dan blijft de rij verborgen.

Ik geef wel toe dat de code wellicht korter kan. En dat je ook het bereik dynamisch kan maken. Dat je dit automatisch gaat uitbreiden als er meer gegevens in het werkblad komen.
Maar goed, dat was de uiteindelijke vraag ook niet.
 
De vraag van TS is kort en duidelijk, maar de beste oplossing is helemaal afhankelijk van de context waarin het gebruikt gaat worden.
Daarom zijn voorbeeld documenten altijd zo handig :)
 
Voorbeeldbestand bij vraag dynamisch voorwaardelijk rijen verbergen

Hallo allen,

Dank voor jullie (snelle) reacties! Het is mij nog niet helemaal helder. Edmoor's suggestie heb ik opgevolgd en een voorbeeldbestand bijgevoegd. Als cel J7 op "Nee" staat, worden de regels 10:22 verborgen. Maar wat als is ik boven regel 10 een regel toevoeg? Hoe kan ik ervoor zorgen dat het blijft werken?

Alvast bedankt voor jullie hulp.

Groet,
Excelgeek
 

Bijlagen

Als je nu eens alle reacties leest te beginnen bij #2 dan was het al opgelost geweest.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address(0, 0) = "J7" Then Range("Hoofdstuk1").EntireRow.Hidden = Target.Value = "Nee"
End Sub
 

Bijlagen

Geef je cellen een naam.
In mijn voorbeeld heb ik de cel Ja/Nee de naam JaNeeCel genoemd.
En de regels die verborgen moeten worden: TeVerbergen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("TeVerbergen").EntireRow.Hidden = Not (Range("JaNeeCel").Value = "Nee")
End Sub

Gebruik ook niet de methode: Worksheet_SelectionChange. Dat werkt immers telkens je iets anders selecteert, wat dus té veel is.
Gebruik dus Worksheet_Change

Luc
 

Bijlagen

Als ik probeer te begrijpen wat je wil bereiken, heb je eigenlijk helemaal geen VBA nodig.
Ga eens naar 'Gegevens', en daarna 'Groeperen.
Je selecteert dan het gebied tussen de groene rijen (groene rijen niet meeselecteren!!!)
En vervolgens klik je op groeperen.
En zo doe je dat voor elk gebied.
Nu kan je met de plustekens bij de rijhoofden kiezen wat je al dan niet wil verbergen.
Voorbeeld is toegevoegd. Macro's staan er nog altijd in, maar die kan je dan verwijderen.
 

Bijlagen

ik zie dat LucHeyndrixks me net voor is en ongeveer hetzelfde denkt, doch zonder VBA

Klopt :). Uiteraard groene rijen niet meeselecteren, anders zie je niet meer wat je gaat openen :).

Maar nu we toch bezig zijn: ik merk dat het ergens gaat om kostenberekening.
Misschien is het dan wel handig om via dezelfde weg eens een oogje te werpen op 'Subtotalen'.
Ik zie uiteraard maar een deeltje van wat bereikt moet worden, maar ik vermoed dat het wel die weg zal uitgaan. 't Is misschien zelfs méér dan de vraagsteller oorspronkelijk in gedachten had.
 
en dat ik je naam fout spelde.
 
Meerder secties dynamisch voorwaardelijk rijen verbergen

Dag helpers,

Voor mijn vraag is dit de beste oplossing en heb ik zelf kunnen toepassen:

Private Sub Worksheet_Change(ByVal Target As Range)
Range("TeVerbergen").EntireRow.Hidden = Not (Range("JaNeeCel").Value = "Nee")
End Sub

Allen dank voor het meedenken en aandragen van oplossingen.

Maar wat nu als ik meerdere van dit soort secties wil beheersen. Wat is dan de VBA-code? Een tweede dergelijke code toevoegen werkt niet...

Alvast bedankt.

Groet,
Excel
 
Verander de namen in je bestand. (JaNeeCel zou dan kunnen worden : JaNeeCel1; JaNeeCel2 enz) en (TeVerbergen wordt dan TeVerbergen1; TeVerbergen2 enz).
Je moet dan uiteraard ook dezelfde code meermaals gebruiken.

vb:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
     Range("TeVerbergen1").EntireRow.Hidden = Not (Range("JaNeeCel1").Value = "Nee")
     Range("TeVerbergen2").EntireRow.Hidden = Not (Range("JaNeeCel2").Value = "Nee")
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan