[VBA+Excel] Loop over kolommen + show/hide criterium

Pagina: 1
Acties:
  • 346 views sinds 30-01-2008
  • Reageer

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Wat is mijn doel:
Ik heb 1 totale tabel met alle gegevens. Afhankelijk van een bepaalde doelgroep moet er een filter overheen worden gehaald die irrelevante informatie voor die doelgroep niet laat zien.

Hieronder een voorbeeld van data die ik heb in Excel. Uiteraard is mijn tabel een stuk groter, maar eerst maar eens aan de gang krijgen wat ik zou willen met een klein voorbeeld...
code:
1
2
3
4
5
overview  name  purpose reason  place
all         1     1       1       1
filtered    1     0       0       1
          Jantje  bla   blo     Eindhoven
          Pietje  yadi  yada    Amsterdam

Nu weet ik in woorden wel wat ik wil:
Loop over alle kolommen, kijk naar de 1 of 0 (1 is show, 0 is hide) en filter de data afhankelijk van wat voor overview: all/ filtered. Het grote voordeel van deze manier is dat ik later heel makkelijk een bepaalde kolom voor een bepaalde view kan toevoegen of juist weer weglaten door de 0 in een 1 te veranderen en vice versa.

Dus bij overview 'all' moet dit er komen:
code:
1
2
3
name  purpose reason  place
Jantje  bla   blo     Eindhoven
Pietje  yadi  yada    Amsterdam

En bij overview 'filtered' moet dit getoond worden:
code:
1
2
3
name  place
Jantje  Eindhoven
Pietje  Amsterdam


Nu wil ik dit graag in VBA doen zodat ik voor de gebruiker een optie cq button kan geven om de verschillende overzichten te genereren/ laten zien. Ik heb ook gekeken naar Advanced filtering, maar daar krijg ik niet uit wat ik wil, maar misschien kan het toch wel daarmee? Ook heb ik gekeken naar de group/ungroup functionaliteit, maar dat lijkt ook niet te zijn wat ik wil.

In VBA weet ik hoe ik functies moet maken, een cell selecteren of een kolom selecteren, maar hoe loop ik over een aantal kolommen waarbij ik bij die kolom een criterium stel op een bepaalde cell en dan een range laat zien?

Misschien denk ik gewoon te moeilijk en kan het op een andere manier, dan hoor ik het ook graag.

En ja, ik weet dat de data eigenlijk beter in een database gezet kan worden, maar helaas is dat op dit moment geen optie.

Ook Knor is aangestoken met het ligfietsvirus!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

VBA? Excel? Klinkt als een topic voor Officesuites en -software :)
Move -> Officesuites en -software

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 17:49

Dido

heforshe

Het loopen kun je doen met:

code:
1
2
3
4
For Each kolom In Sheet1.Columns
...
...
Next

Wat betekent mijn avatar?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

bv:
code:
1
2
3
4
5
6
Sub showhide(filter)
    Dim r As Range
    For Each r In ActiveSheet.Columns
        r.Hidden = ((r.Cells(1, 1) And filter) <> filter)
    Next r
End Sub

In dit geval maak je gebruik van één filterveld waarin je de verschillende opties bitsgewijze combineert. Bv een veld kolom met 1101 (13) wordt getoond als bovenstaande routine wordt aangeroepen met 1,4, of 8.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 03-02 15:29
Bedankt, dat heeft me inderdaad op het goede spoor gezet en geholpen. Ik ben mijn code nog wat aan het optimaliseren, maar dit werkt al:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub show_overview_1()
    Dim column As Range
    For Each column In Sheet1.Columns
        If column.Cells(2, 1) = 0 Then
            column.Hidden = True
        Else
            column.Hidden = False
        End If
        If column.Cells(1, 1) = Empty Then
            Exit For
        End If
    Next
End Sub

Ook Knor is aangestoken met het ligfietsvirus!