Avatar billede mathiask-o Nybegynder
02. juni 2010 - 10:51 Der er 7 kommentarer

Lopslag sammenligningsproblem

hej eksperter

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.

Håber I kan hjælpe.

mvh.
Mathias
Avatar billede jkrons Professor
02. juni 2010 - 11:18 #1
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?
Avatar billede mathiask-o Nybegynder
02. juni 2010 - 12:38 #2
Hej jkrons,

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.

mvh.
Mathias
Avatar billede jkrons Professor
02. juni 2010 - 13:06 #3
OK. Du har altså gentagelse af værdierne i kolonne B, og det kan LOPSLAG ikke håndtere.

Der skal en makro til, og det må jeg lige se nærmere på.
Avatar billede jkrons Professor
02. juni 2010 - 15:44 #4
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:

=HVIS(ER.FEJL(HVIS(TÆL.HVIS($H$1:H1;H1)=1;LOPSLAG(A1;$B$1:$C$7;2;FALSK);flopslag(A1;2;$B$1:$C$7;TÆL.HVIS($H$1:H1;H1))));"Ingen data";HVIS(TÆL.HVIS($H$1:H1;H1)=1;LOPSLAG(A1;$B$1:$C$7;2;FALSK);flopslag(A1;2;$B$1:$C$7;TÆL.HVIS($H$1:H1;H1))))

Prøv om det virker og vend tilbage.
Avatar billede mathiask-o Nybegynder
07. juni 2010 - 11:29 #5
Hej jkrons,

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.

mvh.
Mathias
Avatar billede jkrons Professor
07. juni 2010 - 15:51 #6
Som jeg allerede skrev, virker det heller ikek helt hos mig. Jeg har desværre ingen forklaring på hvorfor, men det skyldes at

=LOPSLAG(A1;$B$1:$C$8;2;FALSK)

ikke altid returneret første forekomst, når der er flere end en. af og til returnerer den sidste, og så bryder logikken i min makro sammen.
Avatar billede mathiask-o Nybegynder
07. juni 2010 - 16:05 #7
Ok, Mange tak for hjælpen jkrons. Er der nogle der kender andre muligheder en lopslag til problemet så?
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