Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak využít operátor Like při porovnávání v Excel VBA?
V Excel lze využít operátor Like (možná znáte z databází a případně jiných programovacích jazyků). Já se v tomto článku zaměřím jak operátor Like funguje v Excel VBA (například v podmínkách). Pro přehlednost a možnost rozšiřování článku je rozdělen na jednotlivé kapitoly:
Operátor Like v Excel VBA umožní porovnávat řetězce (texty) proti paternu (vzoru). Like v prohledávaném řetězci (textu) zjišťuje zda obsahuje požadavané znaky (ty které máte v paternu). Případně zda řetezec je v požadovaném "formátu" (obsahuje číslice na patřičných pozicích).
Pro správnou funkci je potřeba umět napsat patern (možná vám bude připomínat regulární výraz, máte částečně pravdu, jen Like je "omezený").
Pro správné použití je potřeba znát, co který znak umí:
Pokud vám chybí znaky pro začátek, konec atd. (co mají regulární výrazy), máte smůlu (musíte použít je). Like poslouží, pokud vám stačí "základní", neboli jednodušší kontrola znaků, můžete použít operátor like (lépe a rychleji se napíše). Pro pokročilejší práci už s operátorem like nevystačíte a budete se muset poohlédnout po regulárních výrazech a využít například RegExp.
Víceméně relularní výrazy se dají brát jako další jazyk, takže máte o zábavu postaráno ;)
Poznámka: Ukázky pracují s standartním nastavením, nebo-li Option Compare Binary.
První jednoduchá ukázka:
' Potřebuji zjistit, zda text obsahuje A (velké a kdekoliv v textu)
MsgBox ("A123C" Like "*A*")
' True pokud obsahuje
Zafunguje i tato druhá ukázka:
' Potřebuji zjistit, zda text začíná A (velké písmeno A na začátku textu)
MsgBox ("A123C" Like "A*")
' True pokud obsahuje
Ale co když A nebude na začátku
' Potřebuji zjistit, zda text začíná A (velké na začátku textu)
MsgBox ("BA123C" Like "A*")
' False - sice A v kódu je ale není první
Teď je úplně jedno kde A bude proto je patern *A*
' Potřebuji zjistit, zda text obsahuje A (velké a kdekoliv v textu)
MsgBox ("BA123C" Like "*A*")
' True
Rozlišuje velká a malá písmena:
' Potřebuji zjistit, zda text obsahuje A (malé a kdekoliv v textu)
MsgBox ("BA123C" Like "*a*")
' False - není malé a
' Tip - není přenastaven: Option Compare
K testům můžete využít například MsgBox:
MsgBox ("123-345" Like "###[-]###")
MsgBox ("123-345" Like "###[-.]###")
MsgBox ("abcpesabc" Like "*pes*")
MsgBox ("abcpesabc" Like "pes*")
MsgBox ("pas" Like "p?s")
MsgBox ("pas" Like "p??s")
MsgBox ("A4C" Like "A#C")
MsgBox ("ABC" Like "A??C")
MsgBox ("A123C" Like "A*C")
MsgBox ("1B3" Like "1[A-Z]3")
MsgBox ("123" Like "1[!A-Z]3")
MsgBox ("1B3" Like "1[!A-Z]3")
MsgBox ("a" Like "[a,c,k]")
MsgBox ("b" Like "[a,c,k]")
MsgBox ("b" Like "[!a,c,k]")
MsgBox ("bb" Like "*b*")
MsgBox ("bb" Like "*!b*")
Pokud máte rádi Debug.Print, můžete také testovat také:
Debug.Print "JakNaExcel" Like "*Excel*"
Debug.Print "JakNaExcel" Like "*Google*"
Výsledek v Immediate je jasný
True
False
Pokud si chcete vytvořit vlastní funkci, pro hrátky můžete
Public Function JeLike(Text As String, Pattern As String) As Boolean
' aneb co se kontrolovalo v MsgBoxu případně Debug.Print
JeLike = Text Like Pattern
End Function
Následně pak stačí do buňky zadat vaši vlastní funkci. Samozřejmě, že se můžete odkazat na buňky ve kterých budete mít prohledávané texty a paterrny, ale to již nechám na vás.
=JeLike("Ahoj"; "A*")
Poznámka, vím, že funkce jde vylepšit a zdokonalit, ale pro pokudy naprosto dostačuje. Pokud dostačovat nebude, pozorný čtenář si sám upraví a vylepší. Svým výsledkem pak může pochlubit v komentářích.
Příkaz (jak budou porovnávany řetězce) bude popsán samostatně o ostatními příkazy týkající se Option *. Děkuji za tip Petrovi (kdyby náhodou někomu kódy nefungovali, z důvodu jiného nastavení).
Výchozí hodnota porovnávání
Option Compare Binary
příklad řazení znaků:
0 < 9 < A < B < C < D < Z < a < z < Á < á < Ě < ě < Ř
Nutno nastavit
Option Compare Text
příklad řazení znaků:
0 < 9 < (A=a) < (Á = á) < (B=b) < (E=e) < (Ě=ě) < (Z=z)
Chcete-li testovat a hrát si s parametrem Text (Binary) v Option Compare:
If "a" = "A" Then ' zle testovat i "a" < "A"
MsgBox ("Ano")
Else
MsgBox ("Ne")
End If
Další použití jinde:
StrComp("JakNaExcel", "jaknaexcel", vbBinaryCompare) ' 1
StrComp("JakNaExcel", "jaknaexcel", vbTextCompare) ' 0
Praktické použití operátoru Like naleznete v podmínkách if then else případně v konstrukci Select Case.
Článek byl aktualizován: 19.09.2020 11:07
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Můžete být prvními co zanechají smysluplný komentář.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |