• 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.

Verbergen van rijen wanneer een tussenliggende waarde niet binnen een tijdlijn ligt.

Status
Niet open voor verdere reacties.

mike564

Gebruiker
Lid geworden
11 dec 2015
Berichten
83
Beste helpers,

Ik gebruik een code waarmee rijen op basis van wanneer een waarde voorkomt in een bepaalde kolom, deze worden verborgen/zichtbaar worden gemaakt.
Dat is de onderstaande code (staat ook in het bijgevoegde bestand):

Code:
Sub RechthoekafgerondehoekenTest_Klikken()
Set Rh = [H1]: Set Rv = [H1]
Application.ScreenUpdating = False
    For Each cl In Columns(11).SpecialCells(12)
            If cl = "B" Or cl = "C" Then Set Rh = Union(Rh, cl.Resize(9, 1))
            'idealiter zou zijn, dat wanneer het niet gelijk is aan "A" en niet gelijk is aan niks, het wordt verborgen
            '(in dit geval dus alleen de cellen waar een B en een C in staan, in het echt zijn dit meer variabelen)
            'Het onderstaande werkt niet
            'If cl <> "A" Or cl <> "" Then Set Rh = Union(Rh, cl.Resize(9, 1))
            If cl.Offset(, -5) = "8" Then Set Rh = Union(Rh, cl.Offset(1).Resize(7, 1))
    Next cl
    Rv.EntireRow.Hidden = False
    Rh.EntireRow.Hidden = True
    [H1].EntireRow.Hidden = False
Application.ScreenUpdating = True
End Sub

Nu heb ik in mijn voorbeeld een algemene tijdlijn van (jaar-week) 18-25 t/m 18-28.
Als ik bijvoorbeeld een project heb dat loopt van week 18-24 t/m 18-30, dan heeft de tijdlijn van het project tussenliggende waardes die binnen de algemene tijdlijn vallen,
maar is er ook een deel dat buiten de algemene tijdlijn valt.

Nu wil ik dus de alleen de projecten verbergen die geheel buiten de tijdlijn vallen.
Echter krijg ik het niet voor elkaar een formule/code te samen te stellen die er voor zorgt dat wanneer een project tijdlijn wel deels binnen de algemene tijdlijn valt, deze zichtbaar blijft.
Het bestand geeft denk ik meer duidelijkheid.

Bekijk bijlage Verbergen tussenliggende waardes.xlsb

Ik hoop dat jullie mij een beetje begrijpen!

Mike
 
Code:
Sub M_snb()
    For Each it In Blad7.Cells(4, 1).CurrentRegion.Columns(11).SpecialCells(4).Areas
       If Val(Right(it.Offset(-1).Cells(1), 2)) > 28 Or Val(Right(it.Offset(-1, 1).Cells(1), 2)) < 25 Then it.Offset(-1).Resize(it.Rows.Count + 1).EntireRow.Hidden = True
    Next
End Sub

NB. de 'lege' cellen in kolom K moeten wel eerst echt leeg gemaakt worden.
 
Laatst bewerkt:
Ik heb er ook eentje
Code:
Sub tsh()
    Dim Cl As Range
    
    Rows.Hidden = False
    For Each Cl In Columns(11).SpecialCells(2)
        If Cl <> "" Then
            If Intersect(Range(Replace(Range("B1").Value & ":" & Range("C1").Value, "-", "0")), _
                Range(Replace(Cl.Offset(, 1).Value & ":" & Cl.Offset(, 2).Value, "-", "0"))) Is Nothing Then
                    Cl.Resize(9).EntireRow.Hidden = True
            End If
        End If
    Next
End Sub
 
Bedankt voor de reacties!

Bij de code van snb krijg ik een foutmelding. Als ik kolom K leeg maak dan wordt alles verborgen. In mijn echte bestand staat in kolom K een formule, waarbij het resultaat in de donkergrijze opmaak alleen een resultaat anders dan "" heeft.
De code van Timshel werkt wel in mijn bestand.

Mijn echte bestand is best een groot planningsbestand, met aardig wat knoppen voor opties om te verbergen, of juist om zichtbaar te maken.
Nu heb ik mij ooit laten vertellen dat het gebruik van de functie union een pré was om hoogste snelheid te waarborgen.
Dat is in mijn voorbeeldbestand niet het geval, Timshel zijn code is hier een stuk sneller.

Ik zou graag de code in mijn 1e post willen aanvullen met de functie waar Timshel de code voor gemaakt heeft, op de manier met de zo hoogst mogelijke verwerkingssnelheid (echte bestand heeft pakweg 2600 rijen).
Nu is me dit zelf nog niet echt gelukt.

De meeste knoppen in mijn bestand voeren een code uit die er ongeveer als onderstaand uitziet:

Code:
Sub RechthoekafgerondehoekenTest_Klikken()
ActiveSheet.Unprotect
Set Rh = [H1]: Set Rv = [H1]
Application.ScreenUpdating = False
    For Each cl In Columns(6).SpecialCells(12)
            If cl = "L" Or cl = "FA" Then Set Rv = Union(Rv, cl.Resize(9, 1)) 'Zijn statussen waardoor het hele project zichtbaar moet worden
            If cl = "A" Or cl = "MA" Or cl.Offset(, -4) = "0" Then Set Rh = Union(Rh, cl.Resize(9, 1)) 'Zijn statussen waardoor het hele project moet worden verborgen
            If cl = "8" Then Set Rh = Union(Rh, cl.Offset(1).Resize(7, 1)) 'Zijn de taken die verborgen moeten worden voor een compacte planning
            If cl.Offset(, 5) = "B" Or cl.Offset(, 5) = "C" Then Set Rh = Union(Rh, cl.Resize(9, 1)) 'Als aan deze voorwaarden wordt voldaan, dan wil je dit project niet zichtbaar hebben
    Next cl
    Rv.EntireRow.Hidden = False
    Rh.EntireRow.Hidden = True
    [H1].EntireRow.Hidden = False
Application.ScreenUpdating = True
ActiveSheet.Protect , AllowFiltering:=True, AllowSorting:=True, AllowFormattingCells:=True
End Sub

Deze wil ik graag uitbreiden met de functionaliteit van de code die Timshel heeft gemaakt
 
Een goed gelijkend voorbeeldbestand doet wonderen.

Goed lezen ook:

NB. de 'lege' cellen in kolom K moeten wel eerst echt leeg gemaakt worden.
 
Laatst bewerkt:
Het lijkt me discutabel dat het snelheidsverschil verklaard wordt door het gebruik van Union. Ik denk eerder dat het hiermee te maken heeft:
Code:
For Each cl In Columns(6).SpecialCells(12) 'xlCellTypeVisible = 12
Deze loop doorloopt de complete kolom tot en met rij 1048576.
Voor de rest begrijp ik niet hoe mijn code geïntegreerd moet worden. Wellicht is het beter om eerst alle rijen zichtbaar te maken
Code:
Rows.Hidden = False
zodat je daarna alleen nog hoeft te bedenken welke rijen moeten worden verborgen.
In plaats van een rijtje if-statements vind ik het netter om Select Case te gebruiken.
 
Bijgevoegd heb ik een voorbeeldbestand dat op de echte gegevens na identiek is.

In de knop waar alleen een "A" in staat, wil ik graag jullie functie in verwerken. Eigenlijk zou ik graag willen leren hoe je beide functies in één klik/knop kan verwerken.
Het zou waarschijnlijk op een andere manier moeten dan hoe ik het nu overal heb gedaan, maar dat vind ik niet erg.

@Timshel, ik heb ook wel eens geprobeerd om een range in te stellen, maar dat ging niet helemaal goed, de snelheid is ook nog best oké, sneller/minder zwaar is natuurlijk altijd beter.
Hoe bedoel je dat precies, met Select Case i.p.v. If statements?

Hoe ik het nu allemaal heb gedaan zal bij lange na niet zo neat & clean zijn als jullie het zouden doen ;), maar als iemand een mooiere oplossing heeft en mij gelijkertijd wat bij kan leren,
dan kan ik dit zelf mooi toepassen op de rest:)

Bekijk bijlage Projectplanning totaal.zip
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan