Chyby jako #N/A nebo #DIV/0! působí v reportu nešikovně a často rozbijí navazující výpočty. IFERROR je jednoduchá obálka, která vám tabulku okamžitě zpřehlední — pokud ji ovšem používáte správně. V tomto článku si projdeme syntaxi, časté scénáře, rozdíl proti IFNA i jak stejnou logiku napsat ve VBA.
Syntaxe a princip
IFERROR má jen dva parametry — vzorec, který chcete vyhodnotit, a hodnotu, která se má vypsat, pokud vzorec spadne na jakoukoliv chybu (#N/A, #DIV/0!, #VALUE!, #REF!, #NAME?, #NUM!, #NULL!).
=IFERROR(vzorec; hodnota_při_chybě)
"tok-c">' Příklad — vrátit text místo #N/A:
=IFERROR(SVYHLEDAT(A2; Cenik; 2; NEPRAVDA); "Nenalezeno")
"tok-c">' Příklad — vrátit prázdný řetězec:
=IFERROR(SVYHLEDAT(A2; Cenik; 2; NEPRAVDA); "")Ochrana před dělením nulou
Klasický scénář: počítáte podíl a jmenovatel může být nula. Bez IFERROR dostanete #DIV/0!, které rozbije i navazující SUMA nebo PRŮMĚR.
=IFERROR(B2/C2; 0)
"tok-c">' V kombinaci s podmínkou pro lepší čitelnost:
=IF(C2=0; 0; B2/C2)IFERROR vs. IFNA — rozdíl, který se hodí znát
IFNA reaguje výhradně na chybu #N/A. IFERROR zachytí všechny chyby. U vyhledávacích funkcí často chcete IFNA, abyste si neschovali skutečné problémy v datech (např. #VALUE! ze špatného typu).
"tok-c">' Skryje jen 'nenalezeno', ale ne reálnou chybu:
=IFNA(SVYHLEDAT(A2; Cenik; 2; NEPRAVDA); "Nenalezeno")
"tok-c">' Skryje úplně všechno — i opravdové bugy:
=IFERROR(SVYHLEDAT(A2; Cenik; 2; NEPRAVDA); "Nenalezeno")Časté scénáře z praxe
- Marže = (Cena − Náklad) / Cena → vždy obalte IFERROR pro případ Cena=0.
- Převod textu na číslo HODNOTA(A2) → IFERROR(HODNOTA(A2); 0).
- Vyhledání ID z jiného listu → IFNA(SVYHLEDAT…; "") pro prázdnou buňku.
- Datum z textového pole → IFERROR(DATUMHODN(A2); "neplatné datum").
IFERROR v Power Query a Power BI
V Power Query existuje obdoba — try ... otherwise. Často přehlednější než vnořené IFERROR.
// Bezpečné dělení v Power Query
= Table.AddColumn(
Source,
"Marze",
each try ([Cena] - [Naklad]) / [Cena] otherwise 0
)IFERROR ve VBA — On Error Resume Next + IsError
V makru funguje IFERROR jen jako vzorec přes WorksheetFunction. Pro programovou logiku se používá kombinace On Error a kontroly IsError.
Function BezpecneDeleni(citatel As Double, jmenovatel As Double) As Double
On Error Resume Next
BezpecneDeleni = citatel / jmenovatel
If Err.Number <> 0 Then BezpecneDeleni = 0
On Error GoTo 0
End Function
Sub PrepocitatMarze()
Dim r As Long, posledni As Long
posledni = Cells(Rows.Count, "A").End(xlUp).Row
For r = 2 To posledni
"tok-c">' (Cena - Naklad) / Cena, ošetřené proti #DIV/0!
Cells(r, "D").Value = BezpecneDeleni( _
Cells(r, "B").Value - Cells(r, "C").Value, _
Cells(r, "B").Value)
Next r
End SubKdy IFERROR NEpoužívat
- Když chcete na chybu opravdu upozornit (validace vstupu od uživatele).
- Když by skrytí chyby způsobilo nesprávné rozhodnutí (např. nulová marže místo "chybí náklad").
- Místo opravy datového typu nebo špatné reference — IFERROR neopravuje, jen schovává.
Často kladené dotazy
Jaký je rozdíl mezi IFERROR a IFNA?+
IFNA reaguje pouze na chybu #N/A (typicky z vyhledávacích funkcí). IFERROR zachytí všechny chyby (#N/A, #DIV/0!, #VALUE!, #REF!, #NAME?, #NUM!, #NULL!). Pokud chcete vidět, že máte třeba špatný typ dat, použijte IFNA.
Funguje IFERROR ve všech verzích Excelu?+
Ano, IFERROR je dostupné od Excelu 2007 výše. Ve starších verzích (2003 a níže) musíte použít kombinaci IF + JE.CHYBA (ISERROR).
Zpomalí IFERROR vzorec?+
Při běžném použití je dopad zanedbatelný. U vyhledávacích funkcí nad desítkami tisíc řádků se ale vyplatí přesunout výpočet do Power Query nebo VBA — opakované vyhledávání je dražší než samotné obalení IFERROR.
Jak ošetřit chybu jen u některých typů?+
Použijte konkrétnější funkce: IFNA pro #N/A, JE.CHYBA pro všechny, JE.NEDEF (ISERR) pro všechny chyby kromě #N/A. Kombinací s IF si vyrobíte přesně to chování, které chcete.
Jak IFERROR přepsat do VBA?+
Ve VBA neexistuje přímý ekvivalent. Použijte On Error Resume Next, vyhodnoťte výraz a zkontrolujte Err.Number nebo IsError(). Pak nezapomeňte On Error GoTo 0 pro obnovení standardního zpracování chyb.
Autor
Dušan Kahánek
VBA / Power BI / Microsoft 365 specialista
