Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-triky » regularni-vyrazy-excel-VBA
Microsoft Excel logo

Regulární výrazy - Excel VBA

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

^ab*$ aneb jak na regulární výrazy v Excel

Excel a regulární výrazy

Microsoft Excel logo

Na jednom ze školení byl zajímavý dotaz, umí Excel hledat dle regulárních výrazů. Umí ale ve VBA a musí se tato funkce povolit. Dotaz zaujal a já napsal článek a z důvodu přehlednosti ho rozdělil na tyto kapitoly:


Trocha teorie

Potřeboval jsem hlavně pro sebe, ale hodit se bude určitě i vám.

Znak Použití Najde Nenajde Popis
bcd bcd, abcd, bcde, abcde bacd každý řetězec osahující slovo
^ ^bcd bcd, bcdef, bcdee abcde označuje začátek řetězce
$ bcd$ abcd, bcd, aabbcd bcdef označuje konec řetězce
. .bcd abcd, aabcd,abcde bcd zastupuje libovolný znak
. ^.bcd$ abcd aabcd,abcde, bcd zastupuje libovolný znak
* ab* abcd, aabcd, abbbb, a, abb bb opakování předcházejícího znaku 0 a víckrát
* ^ab*$ abbbb, a, abb abcd, aabcd, bb opakování předcházejícího znaku 0 a víckrát
je stejné {0,}
+ ^ab+$ abbbb, abb abcd, aabcd, bb, a opakování předcházejícího znaku jednou- a víckrát
je stejné {1,}
? ^ab?$ a, ab abcd, aabcd, bb opakování předcházejícího znaku jednou nebo nula
je stejné {0,1}
{2,3} ^ab{2,3}$ abb, abbb abcd, ab, aabb opakování předchozího znaku 2 až 3 krát
{5} ^ab{5}$ abbbbb abcd, ab, aabb opakování předchozího znaku 5 krát
{2,} ^ab{2,}$ abb, abbb, abbbb ab, aabb opakování předchozího znaku 2 krát a více
[] ^a[klm]$ ak, al, am abcd, ab, aabb jeden znak ze seznamu v závorkách
[] ^[a-z]*$ ak, al, am abCd, aB řetězce z malých písmen
[] ^[a-zA-Z]*$ ak, al, am, ABC, aB abCd1, aa2 řetězce z malých a velkých písmen
[] ^[a-zA-Z0-9]*$ ak, al1, am, ABC, aB řetězce z malých a velkých písmen a čísel (nenajde napr. "-_,!" alebo "ščžý" )
^ ^[^0-9] ak, al, am, ABC, aB 1abCd1, 8aa2 negace pokud a začátku, najde jen a A (na začátku)
| ^(0|1|2|3|4|5|6|7|8|9) 1abCd1, 8aa2 ak, al, am, ABC, význam logického OR, najde číslo na začátku
- ^[0-9] 1abCd1, 8aa2 ak, al, am, ABC, je stejné jako ^(0|1|2|3|4|5|6|7|8|9)
() ^(abcd)*$ abcd, abcdabcd, abcdabcdabcd abc seskupení řetězce
\ ^\*$ * abc libovoný znak
\ \* *, *ab, aa*bb abc najde hvězdičku
- ^[a-z]*$ ak, al, am abCd, aB rosah

Ukázka

Regulární výrazy - ukázka pro VBA Excel

Zprovoznění regulárních výrazu v Excel

Předpokládám alespoň základní znalosti VBA (jak spustit editor VBA) tak jen ve zkratce. Bohužel po instalaci Microsoft Excel není podpora pro regulární výrazy k dispozici (Excel 2010). Zpřístupnění regulárních výrazů provedete:

  • Spustit VBA z karty Vývojář - Jak zobrazit kartu Vývojář a pak klik na ikonu Visual Basic
  • Menu Tools a References - pro zobrazení dialogového okna References VBA
  • Zatrhnout Microsoft VBScript Regular Expressions 5.5 - pokud již náhodou máte zatrhnuto, uvidíte na začátku. VBA řádí abecedně v sekcích (zatrhnuto/nezatrhnuto).
  • OK a máte hotovo a můžete testovat

Tip jak nezapínat

Děkuji Jojo za doplnění v komentářích, možnosti jak nemuset ručně zapínnat Microsoft VBScript Regular Expressions 5.5 .

Dim regEx As Object ' create the RegExp Object with late binding Set regEx = CreateObject("vbscript.regexp")

Ukázkový kód VBA

Kontroluji zda hodnota v A1 odpovídá regulárnímu výrazu v B1. Odpověď do MsgBox.

Dim regEx As New RegExp strInput = ActiveSheet.Range("A1").Value strPattern = ActiveSheet.Range("B1").Value With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.Test(strInput) Then MsgBox ("OK") Else MsgBox ("Neodpovídá.") End If

Ukázka

Regulární výrazy - ukázka pro VBA Excel

Podrobněji o regulárních výrazech

V přípravě.

Související články


Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor Regulární výraz - praktické příklady - VBA soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Závěrem

Napadá vás jiné použití regulárních výrazů? Můžete využít komentáře.


Článek byl aktualizován: 19.09.2020 11:07

Odměna

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.


Pavel Lasák - autor webu

Pavel Lasák

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ů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


xlnc

Přidáno: 07.01.16 14:23

Nezlobte se na mě Pavle, ale praktického na tom není nic (OK/Fail). Regulárními výrazy není možné jen testovat, ale i vracet odpovídající řetězce, případně provádět nahrazování. RegExp je sice stařičký a na češtině pod VBA zatraceně skřípe, ale něco udělat jde. Doporučuji se poohlédnout v literatuře k VBScriptu, ze kterého knihovna čerpá.

Pavel Lasák

Přidáno: 08.01.16 12:33

To xlnc: Nezlobím další příklady budou následovat (i na náhradu). Ne každý je expert na programování a něčim je potřeba začít. Já jsem potřeboval kontrolu znaku, tak jsem si udělal poznámky (když už jsem něco tvořil). U regulární výrazů jsou i další znaky s \ jejich použití mi také v článku chybí ;)

Jojo

Přidáno: 08.06.16 08:37

To Pavel Lasák: -- Prosím v článku previesť opravy v riadkoch: [] ^[a-zA-Z0-9]*$ ak, al1, am, ABC, aB řetězce z malých a velkých písmen a čísel nenajde napr. "-_,!" alebo "ščžý" ^ ^[^0-9] ak, al, am, ABC, aB 1abCd1, 8aa2 negace pokud a začátkunájde iba a,A (na začiatku) | ^(0|1|2|3|4|5|6|7|8|9) 1abCd1, 8aa2 ak, al, am, ABC, význam logického ORnájde iba 1, 8 (na začiatku) | ^[0-9] 1abCd1, 8aa2 ak, al, am, ABC, je stejné jako ^(0|1|2|3|4|5|6|7|8|9)najde iba 1, 8 + prvý znak "|" treba opraviť(asi sa iba prekopíroval z predch.riadku) \ ^\*$ * abc libovoný znak \ \* *, *ab, aa*bb abc libovoný znaknájde iba "*"(hviezdičku/-y), nie ľubovolný znak

Jojo

Přidáno: 08.06.16 09:31

To Pavel Lasák: -- Ak sa v ukážkovom kóde 1.riadok(Dim regEx As New RegExp) nahradí s nasled.kódom, tak nebude treba, v Menu Tools/References, zakliknúť Microsoft VBScript Regular Expressions 5.5 Dim regEx As Object ' create the RegExp Object with late binding Set regEx = CreateObject("vbscript.regexp")

Pavel Lasák

Přidáno: 11.09.16 18:24

To Jojo: Díky za opravy a doplnění provedl jsem

Jojo

Přidáno: 19.09.16 07:16

To Pavel Lasák: -- Ďakujem za opravy... Ešte tam zostali malé chybičky/preklepy v nasled.riadkoch:^ ^[^0-9] ak, al, am, ABC, aB 1abCd1, 8aa2 negace pokud a začátku, najde jen a A (na začátku) dal by som: "negace pokud na začátku; najde jen 'a', 'A' (na začátku)" \ ^\*$ * abc libovoný znak Správne: "nájde hviezdičku (ak prehľadávaný reťazec obsahuje iba jednu hviezdičku)"

Jojo

Přidáno: 19.09.16 07:56

To Pavel Lasák: -- ...pre zrozumiteľnosť... "nájde hviezdičku (ak prehľadávaný reťazec obsahuje iba jednu hviezdičku a nič iné(dĺžka=1znak)"







Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 |