Avatar billede lineriber Praktikant
29. juli 2010 - 12:12 Der er 12 kommentarer og
1 løsning

Opslag skal returnerer ALLE linier der opfylder opslagsværdien

Hej

Jeg har lidt en udfordring i excel (2007, engelsk version), som er lidt svær at forklare, men jeg har forsøgt nedenfor.

Jeg har en liste med 50 rækker og 3 kolonner.
Jeg vil gerne lave et opslag (ala VOPSLAG) i denne liste, på kolonne A, og returnere de værdier fra kolonne B og kolonne C der opfylder min opslagsværdi, til 2 kolonner i en anden fane.
MEN jeg vil gerne have returneret ALLE de linier der opfylder opslagsværdien, stående på en linie pr. resultat

Eksempel:
Opslagsværdien = "HAM.MOD"
Så skal der i den nye fane blive returneret række 1, 4, 6 og 8

  A                        B                                      C
1 HAM.MOD    Pallemag                          802
2 HAM.PLU    Pallereoler                        4.966
3 HAM.PLU    Truck                                  9.490
4 HAM.MOD    Ombygning kantinen      814
5 HAM.PLU    Ombygning kantinen      1.018
6 HAM.MOD    Ombygning                      919
7 HAM.PLU    Ombygning                      1.149
8 HAM.MOD    Etablering kantine          219
9 HAM.PLU    Etablering kantine            273



Kan man på en eller anden måde løse det???
Til orientering, er der IKKE altid samme antalt linier i listen pr. opslagsværdi.

Mvh
Line
29. juli 2010 - 13:04 #1
LOPSLAG() (som det må være på den måde data er opbygget) kan ikke benyttes til opgaven. LOPSLAG() finder kun første forekomst af en given værdi.

Du kan opnå det ønskede med et avanceret filter.
Data->Filter->Avanceret filter.
Avatar billede lineriber Praktikant
29. juli 2010 - 13:10 #2
Jeg er godt klar over at hverken LOPSLAG eller VOPSLAG kan bruges, det var bare for at give en idé om hvad det var for en måde at lave et opslag på, som jeg mente.

Men hvordan bruger man datafiltre, når listen med alle data ligger i én fane, og jeg kun vil have de data over i den anden fane, som opfylder betingelserne (fx HAM.MOD) ??
Avatar billede zjat Nybegynder
29. juli 2010 - 14:23 #3
Du kan bruge denne løsning, hvor A5 er nummeret på forekomsten (dvs. skriv 1 i A5, hvis du vil have første forekomst). Du kan så bare lave flere rækker med informationen:

For at få Kolonne B resultaterne:

INDEX(ARK1!$B$1:$B$1000;SMALL(IF(ARK1!$A$1:$A$1000=$C$3;ROW(Ark1!$B$1:$B$1000)-MIN(ROW(Ark1!$B$1:$B$1000))+1);$A5))

For at få Kolonne C resultaterne:

INDEX(ARK1!$C$1:$C$1000;SMALL(IF(ARK1!$A$1:$A$1000=$C$3;ROW(Ark1!$C$1:$C$1000)-MIN(ROW(Ark1!$C$1:$C$1000))+1);$A5))

osv..

C3= det du gerne vil søge efter i kolonne A

Du laver så en kolonne I arket hvor du vil have resultaterne, som starter i A5, hvor du skriver 1. A6 = 2, A7= 3 osv.

Håber det giver mening - virker i hvert fald for mig :)

HUSK at trykke ALT + SHIFT + ENTER - i stedet for bare ENTER! Det er en Array formel!
Avatar billede zjat Nybegynder
29. juli 2010 - 14:26 #4
btw. skal det løses med VBA, hvis excel skal tænke på hvor mange rækker der er.

På denne måde skal du sikre dig at du har nok rækker med formelen :)
Avatar billede lineriber Praktikant
29. juli 2010 - 14:30 #5
btw?? Hvad betyder det?

Har du mulighed for at sende mig et excel ark hvor den formel virker i, da den er rimelig svær at overskue ;-)
Avatar billede Slettet bruger
29. juli 2010 - 15:49 #6
Engelsk version:

Kolonne B værdier:
=INDEX(Sheet1!$B$1:$B$9;SMALL(IF(Sheet1!$A$1:$A$9=Sheet2!$G$1;ROW(Sheet1!$A$1:$A$9));ROW(1:1)))

Kolonne C værdier:
=INDEX(Sheet1!$C$1:$C$9;SMALL(IF(Sheet1!$A$1:$A$9=Sheet2!$G$1;ROW(Sheet1!$A$1:$A$9));ROW(1:1)))

Opslagsværdien har jeg forudsat indtastet i Sheet2!$G$1.
Cellereferencerne skal selvsagt tilpasses det område der er relevant for dig.

Formlerne vil returnere #NUM! når der ikke findes flere udgaver af den søgte værdi. Hvis du gerne vil undgå #NUM!, kan du for eksempel bruge IFERROR funktionen.

Du kan kopiere formlerne herfra til din egen fil. Når du har formlen i en celle så tryk på F2, herefter holder du Ctrl og Shift nede før du trykker på Enter. Herved bliver formlerne omsluttet af tuborgparenteser som udtryk for, at Excel forstår dem som matriksformler. Kopier formlerne nedad så langt som nødvendigt.

Som allerede nævnt af erikjuul er det også muligt at bruge Avanceret Filter. Sig til hvis du ønsker hjælp til det.

Hans
Avatar billede zjat Nybegynder
29. juli 2010 - 16:12 #7
Hej Hans

Er det ikke det samme som jeg skrev? :)
Avatar billede Slettet bruger
29. juli 2010 - 17:07 #8
Det må du undskylde.
Jeg synes dog ikke det er helt det samme. Det du skriver om i følgende sætning:

Du laver så en kolonne I arket hvor du vil have resultaterne, som starter i A5, hvor du skriver 1. A6 = 2, A7= 3 osv

Det er ikke nødvendigt med formlerne i #6.

Men ved eftertanke medgiver jeg, at dit svar var en brugbar løsning og jeg burde måske ikke være kommet med noget indlæg.

NB
I og med spørgeren bruger engelsk version gætter jeg på, "Sheet" er mere relevant end "Ark".

Hans
Avatar billede zjat Nybegynder
29. juli 2010 - 17:20 #9
Hej Hans

Du har ret... Du har forfinet den lidt - det vil jeg straks overføre i mine excel ark!

Det med sheet og ark var bare en tanketorsk fra min side - men nu er eksempel på løsning sendt og så må vi se hvad brugeren siger :)

Venligst
Nis
Avatar billede lineriber Praktikant
30. juli 2010 - 08:28 #10
Godmorgen de herrer

Tak for det tilsendte zjat - det virker perfekt. Men det gør dine formler også Hans.
Jeg kan godt se at dine formler er lidt mere forfinede Hans, men zjat's løser dog fint mit problem.

DOG DOG DOG, vil mere jo altid have mere :-)
Zjat i #4, skriver du at man kan få excel til selv at finde ud af hvormange rækker der skal være, ved hjælp af en VBA kode.
Jeg kunne nemlig rigtig godt tænkte mig, at der kun var plads til præcis det antal linier der var nødvendige, da jeg efter disse linier skal have en Total linie med summering. Kan det lade sig gøre?
Hvis jeg nu gerne vil have hjælp til den VBA kode, skal jeg så oprette et nyt spørgsmål??
Avatar billede zjat Nybegynder
30. juli 2010 - 11:10 #11
Du kan jo altid lave en total linie nederst og vælge at summere de data som er tilstede.

Hvis du gerne vil have VBA, så kan du bruge en simpel hide funktion (der er smartere funktioner):

    Dim Criteria As Boolean
    Dim i As Integer
   
    Rows("23:182").EntireRow.Hidden = False
   
    On Error GoTo slut
    Sheets("Sheet1").Activate
    i = 1
   
    For i = 23 To 71
        If (Cells(i, 9).Value = "0") And (Cells(i, 11).Value = "0") Then
        Criteria = True
        Rows(i).EntireRow.Hidden = True
        End If

Den kigger på række 9 og 11 og tjekker om den er = 0

Hvis den er det, så skjuler den rækken.
Smid det ind under en knap og kør løs :)

Jeg går her udfra du kender lidt til VBA :)
Avatar billede lineriber Praktikant
30. juli 2010 - 12:15 #12
bob bob, kendskab er nu nok så meget sagt ;-)

Jeg kan finde ud af at indspille macroer og efterfølgende rette lidt i dem. Og jeg regner med at en VBA kode er i samme stil, bare en "skrevet" process istedet for en optaget..... har jeg fat i den rigtige opfattelse?

Skal jeg bare kopiere din tekst ind i en macro direkte, og rette tallene til?

Hvad henviser 23:182 til? Er det alle rækkerne i mit skema?

Min række 77 til 89 indeholder din formel zjat, så det er de rækker der skal skjules hvis de er tomme. Men betyder 0 at de er tomme? For der er jo formler i dem, hen over flere kolonner...?

Din række 9 og 11 som du kigger på, hvorfor de to rækkenumre? Hvad med række 10? Jeg tror ikke helt jeg forstår hvad det er for nogle rækkenumre jeg skal indsætte i VBA-koden......
Avatar billede zjat Nybegynder
30. juli 2010 - 16:33 #13
Du har fat i det rigtige, eksemplet er bare hvis du vil tjekke 2 kolonner for om der er noget. Du kan også nøjes med at tjekke en. Hvis felter i den kolonne er 0 så vil den skjule hele rækken :)
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