Avatar billede sbl Nybegynder
19. februar 2013 - 20:29 Der er 14 kommentarer og
1 løsning

Excel VBA - loop gennem range og kør vlookup

Jeg har 3 kolonner med data. Med vba vil jeg loope gennem den første kolonnne. Hvis kolonne 1 er True på givets kritie, vil jeg udfylde kolonne 3 samme række med resultatet af en vlookup på kolonne 2. Jeg kan ikke få Vlookup til at fungere. Koden er:
For i = maxRow To 1 Step -1
If (InStr(UCase(.Cells(i, 1)), "US") > 0) Then
Worksheets("Output").Cells(i, 3).Value = Application._ WorksheetFunction.VLookup(Worksheets("Output").Cells(i, 2), USStates, 2, False)
End If
Next i
End With
Avatar billede kabbak Professor
19. februar 2013 - 20:54 #1
jeg er ikke sikker, men er USStates, ikke et navngivet område, så skal det vist nok i "".

Worksheets("Output").Activate
For i = maxRow To 1 Step -1
If (InStr(UCase(.Cells(i, 1)), "US") > 0) Then
Cells(i, 3).Value = Application. _
WorksheetFunction.VLookup(Cells(i, 2), "USStates", 2, False)
End If
Next i
End With
Avatar billede sbl Nybegynder
19. februar 2013 - 21:01 #2
Korrekt - USStates er named range.  2 x " ser dog ikke ud til at løse det...
Avatar billede kabbak Professor
19. februar 2013 - 21:03 #3
sådan, er testet

WorksheetFunction.VLookup(Cells(i, 2),range("USStates"), 2, False)
Avatar billede sbl Nybegynder
19. februar 2013 - 21:20 #4
Jeg får desværre fortsat 'run time error' på koden som nu ser således ud:
For i = maxRow To 1 Step -1
If (InStr(UCase(.Cells(i, 1)), "US") > 0) Then
  Cells(i, 3).Value = Application.WorksheetFunction.VLookup(Cells(i, 2), Range("USStates"), 2, False)
End If
Next i
End With
Jeg har checket named range og den virker med almindelig formel i celle.
Avatar billede kabbak Professor
19. februar 2013 - 21:31 #5
hvilken linje får du fejl i
Avatar billede sbl Nybegynder
19. februar 2013 - 21:37 #6
Fejlen er i:
If (InStr(UCase(.Cells(i, 1)), "US") > 0) Then
  Cells(i, 3).Value = Application.WorksheetFunction.VLookup(Cells(i, 2), Range("USStates"), 2, False)
Avatar billede kabbak Professor
19. februar 2013 - 21:40 #7
prøv at dele den op, vi laver en variabel StrTal

If (InStr(UCase(.Cells(i, 1)), "US") > 0) Then
  StrTal = Application.WorksheetFunction.VLookup(Cells(i, 2), Range("USStates"), 2, False)
Cells(i, 3)= StrTal

se så om den stopper ved
StrTal = Application.WorksheetFunction.VLookup(Cells(i, 2), Range("USStates"), 2, False)
Avatar billede sbl Nybegynder
19. februar 2013 - 21:51 #8
Den stopper i StrTal = Appl.... Hvad fortæller det mig?
Avatar billede kabbak Professor
19. februar 2013 - 21:59 #9
Her er en lille makro

Skriv en opslagsværdi i en celle og klik så ind i cellen til højre for den.
kør så makroen, så skal den finde opslagsværdien og skrive den i den celle du står i.

Public Sub test()
ActiveCell = Application.WorksheetFunction.VLookup(ActiveCell.Offset(0, -1), Range("USStates"), 2, False)
End Sub
Avatar billede sbl Nybegynder
19. februar 2013 - 22:04 #10
Og det gør den fint nok
Avatar billede kabbak Professor
19. februar 2013 - 22:08 #11
så burde det andet også virke.

du kan prøve at skrive

Dim  StrTal as variant

øverst i koden
Avatar billede sbl Nybegynder
19. februar 2013 - 22:15 #12
Yes - det virker også. Når jeg F8 igennem, fejler koden, når den skal laver lookup på en værdi, der ikke er i named range. Ved du om jeg kan komme omkring det?
Avatar billede kabbak Professor
19. februar 2013 - 22:23 #13
en hurtig en
sæt denne linje lige over den der fejler

On Error Resume Next
Avatar billede sbl Nybegynder
19. februar 2013 - 22:28 #14
Super - mange tak for hjælpen :-) Case closed.
Avatar billede kabbak Professor
19. februar 2013 - 22:30 #15
et 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
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