Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Transmit
nováček
Příspěvky: 29
Registrován: leden 10
Pohlaví: Muž
Stav:
Offline

Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod Transmit » 04 říj 2016 18:08

Dobrý den,

v listu "zápis o dodávce" je ve sloupci A zápis o původu zboží, ve kterém se vždy nachází země původu. Bohužel je země pokaždé zmíněna v textu v buňce v jiném pořadí, ani rozdělovače nejsou vždy stejné. Pouze označení země je vždy stejně zapsané (CHINA, KOREA, atp.)
V druhém listu, "seznam států", jsou tyto názvy států zapsané spolu s úplným názvem dané země ve vedlejším sloupci (např. u KOREA je Republik Korea).
To, o co bych vás chtěl požádat, je pomoc s nastavením vzorce, aby, pokud je to možné, bylo do sloupce B na listu "zápis o dodávce" vyvzorcovaný úplný název země z listu "seznam států".
Př: pokud je v buňce A2 na listu "zápis o dodávce" obsažen řetězec znaků "KOREA", ve sloupci B na stejném listu se objeví "Republik Korea".
Seznam států bude velmi obsáhlý. Jako výsledek bych chtěl dosáhnout toho, že se budou k zápisům o dodávce doplňovat kompletní názvy států, které vytvořím v listu "seznam států".
Vzorový soubor v příloze.
Sešit1.xlsx
(8.94 KiB) Staženo 91 x


Díky moc za pomoc,
Štěpán

Reklama

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod Azuzula » 05 říj 2016 18:37

Tady jsem spíchla funkci která udělá co potřebuješ.

Kód: Vybrat vše

Function NajdiShodu(BunkaKdeHledatRetezec As Range, ZdrojovaTabulka As Range, SloupecZdroje_Hledej As Integer, SloupecZdroje_Ukaz As Integer) As Variant
Dim a As Long
'*** Funkce na hledání určité sady znaků v buňce podle více hodnot z tabulky ***
'BunkaKdeHledatRetezec  = je buňka ve které se bude vyhledávat řetězec ze zdrojové tabulky
'ZdrojovaTabulka        = zdrojová tabulka ve které se bude vyhledávat
'SloupecZdroje_Hledej   = sloupec zdrojové tabulky ve kterém se má vyhledávat
'SloupecZdroje_Ukaz     = sloupec zdrojové tabulky ze kterého se vezme výsledek podle řádku shody hledání
'*** vzorec: =NajdiShodu(BunkaKdeHledatRetezec;ZdrojovaTabulka;SloupecZdroje_Hledej;SloupecZdroje_Ukaz) ***
'*** pžíklad: =NajdiShodu(A2;'List2'!A:B;1;2)***

With ZdrojovaTabulka
For a = 1 To .Rows.Count
    If .Cells(a, SloupecZdroje_Hledej) = "" Then GoTo konec 'pokud je prázdná buňka na konci zdrojové tabulky
    If BunkaKdeHledatRetezec = "" Then NajdiShodu = 0: Exit Function 'když je prohledávaná buňka prázdná, funkce vrátí hodnotu nula
    If InStr(1, BunkaKdeHledatRetezec, .Cells(a, SloupecZdroje_Hledej), vbTextCompare) > 0 Then
        NajdiShodu = .Cells(a, SloupecZdroje_Ukaz) 'úspěšné hledání
        Exit Function
    End If
Next
End With
konec:
NajdiShodu = CVErr(xlErrNA) 'vrátí chybu N/A když nenajde shodu
'*** Tuto funkci napsala Azuzula - Zuzana Nyiri ***
End Function
Přílohy
Sešit1.xlsm
(17.37 KiB) Staženo 93 x
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

Transmit
nováček
Příspěvky: 29
Registrován: leden 10
Pohlaví: Muž
Stav:
Offline

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod Transmit » 05 říj 2016 19:48

Perfektní, děkuju moc!

Azuzula píše:Tady jsem spíchla funkci která udělá co potřebuješ.

Kód: Vybrat vše

Function NajdiShodu(BunkaKdeHledatRetezec As Range, ZdrojovaTabulka As Range, SloupecZdroje_Hledej As Integer, SloupecZdroje_Ukaz As Integer) As Variant
Dim a As Long
'*** Funkce na hledání určité sady znaků v buňce podle více hodnot z tabulky ***
'BunkaKdeHledatRetezec  = je buňka ve které se bude vyhledávat řetězec ze zdrojové tabulky
'ZdrojovaTabulka        = zdrojová tabulka ve které se bude vyhledávat
'SloupecZdroje_Hledej   = sloupec zdrojové tabulky ve kterém se má vyhledávat
'SloupecZdroje_Ukaz     = sloupec zdrojové tabulky ze kterého se vezme výsledek podle řádku shody hledání
'*** vzorec: =NajdiShodu(BunkaKdeHledatRetezec;ZdrojovaTabulka;SloupecZdroje_Hledej;SloupecZdroje_Ukaz) ***
'*** pžíklad: =NajdiShodu(A2;'List2'!A:B;1;2)***

With ZdrojovaTabulka
For a = 1 To .Rows.Count
    If .Cells(a, SloupecZdroje_Hledej) = "" Then GoTo konec 'pokud je prázdná buňka na konci zdrojové tabulky
    If BunkaKdeHledatRetezec = "" Then NajdiShodu = 0: Exit Function 'když je prohledávaná buňka prázdná, funkce vrátí hodnotu nula
    If InStr(1, BunkaKdeHledatRetezec, .Cells(a, SloupecZdroje_Hledej), vbTextCompare) > 0 Then
        NajdiShodu = .Cells(a, SloupecZdroje_Ukaz) 'úspěšné hledání
        Exit Function
    End If
Next
End With
konec:
NajdiShodu = CVErr(xlErrNA) 'vrátí chybu N/A když nenajde shodu
'*** Tuto funkci napsala Azuzula - Zuzana Nyiri ***
End Function

MePExG
Level 2
Level 2
Příspěvky: 193
Registrován: srpen 16
Pohlaví: Muž
Stav:
Offline

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod MePExG » 06 říj 2016 09:54

Ponúkam riešenie pomocou maticového vzorca. =MATCH(1;IFERROR(MATCH("*"&stat[Skratka]&"*";A2;0);0);0) vnoreným do index.
Zápis vzorca pomocou Ctrl+Shift+Enter.
Riešenie v prílohe
Stat.xlsx
(11.36 KiB) Staženo 124 x
.

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod Azuzula » 06 říj 2016 13:55

MePExG píše:Ponúkam riešenie pomocou maticového vzorca...

Teď teprve vidím jakou sílu mají matice (minimálně ty v excelu) a já si naivně myslela, že jsou jen na počítání čehosi co v životě nebudu potřebovat.
Hold jsme o tohle na střední ani nezavadili. Díky Tobě mám další námět na studium.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

guest
Pohlaví: Nespecifikováno

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod guest » 06 říj 2016 14:26

Já bych se v tomto případě maticovému počtu vyhnul. Podle mě bude rychlost výpočtu rapidně klesat s počtem záznamů.

MePExG
Level 2
Level 2
Příspěvky: 193
Registrován: srpen 16
Pohlaví: Muž
Stav:
Offline

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod MePExG » 06 říj 2016 15:49

Žiaľ musím súhlasiť s xln., ale pojal som to ako výzvu, ktorú som myslím zdolal. Do cca. 1000 riadkov by som to používal takto (záleží na procesore), ale keby bolo riadkov viac, aj ja by som si radšej vyrobil funkciu.

guest
Pohlaví: Nespecifikováno

Re: Vyhledání řetězce znaků v textu buňky spolu s vyhledáním hodnoty ve vedl.listu

Příspěvekod guest » 06 říj 2016 17:14

Jako výzva v pohodě, ostatně v takovém vzorci je leckdy větší know-how než v kódu ze Záznamníku maker (chraň bůh, to není poznámka ke kódu Azuzuly!).

Já bych nešel ani do vlastní funkce. Cílem je projít data, která se sice mohou měnit, ale není to nejspíš otázka změny "každou minutu". Projít, doplnit čisté hodnoty, ende. Proč si kazit přepočet listu tunou zdržujících výpočtů.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Sejmuti textu ve win 11 - vystřižky Příloha(y)
    od L.L » 08 říj 2024 21:17 » v Programy ke stažení
    1
    2521
    od petr22 Zobrazit poslední příspěvek
    10 říj 2024 11:22

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů