Sub taalfilter() ' CONTROL T
Application.ScreenUpdating = False
Dim levelx As String, level1 As String, level2 As String, level3 As String
Dim level4 As String, level5 As String, level6 As String, level7 As String
Dim level8 As String, level9 As String, level10 As String
Dim aantalnivos As Integer
' 1. deze indeling vastleggen
levelx = Range("A" & ActiveCell.Row).Value
aantalnivos = Len(levelx) - Len(WorksheetFunction.Substitute(levelx, ".", ""))
MsgBox "aantal niveaus is: " & aantalnivos
' 2. alle filters verwijderen
With ActiveSheet
If .AutoFilterMode Then
Set Rng = .AutoFilter.Range
If Rng.Rows.Count > Rng.SpecialCells(xlCellTypeVisible).Rows.Count Then
.ShowAllData
End If
End If
End With
' 3. twee eerste letters indeling markeren voor elk level indeling
level1 = Mid(levelx, 1, Len(levelx) - InStr(1, levelx, "."))
level2 = Mid(level1, 1, Len(level1) - InStr(1, level1, "."))
level3 = Mid(level2, 1, Len(level2) - InStr(1, level2, "."))
level4 = Mid(level3, 1, Len(level3) - InStr(1, level3, "."))
level5 = Mid(level4, 1, Len(level4) - InStr(1, level4, "."))
'level1 = Left(levelx, WorksheetFunction.Find(".", levelx) - 1)
'level2 = Left(level1, WorksheetFunction.Find(".", level1) - 1)
'level3 = Left(level2, WorksheetFunction.Find(".", level2) - 1)
'level4 = Left(level3, WorksheetFunction.Find(".", level3) - 1)
'level5 = Left(level4, WorksheetFunction.Find(".", level4) - 1)
MsgBox _
"niveau 1: " & level1 & Chr(10) & _
"niveau 2: " & level2 & Chr(10) & _
"niveau 3: " & level3 & Chr(10) & _
"niveau 4: " & level4 & Chr(10) & _
"niveau 5: " & level5
Exit Sub
level1 = Mid(levelx, WorksheetFunction.Find(".", levelx) + 1, Len(levelx))
If aantalnivos = 1 Then GoTo einde
level2 = Mid(level1, WorksheetFunction.Find(".", level1) + 1, Len(level1))
If aantalnivos = 2 Then GoTo einde
level3 = Mid(level2, WorksheetFunction.Find(".", level2) + 1, Len(level2))
If aantalnivos = 3 Then GoTo einde
level4 = Mid(level3, WorksheetFunction.Find(".", level3) + 1, Len(level3))
If aantalnivos = 4 Then GoTo einde
level5 = Mid(level4, WorksheetFunction.Find(".", level4) + 1, Len(level4))
If aantalnivos = 5 Then GoTo einde
level6 = Mid(level5, WorksheetFunction.Find(".", level5) + 1, Len(level5))
If aantalnivos = 6 Then GoTo einde
level7 = Mid(level6, WorksheetFunction.Find(".", level6) + 1, Len(level6))
If aantalnivos = 7 Then GoTo einde
level8 = Mid(level7, WorksheetFunction.Find(".", level7) + 1, Len(level7))
If aantalnivos = 8 Then GoTo einde
level9 = Mid(level8, WorksheetFunction.Find(".", level8) + 1, Len(level8))
If aantalnivos = 9 Then GoTo einde
level10 = Mid(level9, WorksheetFunction.Find(".", level9) + 1, Len(level9))
' ====================================================================
einde:
' filteren op elk niveau en markeren
MsgBox _
"niveau 10: " & level10 & Chr(10) & _
" niveau 9: " & level9 & Chr(10) & _
" niveau 8: " & level8 & Chr(10) & _
" niveau 7: " & level7 & Chr(10) & _
" niveau 6: " & level6 & Chr(10) & _
" niveau 5: " & level5 & Chr(10) & _
" niveau 4: " & level4 & Chr(10) & _
" niveau 3: " & level3 & Chr(10) & _
" niveau 2: " & level2 & Chr(10) & _
" niveau 1: " & level1 & Chr(10) & _
" niveau 0: " & levelx
' filteren per niveau
' ===============================================================
On Error Resume Next
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=levelx, Operator:=xlAnd
Set rngfound = Cells.Find(levelx, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & levelx
markeer
toonselectie
MsgBox "niveau 1"
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level1, Operator:=xlAnd
Set rngfound = Cells.Find(level1, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & level1
markeer
toonselectie
MsgBox "niveau 2"
If aantalnivos > 2 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level2, Operator:=xlAnd
Set rngfound = Cells.Find(level2, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & level2
markeer
toonselectie
MsgBox "niveau 3"
If aantalnivos > 3 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level3, Operator:=xlAnd
Set rngfound = Cells.Find(level3, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & level3
markeer
toonselectie
MsgBox "niveau 4"
If aantalnivos > 4 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level4, Operator:=xlAnd
Set rngfound = Cells.Find(level4, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & level4
markeer
toonselectie
MsgBox "niveau 5"
If aantalnivos > 5 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level5, Operator:=xlAnd
Set rngfound = Cells.Find(level5, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & level5
markeer
If aantalnivos > 6 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level6, Operator:=xlAnd
Set rngfound = Cells.Find(level6, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & levelx
markeer
If aantalnivos > 7 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level7, Operator:=xlAnd
Set rngfound = Cells.Find(level7, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & levelx
markeer
If aantalnivos > 8 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level8, Operator:=xlAnd
Set rngfound = Cells.Find(level8, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & levelx
markeer
If aantalnivos > 9 Then GoTo resultaat
' ===============================================================
ActiveSheet.ShowAllData
ActiveSheet.Range("rngindeling").AutoFilter Field:=1
Selection.AutoFilter Field:=Range("rngindeling").Cells(2, 1).Column, _
Criteria1:=level9, Operator:=xlAnd
Set rngfound = Cells.Find(level9, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False)
MsgBox "levelx is hier : " & levelx
markeer
' ====================================================================
resultaat:
filteruit
toonselectie
Exit Sub
leeg:
Application.ScreenUpdating = True
tooneersterij
End Sub