Úvodní stránka · Fórum · Ke stažení · Odkazy · Links (EN, DE, CZ, SK) 10. září 2010, Irma
Menu
Úvodní stránka
Časté dotazy k Excelu
Fórum
Kategorie článků
Databanka kódů
Ke stažení
Svět Excelu v RSS
Odkazy
Kontakt

Excel - funkce na listu
Excel - funkce VBA
Excel - klávesové zkratky
Excel - znaky, klávesnice
Excel - standardní barvy
Excel - slovník menu
Excel - konstanty
Excel - technické údaje
DVD Servis Office
Excel menu 2003 (Ribbon)
Offset Statistic

Chat
Sponzorované odkazy
Přihlášení
Přezdívka

Heslo



Nejste členem?
Zaregistrujte se co nejdříve.

Zapomněli jste heslo?
Nechte si poslat nové.
Kdo je online
Hosté online: 2
Žádný člen není online

Registrovaní členové: 537
Neaktivovaní členové: 47
Nejnovější člen: Veverka
Pohotovost Excel
Excel VBA - první pomoc

ICQ status

Skype
Hry online
Sudoku
Sudoku
Sudoku
Sudoku
Excelplus.NET
Excelplus.NET - RSS 0.91 spampoison.com
Google Pagerank - excelplus.netGoogle Pagerank Antispam.er.cz
Statistiky

RegExp aneb regulární výrazy

TipyRegulární výrazy (Regular Expressions) umožňují složitější záměnu textových řetězců. V MS Office nabízí rozšířené nahrazování textu MS Word. Bohužel řada uživatelů nemá o tomto nástroji ponětí a tak se uchyluje k prostému nahrazování "x" za "y" a zbytek dělá ručně. Doporučuji proto vyzkoušet volbu Úpravy / Nahradit, tlačítko Speciální. V nápovědě Wordu (zde 2003) pak hledejte výraz "Vyhledání a nahrazení textu nebo dalších položek" a zvláštní pozornost věnujte zástupným znakům.

Jak ale na inteligentní záměnu, pokud potřebujeme nahrazovat řetězce v jiném produktu MS Office než je Word, nebo dokonce mimo MS Office? Pro každý z případů existuje řešení. V případě prvním je možné prostřednictvím VBA přistoupit k objektu RegExp (součást WSH, resp. VBScriptu), v případě druhém zvolit externí aplikaci. Než se tak stane, je nutné se s tématem regulárních výrazů seznámit blíže - viz odkazy.

http://www.regular-expressions.info
http://www.regexp.cz
http://www.regexlib.com

V praxi to funguje tak, že nejprve sestavíme masku, jinak řečeno filtr, vzorek, předlohu, šablonu (Pattern), podle které chceme řetězce vyhledávat. Dále je možné stanovit, jak prohledávat zdroj textu (Multiline a Global) a jak porovnávat velikost písmen (IgnoreCase). Navrácen pak může být pozměněný text (Replace) nebo odpověď typu "ano, něco jsem našel" a "ne, šabloně nic nevyhovuje" (Test), resp. kolekce nalezených výskytů (Execute, Match v kolekci Matches). Právě sestavení šablony představuje leckdy značný logický oříšek. Ale nemusíte zoufat, pro běžné požadavky je na internetu dostatek zdrojů.

Pozn. Uvědomte si, že základní formátování textu zprostředkovávají běžné znaky ASCII tabulky a patří sem i tabulátor, znaky odřádkování a další.

Samostatných aplikací pracujících s regulárními výrazy je dostatek a jsou z kategorie shareware i freeware. Jako příklad uvádím Regex++, Regulator, Expresso a jiné. Za nejlepší (shareware) považuji RegexBuddy (náhled je uveden níže). Jeho modul Grep pak umožňuje nahrazovat řetězce i v celé kolekci souborů. Program navíc obsahuje i malou databanku příkladů.



Dostáváme se k tomu podstatnému, jak pracovat s objektem RegExp pod VBA. Nejprve je třeba provést odpovídající deklaraci.

Kód VBA
  1. Dim RegEx As Object
  2. Set RegEx = CreateObject("VBScript.RegExp")
  3. 'alternativně Tools / References
  4. 'Microsoft VBScript Regular Expressions x.x
  5. Dim RegEx2 As New RegExp


A zde je malá ukázka práce.



Kód odpovídající akci z obrázku:

Kód VBA
  1. Private Sub CommandButton3_Click()
  2. Dim RegEx As New RegExp
  3. Dim Text As String
  4. Dim SeznamRetezcu As String
  5. Dim Retezec As Match
  6.  
  7. Text = Text & "Odkaz http://www.seznam.cz nás láká na internetovou stránku." & vbLf
  8. Text = Text & "Zápis ftp://ftp.cesnet.cz/ poukazuje na FTP server." & vbLf
  9. Text = Text & "A konečně file://localhost/C:/test.txt značí lokální soubor." & vbLf
  10. Label1 = Text
  11.  
  12. RegEx.IgnoreCase = True
  13. RegEx.MultiLine = True
  14. RegEx.Global = True
  15. RegEx.Pattern = "b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]"
  16.  
  17. Set NalezeneRetezce = RegEx.Execute(Text)
  18. For Each Retezec In NalezeneRetezce
  19. SeznamRetezcu = SeznamRetezcu & Retezec & vbLf
  20. Next Retezec
  21.  
  22. Label2 = SeznamRetezcu
  23.  
  24. End Sub

Komentáře

Žádný komentář doposud nebyl přidán. Buďte první...

Přidat komentář

Pro přidání komentáře musíte být přihlášeni.

Hodnocení

Musíte být přihlášeni, abyste mohli hodnotit.

Prosím přihlašte se nebo se zaregistrujte.

Žádné hodnocení ještě nebylo zaznamenáno.
... nejlépe se zpracovávají tabulky mléčné čokolády