Zoekveld Excel laten werken in meerdere kolommen.

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Michael van S
  • Registratie: Januari 2008
  • Laatst online: 20-05 08:03
Beste Tweakers,

Zelf ben ik niet erg goed in Excel en al helemaal niet in code. Toch is het mij met de nodige YouTube tutorials gelukt om een deftige Movie Database te maken! Ik ben er erg blij mee, maar het komt soms voor dat ik niet weet of ik een film heb of niet. Ook komt het voor dat ik een acteur erg goed vind, en dan graag wil kijken of ik al meer films in bezit heb waar hij/zij in speelt. Het idee kwam dus naar boven om een zoekveld te maken. Een soort CTRL+F waar alleen de rijen naar boven komen met data die begint met of data bevat waar ik op zoek.

Dat zoekveld staat er nu in met behulp van VBA. Het werkt echter slechts in een kolom.

Als ik nu zoek op "War" dan komen al mijn Star Wars films naar boven. Ook de andere films waar "War" in staat zoals "World War Z", "War for the Planet of the Apes" en "Lord of War".

Afbeeldingslocatie: https://tweakers.net/i/AQEKbo4U8hYpPLEt1XI5QbCQYw0=/800x/filters:strip_exif()/f/image/i7ZEEYxv8TFfllWfD05ZuKtY.png?f=fotoalbum_large

Wat ik echter zou willen is dat ik ook op Director en Acteurs kan zoeken (let niet op de entries onder actors of director, die zijn fout ;) )

Afbeeldingslocatie: https://tweakers.net/i/7YWgV5rUS_bwfmRu7nppgrT36nc=/800x/filters:strip_exif()/f/image/RtkQsXbMBqYRLxTg6i8pRNzo.png?f=fotoalbum_large

Als ik in bovenstaand voorbeeld zou zoeken op "Tom Cruise" dan zou ik graag willen dat de films (of rijen) "Life" en Mad Max: Fury Road omhoog zouden komen.

Op dit moment is dat nog niet zo. Ik gebruik de volgende VBA code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub optBeginsWith_Click()
Call Searchbox_Change
End Sub

Private Sub optContains_Click()
Call Searchbox_Change
End Sub

Private Sub Searchbox_Change()
If optBeginsWith Then
    ListObjects("collection").Range.AutoFilter Field:=2, Criteria1:=Range("K1") & "*"
                                      
Else
    ListObjects("collection").Range.AutoFilter Field:=2, Criteria1:="*" & Range("K1") & "*"
                                 
End If
End Sub


Na een hoop gegoogle, denk ik dat de functie die ik gebruik (AutoFilter) slechts werkt op een kolom, en dat dit niet op meerdere kolommen kan. Jammer natuurlijk, want dat is precies wat ik wil. De enige oplossing die ik kan bedenken is dat ik gewoon meedere zoekvelden gebruik, een voor films, een voor acteurs en een voor regisseurs.

Is er een andere functie die ik kan gebruiken om resultaten te filteren op basis van meedere kolommen? Ik zou oneindig dankbaar zijn voor de gouden tip! :9

Alle reacties


Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 20:56
Mijn VisualBasic is ernstig roestig, maar ik zie op regel 11 en 14
code:
1
Field:=2


Ik heb een donkerbruin vermoeden dat deze de filter op de Title kolom laat afhandelen. Heb je gericht gezocht of 't mogelijk is hier meerdere velden op te geven?

Acties:
  • 0 Henk 'm!

  • Michael van S
  • Registratie: Januari 2008
  • Laatst online: 20-05 08:03
ShitHappens schreef op maandag 6 december 2021 @ 20:35:
Mijn VisualBasic is ernstig roestig, maar ik zie op regel 11 en 14
code:
1
Field:=2


Ik heb een donkerbruin vermoeden dat deze de filter op de Title kolom laat afhandelen. Heb je gericht gezocht of 't mogelijk is hier meerdere velden op te geven?
Dat klopt! Ik heb geprobeerd daar van alles aan toe te voegen. 2,3 2+3 2:3 2;3 2&3, maar too no avail :'(

Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 00:08

g0tanks

Moderator CSA
Michael van S schreef op maandag 6 december 2021 @ 20:30:
Na een hoop gegoogle, denk ik dat de functie die ik gebruik (AutoFilter) slechts werkt op een kolom, en dat dit niet op meerdere kolommen kan.
Dit dus.

Ik weet geen simpele manier om te bereiken wat je wil. Je moet dan juist filteren op het nummer van de film (dan blijf je bij één kolom) en code schrijven om te bepalen welke nummers voldoen aan jouw zoekcriteria.

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 20:56
https://docs.microsoft.co...pi/excel.range.autofilter en inderdaad; je kunt met AutoFilter wel op meerdere kolommen filteren, maar dan wel op basis van een AND conditie.

code:
1
2
3
4
Private Sub TextBox1_Change()
    ListObjects("Table1").Range.AutoFilter Field:=2, Criteria1:="*" & TextBox1.Value & "*"
    ListObjects("Table1").Range.AutoFilter Field:=9, Criteria1:="*" & TextBox1.Value & "*"
End Sub

Werkt dus op zich wel; maar wordt dus gezocht in zowel titel als genre en alleen regels getoond waarin beide de zoekterm bevatten.
Dan zou toch bijna de kortste route zijn om met meerdere TextBoxes te werken, eentje voor elke kolom waarin je zou willen zoeken.

Of je zou af moeten stappen van AutoFilter, en een andere strategie zoeken om regels te verbergen/tonen.

Acties:
  • 0 Henk 'm!

  • DVX73
  • Registratie: November 2012
  • Laatst online: 23:09
Je zou een macro kunnen schrijven om alle filmtitels te vinden bij een zoekopdracht en dan die filmtitels aan een filter toevoegen.

Hiervoor kan je :
  1. de tabel importeren als een array.
  2. Door de gewenste kolommen zoeken.
  3. matches in een nieuwe array wegschrijven
  4. Filter aanmaken op de tabel obv de array met matches
Zoals @ShitHappens zei is meerdere boxes maken een makkelijkere oplossing.

Acties:
  • 0 Henk 'm!

  • Michael van S
  • Registratie: Januari 2008
  • Laatst online: 20-05 08:03
Bedankt voor de reacties allemaal.

@g0tanks In mijn hoofd was het zo makkelijk, een paar 2;3;4;5;6 toevoegen en ik was er, maar helaas :p

@ShitHappens Inderdaad, als alleen regels getoond worden waarin de zoekterm in beide rijen te vinden valt, dan lukt dat niet, aangezien ik zoek op rij specifieke info. Directors staan niet onder Movies. Het is dan beter om inderdaad met aparte zoekbalken te gaan werken.

@DVX73 Oei, van macro's heb ik nog geen kaas gegeten, het gaat er echter wel om om resultaten in de tabel te krijgen, en geen uitworp van de dataset. Toch meerdere boxes gaan maken schat ik zo in.
Pagina: 1