---
title: "Excel+VBA – vlastní vzorec pro regulární výrazy"
id: "135"
type: "post"
slug: "excelvba-vlastni-vzorec-pro-regularni-vyrazy"
published_at: "2015-06-10T04:16:50+00:00"
modified_at: "2023-08-13T15:30:56+00:00"
url: "https://www.kapler.cz/excelvba-vlastni-vzorec-pro-regularni-vyrazy/"
markdown_url: "https://www.kapler.cz/excelvba-vlastni-vzorec-pro-regularni-vyrazy.md"
excerpt: "Tohle je asi můj nejpoužívanější Excelový hack – vlastní vzorec pro regulární výrazy. Bez toho se některé věci dělají strašně složitě přes funkce jako NAJÍT, DOSADIT či NAHRADIT, a nebo dokonce vůbec nejdou a člověk se musí uchýlit k jiným..."
taxonomy_category:
  - "Programování"
taxonomy_post_tag:
  - "Excel"
  - "funkce"
  - "Regulární výrazy"
  - "VBA"
---

# Excel+VBA – vlastní vzorec pro regulární výrazy

Tohle je asi můj nejpoužívanější Excelový hack – vlastní vzorec pro regulární výrazy. Bez toho se některé věci dělají strašně složitě přes funkce jako NAJÍT, DOSADIT či NAHRADIT, a nebo dokonce vůbec nejdou a člověk se musí uchýlit k jiným nástrojům. Excel přitom regulární výrazy umí, ale jen ve svém VBA. Takže stačí si vytvořit vlastní…

Uveřejněno

10. 6. 2015

Rubrika

[Programování](https://www.kapler.cz/category/programovani/)

Autor

Tomáš Kapler

Značky:

[Excel](https://www.kapler.cz/tag/excel/)
, [funkce](https://www.kapler.cz/tag/funkce/)
, [Regulární výrazy](https://www.kapler.cz/tag/regularni-vyrazy/)
, [VBA](https://www.kapler.cz/tag/vba/)

Tohle je asi můj nejpoužívanější Excelový hack – vlastní vzorec pro regulární výrazy. Bez toho se některé věci dělají strašně složitě přes funkce jako NAJÍT, DOSADIT či NAHRADIT, a nebo dokonce vůbec nejdou a člověk se musí uchýlit k jiným nástrojům.

Excel přitom regulární výrazy umí, ale jen ve svém VBA. Takže stačí si vytvořit vlastní funkci:

```
#Const LateBind = True
Function PREG_REPLACE(Pattern As String, Replacement As String, Subject As Range)
 #If Not LateBind Then
 Dim RE As RegExp
 Set RE = New RegExp
 #Else
 Dim RE As Object
 Set RE = CreateObject("vbscript.regexp")
 #End If
 RE.Pattern = Pattern
 RE.Global = True
 PREG_REPLACE = RE.Replace(Subject, Replacement)
End Function
```

Krátká noticka – konstanta LateBind je opravdu před funkcí a zajišťuje, aby se objekt – knihovna s regulárními výrazy, nevolala vícekrát.

Použití podobné jako třeba v PHP, jen Pattern nemusíte uvozovat. Tj. např. když do A1 napíšete „Josef Novák“ a do B1 potom =PREG_REPLACE(„^(.*)\s(.*)“;“$2 $1″;A1), tak výsledkem bude „Novák Josef“ – tedy poslední slovo jste posunuli na začátek.
