Avatar billede krarup Nybegynder
23. juni 2011 - 12:25 Der er 16 kommentarer og
1 løsning

VBA, Match og Index?

Hej Eksperter.
Jeg har brug for en smule VBA kode, og jeg forstiller mig der skal bruges noget match og index.
Desværre er jeg ret tabt til VBA, så jeg håber der en venlig sjæl der kan hjælpe mig.

På ark 2 har jeg fra kolonne B11 til B50 et unikt ID på hver linje.
Dette id går igen på ark 1 i kolonne D.

Når jeg kører makroen, vil jeg gerne at de to kolonner indeholdende DI sammenholdes, og hvor der er et match, skal der på ark 1 i kolonne M, på samme linje som Id'et, skrives "ABCD"
Avatar billede finb Ekspert
23. juni 2011 - 13:12 #1
Prøv =LOPSLAG()
se syntax i hjælpefunktionen.

Mvh finb
Avatar billede TUFexcel Juniormester
23. juni 2011 - 13:36 #2
Hej Krarup

Prøv at chekke dette her link. Det er næsten identisk med dit spørgsmål:

http://www.eksperten.dk/spm/941066
Avatar billede krarup Nybegynder
23. juni 2011 - 13:55 #3
Tak for jeres svar.
Desværre er det ikke helt hvad jeg søger.
Id'et på ark 2 kan ændre sig, men når først der har været et match mellem id'et på ark 1 og ark 2, skal teksten "abcd" på ark 1 forblive. Derfor kan jeg ikke blot opstille et simpelt lopslag.

Rodet forklaring, men jeg håber det giver lidt mening ;)
Avatar billede Ialocin Novice
23. juni 2011 - 14:08 #4
Hej Krarup

Id´erne på Ark 1 i kolonne D ... Ligger de i samme rækker eller starter de fra række 1 ??

Og hvordan vil du starte søgningen ?? ... via en knap på et af arkene ?

Mvh Nicolai
Avatar billede krarup Nybegynder
23. juni 2011 - 14:32 #5
Hej Nicolai.
ID'erne på ark1 starter i kolonne D2 og slutter i D11551. Et ID pr række.

Søgningen skal starter med et tryk på en kanp i ark 2.
Avatar billede Ialocin Novice
23. juni 2011 - 15:06 #6
Hej krarup

Super :o)

Jeg tror, at jeg har den
... men ændrer lige så cellerne de passer ind i dit kram.


Du hører nærmere.


Mvh Nicolai
Avatar billede Ialocin Novice
23. juni 2011 - 15:17 #7
Hej Krarup

Du kan lige starte med udgaven, hvor knappen er på Ark1.
Koden ligger bag Ark1

Jeg har lavet den i den Engelske udgave af Excel 2003.
Vil mene, at jeg har ændret Sheet1 + 2 til Ark1 + 2, de steder, hvor der er nødvendigt, da jeg går ud fra, at du benytter den Danske udgave ?

Jeg vender lige tilbage med den "rigige" udgave.


Kan du selv fikse knappen, som skal kalde koden ?


----------------



Private Sub SøgOgMatch()
Dim myRange As Range
Dim rtal As Double
Dim counter As Integer
Dim antalrækker As Integer


'slå skærmopdateringen til igen
Application.ScreenUpdating = False


        'vælg D2 på Sheet1
        Sheets(1).Cells(2, 4).Select
       
       
        'set myRange = området ned til sidste værdi i kolonnen med den valgte celle
        Set myRange = Selection.CurrentRegion
       
       
        'tæl antal rækker/celler i området
        antalrækker = myRange.Count
       
       
                'for hver celle i området - kolonne D på sheet1
                For Each r In myRange
                   
                   
                    'vælg aktuel celle
                    r.Cells.Select
                   
                    'sæt rtal = den aktuelle celleværdi
                    rtal = r.Value
                   
                       
               
                            'løb ned gennem cellerne i kolonne B på Sheet2 indtil første tomme celle
                            'start i celle B11
                            For counter = 11 To Sheets("Ark2").Range("B5536").End(xlUp).Row
                                'set curcell = den næste celle i kolonnen/området
                                Set curcell = Worksheets("Sheet2").Cells(counter, 2)
                       
                                 
                       
                                'hvis der er et match mellem de sheet1 og sheet2
                                If rtal = Worksheets("Ark2").Cells(counter, 2).Value Then
                       
                                    'skriv "ABCD" i kolonne M
                                    r.Cells.Offset(0, 9).Value = "ABCD"
                       
                                End If
                       
                            'tjek næste celle i kolonne B på sheet2
                            Next counter
               
               
               
               
               
                'næste celle - kolonne D på sheet1
                Next


'slå skærmopdateringen til igen
Application.ScreenUpdating = True




'info til brugeren
MsgBox "Søgningen fuldført", vbInformation & vbOKOnly




End Sub



Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. juni 2011 - 15:36 #8
Hej krarup

Hermed en udgaven, som kan kaldes fra en knap på Ark2.
Koden ligger i et modul i VBA editoren (alt+f11).

OBS:
Der er IKKE taget højde for fejlhåndtering, hvis celler indeholder alt andet en heltal ? ... men det kan helt sikkert laves.


Prøv den og gi´ lyd, hvis der er tvivl eller skidtet ikke virker ?

-------

Sub SøgOgMatch()
Dim myRange As Range
Dim rtal As Double
Dim counter As Integer
Dim antalrækker As Integer


'slå skærmopdateringen til igen
Application.ScreenUpdating = False


        'vælg B11 på Ark2
        Sheets(2).Cells(11, 2).Select
       
       
        'set myRange = området ned til sidste værdi i kolonnen med den valgte celle
        Set myRange = Selection.CurrentRegion
       
       
        'tæl antal rækker/celler i området
        antalrækker = myRange.Count
       
       
                'for hver celle i området - kolonne B på Ark1
                For Each r In myRange
                   
                   
                    'vælg aktuel celle
                    r.Cells.Select
                   
                    'sæt rtal = den aktuelle celleværdi
                    rtal = r.Value
                   
                       
               
                            'løb ned gennem cellerne i kolonne D på Ark1 indtil første tomme celle
                            'start i celle D2
                            For counter = 2 To Sheets("Ark1").Range("D5536").End(xlUp).Row
                               
                                'set curcell = den næste celle i kolonnen/området
                                Set curcell = Worksheets("Ark1").Cells(counter, 4)
                       
                                 
                       
                                'hvis der er et match mellem de Ark1 og Ark2
                                If rtal = Worksheets("Ark1").Cells(counter, 4).Value Then
                       
                                    'skriv "ABCD" i kolonne M
                                    r.Cells.Offset(0, 9).Value = "ABCD"
                       
                                End If
                       
                            'tjek næste celle i kolonne B på Ark2
                            Next counter
               
               
               
               
               
                'næste celle - kolonne D på Ark1
                Next


'slå skærmopdateringen til igen
Application.ScreenUpdating = True




'info til brugeren
MsgBox "Søgningen fuldført", vbInformation & vbOKOnly




End Sub



----------


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. juni 2011 - 15:38 #9
Ups ... i linien: 

'slå skærmopdateringen til igen
Application.ScreenUpdating = False

Skal der selvfølgelig stå:  'slå skærmopdateringen fra



Mvh ;o)
Avatar billede krarup Nybegynder
23. juni 2011 - 15:40 #10
Forhelv**** hvor det spiller :)
Du havde lige glemt et enkelt sheet2, men ellers virker det bare 100% !

Rigtig mange gange tak for hjælpen!
Kast et svar.

Venlig hilse
Jakob
Avatar billede Ialocin Novice
23. juni 2011 - 17:06 #11
Hej Jakob

Godt at høre ... Gi' lyd hvis det driller ??

Hermed mit svar ;0)

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
24. juni 2011 - 08:09 #12
Hej Krarup

Tak for point :o)

Og så blot til info ...
Du kan faktisk godt undvære følgende linier i koden:


Dim antalrækker As Integer

'tæl antal rækker/celler i området
antalrækker = myRange.Count


Da variablen antalrækker ikke er i brug.
Den er bare et levn fra de første tanker til koden.

Med venlig hilsen, Nicolai
Avatar billede krarup Nybegynder
24. juni 2011 - 09:24 #13
Tak for hintet Nicolai.
Jeg hiver ovenstående kod ud, og håber på det stadig virker :)
Avatar billede krarup Nybegynder
24. juni 2011 - 09:48 #14
Hej Nicolai,
Jeg så lige, at der faktisk er byttet om på placeringen af "ABCD".
I ovenstående kode, bliver "ABCD" placeret på ark2 - Jeg vil gerne hvis det kan blive på ark1 i stedet.

Kan det lade sig gøre?


Venlig hilsen
Jakob
Avatar billede Ialocin Novice
25. juni 2011 - 00:25 #15
Hej Jakob

Sættenissen har været tidligt på spil :o)
Jeg kigger på det lørdag, sidst på eftermiddagen.

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
25. juni 2011 - 00:38 #16
Hej Jakob

Ja, som tiden da går ....

Byt linien: r.Cells.Offset(0, 9).Value = "ABCD"
                       
ud med: curcell.Offset(0, 9).Value = "ABCD"


Den står i If sætningen i slutningen af koden.

Go´ nat og sov godt, Nicolai :o)
Avatar billede krarup Nybegynder
27. juni 2011 - 08:23 #17
Perfekt.
Endnu engang 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
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