Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
^ab*$ aneb jak na regulární výrazy v Excel
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:
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 |
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:
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")
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
V přípravě.
Soubor
Regulární výraz - praktické příklady - VBA
ke stažení zdarma. Soubor využívá makra.
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
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ů.
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á.
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í ;)
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čátku
ná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 OR
ná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ý znak
nájde iba "*"(hviezdičku/-y), nie ľubovolný znak
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")
Přidáno: 11.09.16 18:24
To Jojo: Díky za opravy a doplnění provedl jsem
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)"
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)"
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 |