Jeg har lavet en lille makro til afspilling af et speicelopslag, der skal returner flere værdier ved et Lopslag. Det er sådan set også fint nok og det virker også, men mit problem består i at jeg kun kan aktivere mit opslag 1 række ad gangen (da det er en array)! Jeg har derfor indspillet en lille makro der kan løse mit problem, men ved makroen skal jeg manuelt sidde og rette range-cellerne manuelt!
Makroen ser således ud: Range("B96:AC96").Select Selection.FormulaArray = "=specielopslag(RC[-1],Pivot!R[164]C[-1]:R[11537]C,2)" ActiveWindow.SmallScroll Down:=2
Findes der ikke en smartere måde at gøre det på - hele fidusen med at bruge ovenstående makro render lidt ud i sandet når det tager så lang tid - især når jeg har flere tusinder linier!!!
Tror ikke det er det der er relevant. Men mit speciel opslag ser således ud: 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
Det jeg er interesseret i er en makro der kan afspille array funktionen i én omgang og ikke pr. linie... Altså den skal kunne ativeres for alle linier og ikke kun én ad gangen.. (håber det giver mening)
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 Dim c As Range Fundet = False omrade = Opslagsomrade For Each c In Range("A1:A20") If Not IsEmpty(c.value) Then 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
Hmm, kan ikke rigtigt få det til at virke. Hvad skal jeg angive Range til at være (du har sat det til A1:A20)? Angiver det de kolonner ud af den skal returnere i eller henviser den til alle de rækker nedad jeg skal have afspillet koden i ??
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 Dim c As Range Fundet = False omrade = Opslagsomrade For Each c In Range("B96:AC96") If Not IsEmpty(c.value) Then 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
Splokit: Jeg kan ikke få koden til at fungere. Uanset hvad jeg gør kommer den med en compile error (Block If without End if). Er ikke så rutineret i VBA så jeg selv kan rette det!
Jeg er ikke helt klar over hvilken måde man får Public Function til at virke på prøv den her :S lover ikke noget Private Sub Test() 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 Dim c As Range Fundet = False omrade = Opslagsomrade For Each c In Range("B96:AC96") If Not IsEmpty(c.Value) Then 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
End If Next End Function
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.