Avatar billede gladhund Nybegynder
15. januar 2011 - 19:41 Der 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.

Kan nogen hjælpe med en god ide?

På forhånd tak :).
Avatar billede anlu Nybegynder
15. januar 2011 - 21:12 #1
Det lyder som noget VBA du har gang i?
Kan du ikke bare lave noget betingelse på om søgefelt = "" ?

Jeg har ikke helt forstået om den skal returnere flere ting hvis der er et søgekriterium der ikke er udfyldt eller om den skal returnere ingenting?
Avatar billede gladhund Nybegynder
15. januar 2011 - 21:57 #2
Hej anlu :)

Jep, altid VBA.

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?
Avatar billede gladhund Nybegynder
15. januar 2011 - 22:01 #3
Undskyld, hvis ingen er UDFYLDT skal der returneres alle poster :)
Avatar billede anlu Nybegynder
15. januar 2011 - 22:06 #4
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



IF ((celle1 = søgekriterie1) OR (søgekriterie1 = "")) AND ((celle2 = søgekriterie2) OR ((søgekriterie2 = "")) ... THEN

eller noget i den stil.
Giver det mening?
Avatar billede gladhund Nybegynder
15. januar 2011 - 22:09 #5
Det hjælper måske, hvis jeg viser den koder, der ikke virker... :):

Public Sub Find()

Row = 20

Range("B20:B10000").Value = ""

Sheets("Virksomheder").Select
Range("A1").Select


Do Until ActiveCell.Value = ""
    ActiveCell.Offset(1, 0).Select
 
    Firmanavn = ActiveCell.Value
    Branche = ActiveCell.Offset(0, 1).Value
    Segment = ActiveCell.Offset(0, 2).Value
    Klasse = ActiveCell.Offset(0, 3).Value
    HBansvarlig = ActiveCell.Offset(0, 4).Value
    Pipelinestatus = ActiveCell.Offset(0, 5).Value
 
   
    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
 
    Sheets("Find").Range("B" & Row).Value = Firmanavn
   
    Row = Row + 1
 
      ' Exit Do
             
    End If
Loop

Sheets("Find").Activate

End Sub
Avatar billede anlu Nybegynder
15. januar 2011 - 22:15 #6
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
Avatar billede gladhund Nybegynder
16. januar 2011 - 11:28 #7
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!
Avatar billede gladhund Nybegynder
16. januar 2011 - 11:44 #8
It works, tak for hjælpen (endnu engang) :)! Points er klar når du er.
Avatar billede anlu Nybegynder
16. januar 2011 - 15:39 #9
Det var så lidt :) - altid glad for at kunne hjælpe; og da ikke mindst en ingeniør-fælle ;-)
Avatar billede gladhund Nybegynder
16. januar 2011 - 15:52 #10
Hehe - ja jeg så lige din hjemmeside! Og snart også HD-fælle ;)
Avatar billede anlu Nybegynder
16. januar 2011 - 16:15 #11
Vist en ganske klassisk kombination ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester