Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 7
  • 308

W bazie wewnętrznej "tblBazyDanych" znajdują się uproszczone nazwy klientów, (krótsze stringi) i przypisane im kolumny, np. ID, NIP, telefon, mail. Z zewnątrz otrzymujemy brudną bazę, w której nazwy tych samych klientów są wprowadzone pod różnymi postaciami. Jak uzyskać rezultat wyszukania Vlookup z "Tabeli bazy danych"  jak w kolumnie pogrubionej?

W sieci prezentowane są często rozwiązania odwrotne, gdzie krótsze stringi "matchuje się z bazą danych, w której występują pełne nazwy, np. w tym video "Partial/Fuzzy match":

https://www.youtube.com/watch?v=bKmxFhOY70M

Nie znajduję zaś odwrotnego rozwiązania: matchowania dłuższych nazw z krótszymi, jak w moim pytaniu. Czy jest to możliwe tylko za pomocą formuł? Czy też trzeba odwołać się do VBA i szukać w każdym rekordzie, czy występuje któryś z wyrazów?


"Tabela zewnętrzna"

Kolumna 1                                          Kolumna 2 vlookup matchująza z tblBazyDanych zwracająca

Przedsiębiorstwo Handlu Polexpo.          3
Dystrybutor - FUTURO PUH                    2
Excomers przedsiębiorstwo handlu ...     1
Przeds. Futuro Sp. z o.o.                        2
Jan Kowalski Excomers.                         1

 

"tblBazyDanych"

EXCOMERS    1
FUTURO         2
POLEXPO       3

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 13.03.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedź (1)

  • 15

Panie Jacku.

Tak, jest to możliwe. Interesująca nas formuła to:

{=INDEKS($H$6:$H$8;PODAJ.POZYCJĘ(FAŁSZ;CZY.BŁĄD(SZUKAJ.TEKST($G$6:$G$8;C6));0))}

 

$G$6:$G$8 - zakres komórek Pana "TblBazyDanych".

$H$6:$H$8 - przypisane im wartości.

c6 - aktualna komórka sprawdzana w "Tabela zewnętrzna".

 

SZUKAJ.TEKST($G$6:$G$8;C6)

Funkcja nie jest wrażliwa na wielkość liter, podaje nam numer znaku w komórce, od którego zaczyna się porównywany tekst.

Jej wyniki to np. : (#Arg;#Arg;25) - czyli, nie znalazł ani pierwszej, ani drugiej wartości z "TblBazyDanych", a trzecia zaczyna się od 25 znaku. Na błędzie nic nie zrobimy, dlatego:

CZY.BŁĄD(SZUKAJ.TEKST($G$6:$G$8;C6)

Zamieniamy wszystkie wyniki na logiczne prawda, fałsz.I mamy (Prawda;Prawda;Fałsz). Fałsz reprezentuje wartość wyszukaną.

Argument funkcji 0 określa wyszukiwanie dokładne:

PODAJ.POZYCJĘ(FAŁSZ;CZY.BŁĄD(SZUKAJ.TEKST($G$6:$G$8;C6));0)

Podaj pozycję fałszu w liście wyszukań, czyli który element z "TblBazyDanych" został znaleziony

 i już łatwo: Indeks, z wartości wybieramy pozycję elementu.

Patrz załącznik.

 

Załączniki

  • xlsx

    porównanie.xlsx ( 17K )
  • Odpowiedział
  • @ | 15.03.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Bardzo dziękuję. Ta formuła jest genialna.
Skomentował : @ Jacek_Kotowski ,31.03.2015
  • 60
  • 54
  • 94