19. oktober 2005 - 17:06Der er
23 kommentarer og 1 løsning
Lopslag med returnering af flere værdier (tekst)!
Ud fra et kundenummer vil jeg gerne have returneret flere tekst værdier. Jeg kunne godt tænke mig at få følgende ud:
Kundenr Sælger 4004 Svend Bent Lars R. Dan K. 4005 Lars R. Svend Bent
Når jeg laver en Lopslag returner den kun den første sælger i rækken og ikke de andre. Jeg vil meget gerne have flyttet sælger 2 og 3 ned i rækkerne underneden, hvorfor en sammenkædnings funktion ikke dur (de står ud i én køre). Lopslaget skal nemlig returnere den enkelte sælgers omsætning og DB!
Public Function SpecielOpslag(Kriterie As Range, Opslagsomrade As Range, ResultatKolonne) As String Dim Fundet As Boolean, F_ad As Integer, S_ad As Integer Fundet = False omrade = Opslagsomrade For I = 1 To UBound(omrade) If omrade(I, 1) = Kriterie Then F_ad = I Fundet = True End If
If omrade(I, 1) <> Kriterie And Not IsEmpty(omrade(I, 1)) And Fundet Then S_ad = I - 1 Exit For End If Next If Fundet Then For T = F_ad To S_ad SpecielOpslag = SpecielOpslag & " - " & omrade(T, ResultatKolonne) Next Else SpecielOpslag = "Ikke fundet" End If End Function
Kaldes med
=SPecielOpslag(D2;A2:B6;2) D2 =cellen den skal sammenlignes med A2:B6 = dataområdet 2 = kolonnen i området med resultaterne
Det er sku liret!! Men er det ikke muligt at returnere tekstværdierne med ét navn på celle? Jeg skal nemlig kunne trække den enkelte sælger ud i en pivottabel på et senere tidspunkt...
Public Function SpecielOpslag(Kriterie As Range, Opslagsomrade As Range, ResultatKolonne) As Variant Dim Fundet As Boolean, F_ad As Integer, S_ad As Integer, Temp() As Variant Fundet = False omrade = Opslagsomrade For I = 1 To UBound(omrade) If omrade(I, 1) = Kriterie Then F_ad = I Fundet = True End If
If omrade(I, 1) <> Kriterie And Not IsEmpty(omrade(I, 1)) And Fundet Then S_ad = I - 1 Exit For End If Next I = (S_ad - F_ad) + 1 If Fundet Then ReDim Temp(I) As Variant I = 0 For T = F_ad To S_ad Temp(I) = omrade(T, ResultatKolonne) I = I + 1 Next SpecielOpslag = Temp Else SpecielOpslag = "Ikke fundet" End If End Function
Samme måde, men marker Lige så mange celler udad, som du kanforvente af sælgere, inden du skriver i cellen og slut af med CTRL+SHIFT ENTER, da det nu er en array function
der er lige rettet en fejl, hvis det var den sidste den fandt, opstod der en fejl.
Public Function SpecielOpslag(Kriterie As Range, Opslagsomrade As Range, ResultatKolonne) As Variant Dim Fundet As Boolean, F_ad As Integer, S_ad As Integer, Temp() As Variant Fundet = False omrade = Opslagsomrade For I = 1 To UBound(omrade) If omrade(I, 1) = Kriterie Then F_ad = I Fundet = True End If
If omrade(I, 1) <> Kriterie And Not IsEmpty(omrade(I, 1)) And Fundet Then Exit For End If Next S_ad = I - 1 I = (S_ad - F_ad) + 1 If Fundet Then ReDim Temp(I) As Variant I = 0 For T = F_ad To S_ad Temp(I) = omrade(T, ResultatKolonne) I = I + 1 Next SpecielOpslag = Temp Else SpecielOpslag = "Ikke fundet" End If End Function
Kan jeg ikke få kundenummerne rykket ned, når den returnere sælgernes navne? jeg har en liste der ser således ud:
kundenr 4004 4005 4005
Vil gerne have den til at blive formateret på følgende måde med de returneret værdier:
kundenr sælger 4004 Svend arne kurt 4005 dan ib 4006 johnny
med din ellers ret seje løsning kommer sælgerne til at blive returneret nedad uden man kan holde øje med hvilken sælger der hører til hvilken kunde.Jeg har nemlig 6500 kunder jeg skal have gjort det her ved.....
Sub Opdater() Dim LKrow As Long, LDrow As Long, X As Long, T As Long Dim Kriterie As Variant, ReadData As Variant Dim Resultat(1000, 1) As Variant ' 1000 = antal forventede kunder*sælgere
' arket hvor der skrives i og hvor kriterier står i A kolonnen, startende i A1 LKrow = Worksheets("Ark3").Range("A65536").End(xlUp).Row Kriterie = Worksheets("Ark3").Range("A1:A" & LKrow)
'Arket hvor data findes i 2 kolonner, her A og B LDrow = Worksheets("Ark1").Range("A65536").End(xlUp).Row ReadData = Worksheets("Ark1").Range("A1:B" & LDrow) X = 0 Fundet = False For L = 1 To UBound(Kriterie)
For I = 1 To UBound(ReadData)
If ReadData(I, 1) = Kriterie(L, 1) Then Fundet = True F_ad = I End If
If ReadData(I, 1) <> Kriterie(L, 1) And Not IsEmpty(ReadData(I, 1)) And Fundet Then Exit For End If Next
If Fundet Then S_ad = I - 1 Resultat(X, 0) = Kriterie(L, 1) For T = F_ad To S_ad Resultat(X, 1) = ReadData(T, 2) X = X + 1 Next Else Resultat(X, 0) = Kriterie(L, 1) Resultat(X, 1) = "Ikke fundet" X = X + 1 End If Fundet = False Next
' Arket hvor resultates skrives, her Ark3 B og C kolonnen Worksheets("Ark3").Range("B2:C" & UBound(Resultat) + 2) = Resultat
Cool... mange tak for det. Det virker sku helt perfekt!!!
Synes godt om
Ny brugerNybegynder
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.