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

Filteren op kolom inclusief lege regels (filter op groep?)

Status
Niet open voor verdere reacties.

Martini71

Gebruiker
Lid geworden
26 dec 2019
Berichten
8
Dag Exceldeskundigen,
Wat beter te doen op zo'n tweede kerstdag dan wat vooruitgeschoven excelproblemen oplossen...:rolleyes:

Zie bijlage
Ik heb een uitgebreide excel op dit principe. De volgende filters zouden in het bestand moeten:
1) Filter op kolom 1
in kolom 1 staan de projectnamen. Maar niet iedere regel is gevuld: ieder project staat 1x benoemd, dan een reeks van lege regels tot projectnaam 2. In kolom B staan wel gegevens die bij het project horen. De lege regels van kolom 1 moeten dus niet weg gefilterd worden...
Ik heb kolom 2 als 'groep' ingedeeld; misschien een deel van de oplossing, maar ik loop hier echt vast. Wie heeft een oplossing?

(een oplossing is NIET: in kolom 1 de projectnamen doorkopieren op de lege regels; dat creeert een fout in de praktijk -zal ik nu niet verder toelichten; neem het maar van me aan ;-) -

2) een filter op de resources; deze lijkt me dan gemakkelijk: dus filter op alleen 'peter'.

3) Een 'nice to have': een filter op een periode (bijv. van week 12 tot 18). Maar met 1 en 2 ben ik al erg blij!

Hoop dat er meer mensen als ik nu aan het excellen zijn. Op voorhand dank!!!
 

Bijlagen

Filteren werkt alleen op gestructureerde data. De 2 comboboxen in het bestand werken niet.
 
Ha VenA,
Klopt, de filter moet in die comboboxen komen; ze werken dus idd nog niet... Da's precies de vraag!
 
In de comboboxen staat nog niets waar moet dan op gefilterd worden? Dus deze moeten eerst gevuld worden? Heb je een aparte tabel met de projecten en de resources? Of moeten deze uit Blad1 gehaald worden? Het zal een VBA oplossing worden en dan moet het voorbeeld zo compleet mogelijk zijn.
(een oplossing is NIET: in kolom 1 de projectnamen doorkopieren op de lege regels; dat creeert een fout in de praktijk -zal ik nu niet verder toelichten; neem het maar van me aan ;-)
Welke fout dan? Mag het wel tijdelijk gevuld worden?
 
In de comboboxen staat nog niets waar moet dan op gefilterd worden? Dus deze moeten eerst gevuld worden?

>> klopt, dat is de keuzelijst voor de kolom ‘projecten’ (bron kan een lijstje uit map 3 zijn - staat er nu niet; of uit de kolom zelf halen) en voor Resources (namen van de teamleden; idem als bij projecten)

Heb je een aparte tabel met de projecten en de resources? Of moeten deze uit Blad1 gehaald worden?

>> kan dus beide; nog geen voorkeur

Het zal een VBA oplossing worden en dan moet het voorbeeld zo compleet mogelijk zijn.

Welke fout dan? Mag het wel tijdelijk gevuld worden?

>> ik bouw een resourceplanning. Iedereen in mijn team zal daar mee werken. Ervaring leert dat zij die gegevens vaak niet invullen.
Als de excel werkt op een ingevulde kolom, en deze is dat niet 100%, dan zal ik werkzaamheden gaan missen.
Tijdelijk vullen kan...
(Is het handig dat ik je het origineel mail?)
 
Het volledig quoten van een bericht is niet nodig. Iedereen kan lezen wat er in #4 staat. Om het dan volledig te herhalen is nogal overbodig.:d Ik wil het complete bestand niet, is ook niet het doel van dit forum. Plaats een representatief voorbeeld. En geef antwoord op de gestelde vragen.
 
aha, ben een nieuwkomer...
>> klopt, dat is de keuzelijst voor de kolom ‘projecten’ (bron kan een lijstje uit map 3 zijn - staat er nu niet; of uit de kolom zelf halen) en voor Resources (namen van de teamleden; idem als bij projecten)
 
Voor het vullen van de comboboxen kan je zoiets gebruiken.
Code:
Sub VenA()
  With Sheets("Blad1")
    ar = .Range("A4:D" & .Cells(Rows.Count, 4).End(xlUp).Row)
    For j = 1 To UBound(ar)
      If ar(j, 1) <> "" Then c00 = c00 & "|" & ar(j, 1)
      If ar(j, 4) <> "" Then
        If InStr(c01, ar(j, 4)) = 0 Then c01 = c01 & "|" & ar(j, 4)
      End If
    Next j
    .ComboBox1.List = Split(Mid(c00, 2), "|")
    .ComboBox2.List = Split(Mid(c01, 2), "|")
  End With
End Sub

Voor het filteren op projecten
Code:
Private Sub ComboBox1_Change()
  Set r = Range("A3:D" & Cells(Rows.Count, 4).End(xlUp).Row)
  On Error Resume Next
  If ComboBox1.ListIndex > -1 Then
    r.Columns(1).SpecialCells(4).FormulaR1C1 = "=R[-1]C"
    r.Columns(1).AutoFilter 1, ComboBox1.Value, , , False
    Columns(1).SpecialCells(-4123).ClearContents
   Else
    r.Columns(1).AutoFilter
    Columns(1).SpecialCells(-4123).ClearContents
  End If
End Sub

Als alternatief voor het filteren
Code:
Private Sub ComboBox1_Change()
  Rows.Hidden = False
  If ComboBox1.ListIndex > -1 Then
    For Each it In Range("A4:D" & Cells(Rows.Count, 4).End(xlUp).Row).Columns(1).SpecialCells(4).Areas
      it.Offset(-1).Resize(it.Rows.Count + 1).EntireRow.Hidden = it.Cells(1).Offset(-1) <> ComboBox1.Value
    Next it
  End If
End Sub
 
Laatst bewerkt:
Ja! Wat goed zeg!!! Super bedankt, dit geeft me een flinke stap vooruit, top!
 
@VenA
Ik probeer de code om te bouwen om hetzelfde te doen voor 'combobox2', zodat ik op naam (resource) kan filteren. Oftewel: exact hetzelfde, maar dan in een andere kolom. Resultaat is dan een overzicht van projectnaam (kolom 1) en de geselecteerde resource-naam (kolom 4).
Alle variabelen geprobeerd, maar ik kom er niet uit. Hoe zou de code hiervoor er uit moeten zien?
 
Laat maar zien dan wat je zoal geprobeerd hebt en waar je dan nog tegenaan loopt.
 
Ik heb een nieuwe combobox gemaakt genaamd 'combobox2'. Deze verwezen naar een reeks uit een andere tab, zodat iedere naam er maar 1x in voor komt. In de kolom er onder (kolom 4) staan de namen. Dus als ik op 'Marc' zoek, wil ik de selectie van projecten waar Marc aan werkt en de werkzaamheden die hij daarin uitvoert.

Ik heb in de codes gezocht naar de range en de kolom waarop gezocht wordt. Dus waar 'A4:D' (deze range kwam ik niet uit; waar staat 'D' voor? Lijkt incompleet, maar functioneert in jouw formule wel!). Ben er van uitgegaan dat deze range ook voor deze combobox klopt (wel wat aanpassingen geprobeerd: leidt niet tot zichtbaar resultaat).

Daarna gezocht naar de plek in code waar je verwijst naar de kolom waarin je wilt filteren. Dacht misschien in code achter ' .Columns(1). ' dat 1 staat voor kolom 1 en dit verandert in 4: kolom 4. Dit werkt niet.
Tot zover de logica. Daarna ben ik gaan kijken wat er verandert in de werking als ik aanpassingen doorvoer. Daar haal ik geen logische relatie tussen wijziging en functie uit. Bijvoorbeeld: Als ik in de code iets aanpas onder code Combobox2: bijv. rows.hidden = true (was false) en ik had bij combobox 1 al geselecteerd op 'projecten', dan verandert kolom 1 naar offertes. Das gek, want geen van de comboboxen geeft die tekst aan. Ook loop ik soms vast omdat ik het totaaloverzicht niet meer krijg, dus moet ik het bestand afsluiten om weer terug te gaan naar een volledig overzicht. Vervelend; het is een soort puzzel die ik probeer te snappen, maar niet lukt. Erg irritant...

Ik werk met jouw onderste code; 'alternatief voor filteren'
 
Ik zie nergens een bestand waar het hele lange verhaal uit blijkt. De combobox2 had je ook al in het eerste bestand. Zoals al eerder geschreven is deze opzet niet geschikt om te filteren zonder er allerlei code omheen te zetten. Moet het een OF/OF, EN/OF of EN/EN filter worden? Als je weinig van VBA weet dan kan je beter kiezen voor een goede opzet.;)
 
Zou het lukken zonder VBA denk je? Ik heb hier goed over nagedacht maar kom niet tot een beter model dan dit. Ik sta natuurlijk open voor tips ;-)
Het type filter weet ik niet zeker, ik denk EN/EN: dus eerst filter op naam (kolom 4) en dan op bovenliggend project (kolom 1)?
Ik heb het bestand aangepast; laatste versie in de bijlage.
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan