Jeg udfører et lopslag, der for hver værdi i kolonne A søger efter den samme værdi i hele kolonne b, for så at returnere den tilsvarende værdi i række c - altså hvis A35 er lig B66, så returneres C66.
Det er standard lopslag. Det jeg ønsker er at tjekke om C66 allerede er blevet fundet een gang tidligere (f.eks. i A22 som også er lig B66) for så vil jeg gerne at B66 ignoreres og der ledes videre ned ad i kolonne B til næste gang værdien findes.
Lopslag tager altid den første tilfælde hvor der er et match og det er det jeg gerne vil ændre.
Jeg er ikke helt sikker påm, at jeg forstår, hvad du ønsker. Din liste kunne fx se sådan ud
1 10 Jesper =LOPSLAG(A1;$B$1:$C$7;2;FALSK) 2 1 Jørgen 3 3 Mads 1 4 Jan 4 5 Henrik 2 6 Uffe 1 2 Georg
Formeln vil her returnere Jørgen fordi kolonne C har Jørgen ud for 1 i kolonne B. Når du kommer til det næste 1-tal som altså igen =B2, skriver den igen Jørgen. Det skal den så åbenbart ikke. Men hvad er det så, den skal søge videre efter?
Det forstår jeg godt. Her er et klarere eksempel baseret på dine kolonner: A B C D 3 10 Jesper =[formel] = "Mads" 2 1 Jørgen = Intet fundet 3 3 Mads = "Uffe" 1 1 Jan 4 5 Henrik 2 3 Uffe 1 1 Georg
I ovenstående tilfælde vil jeg gerne have at Lopslaget (eller en anden formel) i række 3 ignorere "Mads" fordi denne er fundet som løsning allerede i række 1. Den skal i stedet se, at Mads er brugt og så returnere "uffe".
Det forslag du kom med er det jeg allerede har. Problemet med den er, at den altid returnere den første værdi der levet op til kravet.
Jeg er ikke 100 % sikker på, at dette altid virker og det skyldes at LOPSLAG ikke altid returnerer Mads, når der indtastes 3. Men selv om det lyder besværligt, er dette, det nærmeste jeg er kommet indtil videre:
Start med at lægge denne kode i et almideligt modul i din projektmappe:
Function FLOPSLAG(ops As Variant, num As Single, rn As Range, ofs As Byte) Dim Taeller As Long Dim i As Long i = 0 For Each c In rn.Columns(1).Cells If c.Value = ops Then i = i + 1 End If Next c If num - CInt(num) <> 0 Or num < 1 Then FLOPSLAG = CVErr(xlErrNum) Exit Function End If If i < num Then FLOPSLAG = CVErr(xlErrNA) Exit Function End If Taeller = 0 For Each c In rn.Columns(1).Cells If c.Value = ops.Value Then Taeller = Taeller + 1 If Taeller = num Then FLOPSLAG = c.Offset(0, ofs - 1).Value Exit Function End If End If Next c End Function
Så skal du bruge en hjælpekolonne. I eksemplet har jeg brugt H. Her skal du have denne formel:
=LOPSLAG(A1;$B$1:$C$8;2;FALSK)
Altså en ganske almindelig opslagsformel. Denne kolonne kan du så weventuelt skjule. Og nu kommer s clou'et :-)
I den celle, hvor du vil have dine resultater vist, skal du indsætte denne lille ting:
Tak for svaret, jeg har nu testet dit løsningsforslag. Det virker desværre ikke efter hensigten. Jeg får med løsningen sorteret nogle svar fra, men den sortere for meget fra og koden er desværre for indviklet til at jeg kan se hvor problemet er. Jeg kan dog se, at den afviser nogle muligheder, som den ikke har godkendt tidligere (altså første gang at matchet bliver fundet).
Jeg er lidt lost omkring at rette fejlen eller at detaliere den yderligere for dig.
Ok, Mange tak for hjælpen jkrons. Er der nogle der kender andre muligheder en lopslag til problemet så?
Synes godt om
Ny brugerNybegynder
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.