Avatar billede pra Nybegynder
23. januar 2010 - 16:13 Der er 4 kommentarer og
1 løsning

Macro til lookup

Hej eksperter.

jeg har brug for lidt vbakode således:

Macroen skal søge gennem hele kolonne G i ark1, og hvor hver gang den finder et udfyldt felt, skal der søges for samme værdi i kolonne D i ark 2.

Hvis der er match, skal værdien i kolonne M i Ark2, returneres til kolonne K i ark 1.

formatet for Kolonne M i ark 2 = dato, men den kan være en reel dat, eller den kan være TOM = 01-01-1900 00:00 fra SQL databasen.
Hvis dato er ok skal dato returneres
Hvis dato = 01-01-1900 00:00 skal der returneres en tekst = "Ukendt"
Hvis ingen match mellem værdi i kolonne G/ark1 og Kolonnen M/ark2 skal der stå en tekst = "prod".

Begge ark opdateres automatisk ved åbning af regnearket.

Er lavet som en MS-query til en Navision C5  database.

regneark kan evt. tilsendes
Avatar billede supertekst Ekspert
23. januar 2010 - 17:33 #1
Du er velkommen til at sende arket (mailadr. under profil).

- og så velkommen til...
23. januar 2010 - 21:45 #2
Hejsa

Uden at have nogle reele data at teste på og uden at have testet, så kan du jo se om denne virker på en test fil.

Hvis ikke der er overkrift i kolonne G, så skal TRUE i 3. linie ændres til FALSE


Sub Eksperten_899309()
    ' Konsanter
    Const bCOLUMN_G_HAS_HEADER As Boolean = True
    Const iCOL_COMPARE As Integer = 7 'G
    Const iCOL_DATE_TO As Integer = 11 'K
    Const iCOL_DATE_FROM As Integer = 13 'M
    ' Variabler
    Dim wsOne As Worksheet
    Dim wsTwo As Worksheet
    Dim lRowOne As Long
    Dim lRowTwo As Long
    Dim lRowStart As Long
    Dim bFound As Boolean
   
    ' Tildel værdier til variabler
    Set wsOne = Worksheets("Ark1")
    Set wsTwo = Worksheets("Ark2")
   
    ' Start række
    lRowStart = 1
    If bCOLUMN_G_HAS_HEADER Then lRowStart = 2
   
    ' Løb igennem Ark 1
    For lRowOne = lRowStart To wsOne.Range("A1").CurrentRegion.Rows.Count
   
        ' Løb igennem Ark 2
        For lRowTwo = lRowStart To wsTwo.Range("A1").CurrentRegion.Rows.Count
           
            If wsOne.Cells(lRowOne, iCOL_COMPARE).Value = wsTwo.Cells(lRowTwo, iCOL_COMPARE).Value Then
                ' Værdi fundet
                bFound = True
                Exit For
            End If
           
        Next lRowTwo
   
        ' Skriv i Ark 1
        If bFound Then
            ' Match fundet
            If CLng(wsTwo.Cells(lRowTwo, iCOL_DATE_FROM).Value) = 1 Then
                ' Datoværdi 1 = 01-01-1900 00:00
                wsOne.Cells(lRowOne, iCOL_DATE_TO).Value = "Ukendt"
            Else
                wsOne.Cells(lRowOne, iCOL_DATE_TO).Value = "OK"
            End If
        Else
            ' Ingen match fundet
            wsOne.Cells(lRowOne, iCOL_DATE_TO).Value = "Prod."
        End If
       
    Next lRowOne
   
End Sub
Avatar billede pra Nybegynder
24. januar 2010 - 18:39 #3
Har lige prøvet en enkelt gang, men får udfyldt alle felter i kolonne K  med "Ukendt"
24. januar 2010 - 19:24 #4
Jeg skal nok også have arket i hænderne for at tilpasse det sidste - mail på profil eller under kontakt på hjemmeside.
26. januar 2010 - 14:22 #5
Makro justeret til - svar :-)
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