Avatar billede overgreat Forsker
02. marts 2017 - 21:57 Der er 3 kommentarer og
1 løsning

Indhente flere informationer fra anden tabel ala avanceret lopslag

Hej
Jeg håber nogle har fantasi til en løsning.

Jeg har tabel, hvor der i en af cellerne er semikolon separeret information.
I anden tabel har jeg information med 2 kolonner. Kolonne A er navnet; kolonne B er en dato.

Jeg ønsker at hente i noget ala lopslag funktionalitet informationen ind for alle de semikolonseparerede information.

Eks:
Første ark:
1. Celle B2: Horsens;Esbjerg;Herning

2. Tabel i andet ark:
Horsens | 22042017
Esbjerg | 21012017
Herning | 01012012

3. Ønsket information i celle:
Horsens 22042017; Esbjerg 21012017; Herning 01012012

Udfordringen for mig er, at det skal skabes i samme celle. Den bliver del af tabel, hvor mange steder kommer i celle... og jeg derfor ikke ønsker voldsomt mange kolonner (så ikke tekst til kolonner som løsning)

Håber I kan trylle ;-)
Avatar billede vegaz Juniormester
03. marts 2017 - 00:21 #1
Jeg har lavet en løsning, som gør det du efterspørger. Du bliver dog nødt til at gøre noget end bare at skrive en formel. Har stjålet lidt fra nettet og ændret i VBA koden, samt sammensat en ny makro.

Indsæt denne UDF i et nyt VBA module.

Function MultiArrayVLookup(LookUpVal, LookUpRng As Range, LookUpCol As Long)
   
    Dim v, w, x, y, i, rng As Range
   
    v = Split(LookUpVal, ";")
   
    ReDim w(UBound(v, 1))
    ReDim x(UBound(v, 1))
    ReDim y(UBound(v, 1))
   
    For i = LBound(v, 1) To UBound(v, 1)
        w(i) = WorksheetFunction.VLookup(v(i), LookUpRng, LookUpCol, False)
        x(i) = v(i)
        'Debug.Print x(i) & " " & w(i)
        y(i) = x(i) & " " & w(i)
    Next i
    'Debug.Print MultiArrayVLookup
    MultiArrayVLookup = Join(y, ";")
   
End Function


Du skal nu splitte dit data fra tabellen i det andet ark. Det kan du enten gøre manuelt eller du kan bruge nedenstående VBA macro - indsæt det i et nyt eller samme module som overstående. Vær opmærksom på at Sheet2 skal ændres til dit ark med data tabellen og at Table1 skal ændres til din datatabels navn.
Følgende macro splitter(Text to Column) din Table1 i Sheet2 og trimmer alle felterne, dvs. den sletter mellemrum efter tekst.

Sub Text2ColAndTrim()
Dim c As Variant, rng As Range
   
    ' Ændre Sheet2 til dit ark med tabellen
    Set rng = Sheet2.ListObjects("Table1").Range ' ændre table1
    Set rng = Sheet2.Range(rng, Cells(Rows.Count, rng.Column).End(xlUp))
    'Debug.Print rng.Address
   
    rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="|", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
       
    For Each c In Sheet2.UsedRange ' Udskift Sheet2 med dit sheetnavn
        c.Value = Application.Trim(c)
    Next c
End Sub

I C2, der hvor du vil have resultatet vist, skriver du:
=MultiArrayVLookup($B2;Sheet2!$A$2:$B$4;2)
Formlen er: MultiArrayVLookup(Opslags Værdi; Opslags range; Opslags Kolonne i range)

Kør Text2ColAndTrim makroen efter du har skrevet formlen ind og det burde virke :-)
Avatar billede overgreat Forsker
03. marts 2017 - 08:39 #2
Hej

Tak for hurtigt svar... jeg tror jeg er meget tæt på at have den løst... dog arbejder jeg med dansk version.... har rettet alle henvisninger til tabel og ark... men hvor skal jeg rette funktions-teksten (Vlookup, multiarray mv...).

Jeg får nemlig fejl når jeg afvikler scriptet.

På forhånd tak.

Mvh

Henrik
Avatar billede vegaz Juniormester
03. marts 2017 - 16:36 #3
Ja beklager, jeg kører engelsk Excel.
Hvilken fejl får du? Og er det en VBA run time fejl? Hvis ja, hvilken linje laver den gul?

Du behøver ikke rette i funktionen, du skal kun rette Text2ColAndTrim proceduren.
Avatar billede overgreat Forsker
04. marts 2017 - 11:57 #4
Hej
Tak for inputtet - jeg fik det til at fungere via ovenstående.
Mvh
Henrik
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

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