15. januar 2011 - 19:41Der er
10 kommentarer og 1 løsning
Finde poster ud fra flere AND søgekriterier
Kære eksperter,
Jeg har 6 celler i et ark, hvor der kan være angivet søgekriterie ELLER søgefeltet kan være blankt. Når der klikkes på en Søg knap, skal der søges i en tabel i et andet ark, hvor hvert kriterie passer til en af kolonnerne, og der skal så returneres et firmanavn fra kolonne A, hvis ALLE søgekriterierne er opfyldt. Det kan jeg også godt med IF og AND og en løkke, men jeg ved ikke hvordan jeg udelader de tomme søgefelter! Hvis et søgefelt ikke er udfyldt, skal det altså ikke tælle med i søgningen.
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
Der skal returneres alle de poster, hvor alle udfyldte søgekriterier er opfyldt. Så hvis der fx er udfyldt 3 kriterier, skal der returneres de poster, hvor alle tre er opfyldt. Hvis ingen er opfyldt, skal der returneres alle poster.
Mit problem er, hvis et eller flere søgefelter er tomme. Jeg skal jo tage højde for alle kombinationsmuligheder af tomme - ikke tomme. Giver det mere mening?
Det er lidt svært når jeg ikke helt ved hvordan din kode er skruet sammen, men umiddelbart skal du jo "bare" erstatte dine check om søgekriteriet er opfyldt med et check af om søge kriterie er opfyldt eller søgekriterie ikke er udfyldt:
Fx i stedet for IF (celle1 = søgekriterie1) AND (celle2 = søgekriterie2) ... THEN
så
IF ((celle1 = søgekriterie1) OR (søgekriterie1 = "")) AND ((celle2 = søgekriterie2) OR ((søgekriterie2 = "")) ... THEN
If Sheets("Find").Range("c9") = "" Or Sheets("Find").Range("c9") = Firmanavn And _ Sheets("Find").Range("c10") = "" Or Branche = Sheets("Find").Range("c10") And _ Sheets("Find").Range("c11") = "" Or Segment = Sheets("Find").Range("c11") And _ Sheets("Find").Range("c8") = "" Or Klasse = Sheets("Find").Range("c8") And _ Sheets("Find").Range("c6") = "" Or HBansvarlig = Sheets("Find").Range("c6") And _ Sheets("Find").Range("c7") = "" Or Pipelinestatus = Sheets("Find").Range("c7") Then
Jeg tror bare du skal sætte nogle parenteser i din If. "And" har højere såkaldt præcedens end "or" og "binder hårdere". Så prøv at putte nogle parenteser ind:
If (Sheets("Find").Range("c9") = "" Or Sheets("Find").Range("c9") = Firmanavn) And _ (Sheets("Find").Range("c10") = "" Or Branche = Sheets("Find").Range("c10")) And _ (Sheets("Find").Range("c11") = "" Or Segment = Sheets("Find").Range("c11")) And _ (Sheets("Find").Range("c8") = "" Or Klasse = Sheets("Find").Range("c8")) And _ (Sheets("Find").Range("c6") = "" Or HBansvarlig = Sheets("Find").Range("c6")) And _ (Sheets("Find").Range("c7") = "" Or Pipelinestatus = Sheets("Find").Range("c7")) Then
Ah - ligesom de gode gamle plus minus og gange regnestykker :). Ingeniøruddannelsen ligger nogle år tilbage og matematikken er glemt lidt... Tak, jeg prøver!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.