Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Multi vlookup / Wyszukaj.pionowo

Czesc,

Jednym z ograniczen zwiazanych z popularna funkcja vlookup jest wyszukiwanie tylko pierwszej wartosci z listy referencyjnej. A jesli chcielibysmy zwrocic "wiecej niz jedno zwierze"?

Jedno z mozliwych rozwiazan:



'Do implementacji w module VBA

Option Explicit

Public Function multi_vlookup(lookup_value As Range, table_area As Range, col_ind_num As Integer, row_ind_num As Integer)
'Opcjonalnie - On Error GoTo fin
Dim i, k As Integer
Dim Last As Long

Dim value() As String

Last = table_area.Cells(Rows.Count, 1).End(xlUp).Row

k = 0
For i = 1 To Last

If table_area.Cells(i, 1) = lookup_value Then

ReDim Preserve value(k)
value(k) = table_area.Cells(i, col_ind_num)
k = k + 1
End If
Next

multi_vlookup = value(row_ind_num - 1)

fin:
End Function



W komorce excela:



=multi_vlookup(A1,Arkusz2!$A:$E,NrKolumny,NrRekordu)



NrKolumn - wartosc numeryczna - oznaczenie z ktorej kolumny bedziemy zwracac wartosc
NrRekordu - wartosc numeryczna - ktora kolejna wartosc z listy chcemy zwrocic.

Uwaga: nalezy podac jako zakres/referencje cale kolumny - tak jak w przykladzie - Arkusz2!$A:$E

Moze sie komus przyda kiedys.
Pzdr
R.Ten post został edytowany przez Autora dnia 09.11.17 o godzinie 12:06
Andy L.

Andy L. ITM, VUB

Temat: Multi vlookup / Wyszukaj.pionowo

Albo po prostu można użyć PowerQuery bez zbędnego VBA i dodatkowych formuł :) :) :)
Radosław Dumania

Radosław Dumania Senior Master Data
Analyst

Temat: Multi vlookup / Wyszukaj.pionowo

Andy L.:
Albo po prostu można użyć PowerQuery bez zbędnego VBA i dodatkowych formuł :) :) :)

Trudno się nie zgodzić. Jest to też jedno z możliwych rozwiązań problemu.
Artur D.

Artur D. Solution Architect,
Atos IT Services Sp.
z o.o.

Temat: Multi vlookup / Wyszukaj.pionowo

Jak ma być funkcją to można wbudowaną użyć - INDEKS + MAX.K
Andy L.

Andy L. ITM, VUB

Temat: Multi vlookup / Wyszukaj.pionowo

i dlatego nie cierpię lokalizowanych wersji

INDEKS (spolszczona wersja INDEX-u)
a ten potworek to co to ma być: MAX.K ? może powinno byc MAKS.K ? :):):)
Artur D.

Artur D. Solution Architect,
Atos IT Services Sp.
z o.o.

Temat: Multi vlookup / Wyszukaj.pionowo

Powinno być, a takie potworki wychodzą jak się codziennie pracuje na angielskiej wersji excela :)
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Multi vlookup / Wyszukaj.pionowo

Kiedyś napisałem taki dodatek do pobrania z EF

Obrazek

W zamierzeniu miałem zrobić konwersje formuł, a jednego języka na wybrany, ale... jakoś czasu zabrakło. Między innymi wynikiem dodatku jest otwarcie pliku z tabelą formuł które samemu można sobie na dzień dzisiejszy podmienić.
Andrzej Graczyk

Andrzej Graczyk Specjalista Analiz
Sprzedaży,
Wielkopolski Bank
Spółdzielczy

Temat: Multi vlookup / Wyszukaj.pionowo

Może moja funkcja też się komuś kiedyś przyda.
Funkcja zwraca tekst, który łączy znalezione unikalne wartości (posortowane). Kolejne wartości są oddzielone separatorem wybranym przez użytkownika.

Function indeks_razem(arg, gdzie, wart, sep)
'arg - szukany argument
'gdzie - zakres (kolumna) w którym gdzie szukamy arg
'wart - zakres (kolumna) z wartościami, jakie chcemy zwrócić
'sep - separator dzielący zwracane wartości

'co gdy nie ma arg w zakresie
If WorksheetFunction.CountIf(gdzie, arg) = 0 Then
indeks_razem = "Brak wartości"
Exit Function
End If

'szukanie wartości oraz uzupełnienie kolekcji
Dim f As New Collection
k = 0

For Each Item In gdzie.Cells
k = k + 1
If Item.Value = arg Then
On Error Resume Next
f.Add wart.Cells(k), CStr(wart.Cells(k))
On Error GoTo 0
End If
Next Item

'zamiana na tablicę i sortowanie wartości w tablicy
ReDim x(1 To f.Count)
For i = 1 To f.Count
x(i) = f.Item(i)
Next i

For i = 1 To UBound(x) - 1
For j = i + 1 To UBound(x)
If x(i) > x(j) Then
t = x(i)
x(i) = x(j)
x(j) = t
End If
Next j
Next i

indeks_razem = VBA.Join(x, sep)

End Function

Następna dyskusja:

TRIK - wpisanie tablicy bez...




Wyślij zaproszenie do