Avatar billede meiland Mester
14. februar 2020 - 12:30 Der er 8 kommentarer og
1 løsning

VBA: Brugerdefineret funktion med Lopslag

Hej Alle.
Jeg har en brugerdefineret funktion:

Function Beregnfelt(Type, TK, L, VBL, B, VBB, var)

For at kunne finde beregne Beregnfelt skal jeg bruge 2 yderligere variabler, hvis værdier afhænger Type.

Jeg har løst problemet med:

if Type=1 then
  x1=23
  x2=11
end if
if Type=2 then
  x1=21
  x2=56
end if
osv. osv.

Men da jeg har over 60 forskellige typer, bliver det en lang og ikke særlig køn kode.

Spørgsmålet er om jeg kan bruge Lopslag (Hlookup) i stedet for.
Jeg har Type, x1 og x2 i tabelformat på arket "Felttyper"

Jeg har prøvet med nedenstående, men får fejlen type mismatch

Function Beregnfelt(Type, TK, L, VBL, B, VBB, var)

Dim DRange As Range
Set DRange = Sheets("Felttyper").Range("B2:D64")
Dim x1 As Variant

x1=application.hlookup(Type, DRange, 2, False)
'vis om det er den rigtige værdi af x1
Msgbox (x1)

end function

Er der nogle, der kan hjælpe mig videre ??
Avatar billede Jan K Ekspert
14. februar 2020 - 15:21 #1
Har du 9røvet med Application.WorkshettFunction?
Avatar billede meiland Mester
14. februar 2020 - 15:50 #2
ls = Application.WorksheetFunction.HLookup(felttype, DRange, 5, False)

giver runtime error 1004: Kan ikke angive egenskaben HLookup for klassen WorksheetFunction
Avatar billede Jan K Ekspert
14. februar 2020 - 17:09 #3
Hvordan er dine variabler erklæret i forhold til de data, der står i arket?
Avatar billede store-morten Ekspert
14. februar 2020 - 19:24 #4
Lidt at lege med:
Function Beregnfelt(Typer, x)

Dim DRange As Range
Set DRange = Sheets("Felttyper").Range("B2:D64")
If x = 1 Then Kol = 2
If x = 2 Then Kol = 3

Beregnfelt = Application.VLookup(Typer, DRange, Kol, False)

End Function

Hvor B2:B64 indeholder Typer 1 til 63
Og: C2:C64 indeholder x1 værdier
Og: D2:D64 indeholder x2 værdier
Avatar billede meiland Mester
14. februar 2020 - 22:04 #5
@store-morten
Jeg har prøvet at lege med dit forslag, men uden det store held.
Jeg har lagt et øve ark op på
https://www.dropbox.com/s/2aypd79reywcim0/lopslag.xlsm?dl=0

hvis det kan hjælpe..
Avatar billede store-morten Ekspert
14. februar 2020 - 23:04 #6
WorksheetFunction.HLookup(Perftype, DRange, Kol, False)
Du bruger vandret opslag i stedet for lodret opslag!

WorksheetFunction.HLookup(Perftype, DRange, Kol, False)
Du bruger WorksheetFunction i stedet for Application.

Du taster: Perftype som tal, men i din tabel er det tekst.

Kode følger...
Avatar billede store-morten Ekspert
14. februar 2020 - 23:18 #7
Avatar billede meiland Mester
18. februar 2020 - 17:22 #8
Hej store-morten.

1000 Tak for hjælpen...

Og jeg glemmer aldrig forskellen på hlookup og vlookup :-)
Avatar billede store-morten Ekspert
18. februar 2020 - 17:25 #9
hlookup = horisontal (vandret)
vlookup = vertikal (lodret)

Velbekomme ;-)
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