Avatar billede KenneyD71 Nybegynder
12. marts 2014 - 10:53 Der er 7 kommentarer og
1 løsning

Lav Lopslag i de rækker, der matcher 2 kriterier

Jeg har en masse rækker med en masse cpr.
Cpr og andre data går igen i flere af rækkerne. Dato er forskellig i hver rækker og jeg skal ud fra CPR lave opslag i de rækker hvor dato har et givent interval.

fx:
cpr..........dato........kroner...
111111-9999..01-03-2011..1000.....
111111-9999..01-03-2010..0400.....
111111-9999..01-03-2012..3000.....
222222-3211..01-03-2012..3000.....

Jeg ønsker at lave Lopslag, der siger:
Hvis cpr="cpr-a" og dato <"dato-2" men >"dato-1" så giv mig "kroner" = 1000.

cpr-a:111111-9999
dato-1:01-04-2010
dato-2:01-02-2012
Avatar billede supertekst Ekspert
12. marts 2014 - 14:32 #1
opslagCprDato = Brugerdefineret funktion

formel(eks): =opslagCprDato("010203-1127";"27-2-2013";"10-03-2013")

VBA-koden:
Rem Indsættes i Module
Rem ==================
Const cprKol = "A"          'justeres
Const datoKol = "B"
Const krKol = "C"

Dim antalRækker As Integer
Public Function opslagCprDato(cprNr As String, fraDato As Date, tilDato As Date)
    ActiveWorkbook.Sheets(1).Activate
    antalRækker = Range("A65536").End(xlUp).Row
   
    For ræk = 2 To antalRækker
        If cprNr = Range(cprKol & ræk) And _
            Range(datoKol & ræk) > fraDato And _
                Range(datoKol & ræk) < tilDato Then
                opslagCprDato = Range(krKol & ræk)
                Exit Function
        End If
    Next ræk
   
    opslagCprDato = 0
End Function
Avatar billede komputerdk Mester
13. marts 2014 - 21:54 #2
alternativt

=SUMPRODUKT((A2:A5=A7)*(B2:B5>A8)*(B2:B5<A9)*C2:C5)

a7 = cpr
a8 =dato1
a9 = dato2
forklaring

sumprodukt ( (kriterie1)*(kriterie2)*(kriterie3)*Sumområde i rækken)

forstået sådan, når
(A2:A5=A7) = opfyldt, så er værdien 1, hvis ikke er værdien 0
derfor i dit eksempel - tænk sådan at den tager det pr. række

så du har 3 kriterier og en sum ergo

pr..........dato........kroner...
111111-9999..01-03-2011..1000..... => (1*1*1*1000) = 1000
111111-9999..01-03-2010..0400..... => (1*0*0*400) = 0
111111-9999..01-03-2012..3000..... => (1*1*0*3000) = 0
222222-3211..01-03-2012..3000..... => (0*1*0*3000) = 0

Summen er så 1000 , hvis der var flere rækker den overholdte ville den lægge dem sammen..
Avatar billede supertekst Ekspert
16. marts 2014 - 10:09 #3
Status?
Avatar billede supertekst Ekspert
20. marts 2014 - 09:53 #4
??
Avatar billede KenneyD71 Nybegynder
20. april 2014 - 00:26 #5
Giv et svar, Supertekst.
Avatar billede supertekst Ekspert
20. april 2014 - 08:29 #6
Det får du
Avatar billede KenneyD71 Nybegynder
20. april 2014 - 11:14 #7
... og tak for hjælpen.
:-)
Avatar billede supertekst Ekspert
20. april 2014 - 11:42 #8
Selv tak..
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

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