Avatar billede swaq Nybegynder
23. august 2007 - 14:23 Der er 23 kommentarer og
1 løsning

Søge efter match i et område

Hej Eksperter,

Troede lige jeg havde fundet løsningen på mit problem.

Jeg vil gerne søge efter en given kode i et andet faneblad.

Eksempelvis:
"XYZ" som jeg ved findes et eller andet sted i området: D7:Y40

Jeg har forsøgt mig med VLOOKUP: =VLOOKUP("XYZ";'Faneblad1'!D7:Y40;2;FALSE), idet jeg gerne vil have værdien i cellen til højre for mit match.

Problemet er, at VLOOKUP kun kigger i den første kolonne. Jeg har over 10 kolonner.

Hvordan søger jeg på tværs af alle kolonner?
Jeg ved at min kode kun forekommer et sted!
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 14:38 #1
Det kræver vidst lidt VBA kode. Ingen formeler skriver en værdi i en anden celle, så vidt jeg ved.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 14:38 #2
formeler=formler!!
Avatar billede swaq Nybegynder
23. august 2007 - 14:46 #3
ok, det er nu heller ikke det jeg er ude på. Jeg har blot behov for en VLOOKUP-funktion der kigger i både kolonne A, B og C fremfor blot kolonne A i dette eksempel:
=VLOOKUP("XYZ";A1:C5;2;FALSE)

Kan det kun lade sig gøre med VBA?
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 14:54 #4
Forekommer værdien kun 1 gang?
Avatar billede swaq Nybegynder
23. august 2007 - 14:55 #5
Ja, det er jeg helt sikker på.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 15:09 #6
Denne er lidt lang, men virker:

=HVIS(ER.TAL(SAMMENLIGN("XYZ";A1:A17;0));SAMMENLIGN("XYZ";A1:A17;0);HVIS(ER.TAL(SAMMENLIGN("XYZ";B1:B17;0));SAMMENLIGN("XYZ";B1:B17;0);HVIS(ER.TAL(SAMMENLIGN("XYZ";C1:C17;0));SAMMENLIGN("XYZ";C1:C17;0);"")))
Avatar billede swaq Nybegynder
23. august 2007 - 15:12 #7
Yikes, den kommer til at spænde over 10 kolonner >.<

Giver det lige et forsøg!
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 15:42 #8
Den kommer til at løbe panden mod muren ang. max. 7 HVIS i en formel. Denne kan du dog bruge:

=SUM(HVIS(ER.TAL(SAMMENLIGN("XYZ";A1:A17;0));SAMMENLIGN("XYZ";A1:A17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";B1:B17;0));SAMMENLIGN("XYZ";B1:B17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";C1:C17;0));SAMMENLIGN("XYZ";C1:C17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";D1:D17;0));SAMMENLIGN("XYZ";D1:D17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";E1:E17;0));SAMMENLIGN("XYZ";E1:E17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";F1:F17;0));SAMMENLIGN("XYZ";F1:F17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";G1:G17;0));SAMMENLIGN("XYZ";G1:G17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";H1:H17;0));SAMMENLIGN("XYZ";H1:H17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";I1:I17;0));SAMMENLIGN("XYZ";I1:I17;0);0);HVIS(ER.TAL(SAMMENLIGN("XYZ";J1:J17;0));SAMMENLIGN("XYZ";J1:J17;0);0))
Avatar billede swaq Nybegynder
23. august 2007 - 16:31 #9
Smid et svar, jeg endte med at bruge din løsning. Rendte dog ind i et lidt pudsigt problem, idet der tilsyneladende er grænser for hvor lang en formel må være i Excel.

Her er et eksempel på det jeg endte ud med:
=IF(NOT(ISERROR(VLOOKUP(Lt!A40;FA'!$L$7:$M$40;2;FALSE)));VLOOKUP(Lt!A40;'FA'!$L$7:$M$40;2;FALSE);IF(NOT(ISERROR(VLOOKUP(Lt!A40;'FA'!$N$7:$O$40;2;FALSE)));VLOOKUP(Lt!A40;'FA'!$N$7:$O$40;2;FALSE);IF(NOT(ISERROR(VLOOKUP(Lt!A40;'FA'!$P$7:$Q$40;2;FALSE)));VLOOKUP(Lt!A40;'FA'!$P$7:$Q$40;2;FALSE);IF(NOT(ISERROR(VLOOKUP(Lt!A40;'FA'!$R$7:$S$40;2;FALSE)));VLOOKUP(Lt!A40;'FA'!$R$7:$S$40;2;FALSE);IF(NOT(ISERROR(VLOOKUP(Lt!A40;'FA'!$T$7:$U$40;2;FALSE)));VLOOKUP(Lt!A40;'FA'!$T$7:$U$40;2;FALSE);"NILL")))))

Jeg har forkortet navnene på fanebladene, de er ellers op til 15-17 char lange.
Avatar billede swaq Nybegynder
23. august 2007 - 16:33 #10
Ahh... det skyldes nok de mange 'IF'-statements så...

Som du kan se blev jeg nødt til at vende statementet om med et 'NOT' for at kunne holde styr på formlen. I dette tilfælde skulle jeg bruge data'en hvis ISERROR var false og ellers gå videre hvis TRUE.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 16:43 #11
Du skulle overveje noget VBA kode. Med koden 23/08-2007 15:42:43 kan din formel være længere. Begrænsningen med HVIS eller IF gælder kun når de er inde i hinanden. Derfor får du heller ikke fejl på min sidste kode. Der er det adskilte HVIS- sætninger.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 16:48 #12
Det er når du fletter dem ind på denne måde det går galt:
=HVIS(LOGIK;SAND;HVIS(LOGIK;SAND;HVIS(LOGIK;SAND;HVIS(LOGIK;SAND;HVIS(LOGIK;SAND;HVIS(LOGIK;SAND;FALSK))))))
Avatar billede jkrons Professor
23. august 2007 - 16:59 #13
Du kan faktsik gøre det kortere:

=FORSKYDNING(INDIREKTE("ark1!"&ADRESSE(SUMPRODUKT((Ark1!A1:Ark1!D5=Ark2!A1)*(RÆKKE(Ark1!A1:Ark1!D5)));SUMPRODUKT((Ark1!A1:Ark1!D5=Ark2!A1)*(KOLONNE(Ark1!A1:Ark1!D5)))));0;1)

Ark2!A1 er den celle, hvor du indtaster din opslagsværdi.

Ret selv område og arknavne.
Avatar billede swaq Nybegynder
24. august 2007 - 15:36 #14
Hej Jkrons,

Du har helt ret, kan se logikken i den løsning. Eneste problem er, at INDIREKTE kaldet resulterer i en REF-error. Jeg kan dog umiddelbart ikke forstå hvorfor.

Måske problemet er, at det felt der kommer ud som resultat af hele ADRESSE kaldet ligger i ark 1 men er refereret med '='-tegn til ark 2 (samme ark som din formel skal stå i).

Altså; Ark2!A1 er den celle hvor min data står i. Cellen som bliver fundet i ADRESSE-kaldet står så i ark 1, eksempelvis: Ark1!A1. Formelen i Ark1!A1 er: '=Ark2!A1'.

Tror du det er problemet?

Hvis jeg laver en ganske almindelig '=INDIREKTE(Ark1!A1)' får jeg samme fejl medmindre jeg bruger ADRESSE-kaldet.
Avatar billede kabbak Professor
24. august 2007 - 16:10 #15
=INDIREKTE("Ark1!A1")
Avatar billede kabbak Professor
24. august 2007 - 16:12 #16
og hvis det er A1 på formelarket, der styrer f.eks. rækken
=INDIREKTE("Ark1!A" & A1)
Avatar billede excelent Ekspert
24. august 2007 - 18:14 #17
Man kan vist rolig sige at Excel's formelsamling er noget mangelfuld
til netop denne form for søgning.
Heldigvis kan man så selv programmere sig til brugbare løsninger i VBA.
Avatar billede swaq Nybegynder
27. august 2007 - 10:25 #18
Tak Kabbak :)

Og hej, Excelent! Kan du evt. give et par hints til sådan en brugbar løsning?
Avatar billede gider_ikke_mere Nybegynder
27. august 2007 - 13:21 #19
Du kan finde cellens adresse med denne VBA kode:

Sub test()
Dim MitRange, I As Long, Y As Long, StartR As Long, StartC As Long, StopR As Long, StopC As Long, StartAdd As String, StopAdd As String
StartAdd = "D7" 'Startadressen på dit range
StopAdd = "Y40" 'Stopadressen på dit range
StartR = Range(StartAdd).Row
StartC = Range(StartAdd).Column
StopR = Range(StopAdd).Row
StopC = Range(StopAdd).Column
MitRange = Range(Cells(StartR, StartC), Cells(StopR, StopC))
For I = 1 To UBound(MitRange)
    For Y = 1 To UBound(MitRange, 2)
        If MitRange(I, Y) = "XYZ" Then
            MsgBox Cells(I + StartR - 1, Y + StartC - 1).Address
        End If
    Next
Next
End Sub

Den kan man så kalde i Worksheet_Change i det pågældende ark.
Avatar billede excelent Ekspert
27. august 2007 - 16:10 #20
fx. som makro : denne selecterer første forekomst af XYZ i D7:Y40

Sub myFind()
Range("D7:Y40").Find("XYZ", LookIn:=xlValues).Select
End Sub

--------------------------------------------------

Eller denne lidt mere flexible Funktion :

Public Function Hvor(txt, adr As Range, kol)
Application.Volatile
Hvor = adr.Find(txt, LookIn:=xlValues).Offset(0, kol).Value
End Function

eks.
=Hvor("XYZ";D7:Y40;1) - returnerer værdien 1 kolonne til højre
=Hvor("XYZ";D7:Y40;2) - returnerer værdien 2 kolonne til højre
=Hvor("XYZ";D7:Y40;-2) - returnerer værdien 2 kolonne til venstre
Avatar billede swaq Nybegynder
27. august 2007 - 16:20 #21
Hej Akyhne og Excelent,
Mange tak! Det gav mig lidt inspiration at arbejde videre med.

Er det også nemmest med VB kode hvis jeg har behov for følgende:
Jeg har som nævnt en række kolonnepar (altså to kolonner gange 16, hvor første række er overskriften).
For hver af de 16 kolonnepar vil jeg gerne lave et nyt faneblad som henter al data fra række 7 til 40. Udover data i kolonneparret skal der også hentes en dag og dato fra kolonne A og B (dette kan dog nemt hardkodes). Formålet med at lave de i alt 16 nye fanebalde (evt. i en ny fil), er at give et bedre overblik over hvert kolonnepar. Derudover skal der tilføjes lidt ekstra information i et par kolonner som henter data andet steds fra.
Avatar billede gider_ikke_mere Nybegynder
28. august 2007 - 23:04 #22
Næsten alt er nemmere med VBA, forudsat man kan få lavet koden dertil.
Avatar billede swaq Nybegynder
29. august 2007 - 09:36 #23
Ja, det er jo lige det :)

Giver du et hint til hvordan man starter løsningen på problem: 16:20:01? :D
Avatar billede gider_ikke_mere Nybegynder
29. august 2007 - 21:55 #24
Det kan jeg godt, men jeg er rimelig hård belagt i øjeblikket.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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