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 ;-)
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 :-)
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
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.