Empty, Null, Nothing, Missing, prázdný řetězec a buňka

Podobné dokumenty
DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Spojování textových řetězců na listu

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Tabulka obsluhovaná kódem VBA

Sada 1 - PHP. 03. Proměnné, konstanty

O datových typech a jejich kontrole

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

OBSAH Úvod do VBA... 6 K čemu VBA... 6 Když VBA nestačí... 6 Historie Visual Basicu... 7 Objektový model, vlastnosti, metody, události a funkce...

Různé barvy v grafu pro skutečnost a plán

Hromadná změna datumu a času v buňkách

Generátor list nastavení

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

ADT/ADS = abstraktní datové typy / struktury

MS Excel Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

Úvod do programovacích jazyků (Java)

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Visual Basic for Applications

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Odstranění řádků (na základě hodnoty)

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Algoritmizace prostorových úloh

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

DUM 06 téma: Tvorba makra pomocí VBA

8 Třídy, objekty, metody, předávání argumentů metod

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

První cestou, jak vynechat jakákoliv data v grafu, je jejich skrytí, ať už přímo či filtrem aplikovaným na řádcích.

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

7. Datové typy v Javě

Algoritmizace a programování

Jazyk PL/SQL Úvod, blok

Skripty základy VB, vestavěné objekty, příklady

dovolují dělení velkých úloh na menší = dekompozice

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

VBA jako nástroj tvorby vlastních funkcí pro zkvalitnění výstupu v MS Excel

V článku Skrytý obsah na listu (1) jsme se zabývali obecnými možnosti skrývání obsahu. Dnes se na dané téma podíváme prakticky.

Programování v jazyce JavaScript

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Dialog Vzhled stránky

Základy programování (IZP)

typová konverze typová inference

Algoritmizace prostorových úloh

VISUAL BASIC. Práce se soubory

Programovací jazyk Pascal

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Programování v C++, 2. cvičení

Excel Board příprava. ProExcel.cz Excel Board výuková a prezentační tabule pro Excel 1

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Programujeme v softwaru Statistica

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Vzorec. Operátory v Excelu. Operátor přiřazení

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Sada 1 - Základy programování

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Sada 1 - Základy programování

Ukazatele, dynamická alokace

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Struktura programu v době běhu

Datové typy strana 29

Reprezentace dat v informačních systémech. Jaroslav Šmarda

VBA jako validační nástroj hromadného zpracování dat

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

PA152. Implementace databázových systémů

NPRG030 Programování I, 2015/16 1 / :25:32

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

LabView jako programovací jazyk II

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Popis funkcí exportovaných z knihovny nddbe.dll

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Odstavení automatického zpracování hypertextových odkazů

Programování v Javě I. Únor 2009

Standardní šířka sloupce je průměrná šířka číslic 0-9 standardního písma.

Paměť počítače. alg2 1

Slíbená princezna. Univerzální ComboBox

Teoretické minimum z PJV

LEKCE 6. Operátory. V této lekci najdete:

2 Strukturované datové typy Pole Záznam Množina... 4

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Programování v Javě I. Leden 2008

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Základy C++ I. Jan Hnilica Počítačové modelování 18

Prezentace a vysvětlení programového prostředí NXC

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Parsování HTML. Pro účely testování jsem vytvořil stránku parsovani.html. Zdrojový kód:

MS Excel makra a VBA

Transkript:

Řečeno slovní hříčkou, pojmy uvedené v titulku mají společného všechno a nic. Každý z nich je vyjádřením stavu prázdné proměnné, a to podle datového typu či kontextu. Empty vyjadřuje neinicializovanou proměnnou typu Variant (její výchozí hodnotu) ve VBA klíčové slovo Empty, funkcí IsEmpty testujeme například prázdnou buňku ve VBA funkce VarType vrací 0 (vbempty) dle kontextu je za Empty považována jak nula, tak prázdný řetězec 0 0 0 0 Sub TestEmpty() Dim a, x a = 'správně a = Empty 'špatně 'a = vbempty 'vbempty... 0 (datový typ Long) 'běžně jen pro testování VarType '0 x = VarType(a) x = VarType(a) = vbempty 'Allen Browne: 'obojí True Debug.Print Empty = 0 Debug.Print Empty = "" '- (True) x = Not a ' x = a ^ 0 '0 x = a And True 'test na prázdnou buňku, True x = ActiveCell = Empty 'lépe, True x = IsEmpty(ActiveCell) ProExcel.cz

Null (no valid data, C NULL) http://cs.wikipedia.org/wiki/null indikuje neznámou hodnotu pro datový typ Variant v databázi položka pole, na níž se nevyskytují žádná data ve VBA klíčové slovo Null, testujeme prostřednictvím funkce IsNull ve VBA funkce VarType vrací (vbnull) ve VBA Chr(0), resp. vbnullchar používán jako ukončovací znak řetězce (C NULL v programovacím jazyce C, typicky API funkce), na listu nelze zadat funkci ZNAK(0) ProExcel.cz

0 0 0 0 0 0 Sub TestNull() 'http://cs.wikipedia.org/wiki/null Dim x, y, z 'špatně 'z = vbnull 'vbnull... (datový typ Long) 'běžně jen pro testování VarType 'znak Null (datový typ String) 'odpovídá NULL v jazyce C z = Chr(0) 'ekvivalent z = vbnullchar ' x = Len(z) 'správně z = Null ' x = VarType(z) x = VarType(z) = vbnull 'Null x = + z 'y x = "y" & z 'False x = False And z 'Null v porovnání s Null nevrací True x = z = z x = IsNull(z) 'bez chyby, ale pravděpodobně bez účinku ActiveCell = Null 'podobně 'ActiveCell = Chr(0) 'na listu nelze zadat ZNAK(0) Dim apole( To ) apole() = Null 'funkce listu TRANSPOZICE neumí Null převádět ActiveCell = WorksheetFunction.Transpose(aPole) 'chybný test na prázdnou buňku, False x = IsNull(ActiveCell) 'správný test na prázdnou buňku, True x = IsEmpty(ActiveCell) ProExcel.cz

Nothing vyjadřuje neinicializovanou (nepřiřazenou) objektovou proměnnou (její výchozí hodnotu) platí pro proměnné deklarované jako As Object, Workbook, Worksheet, Range, UserForm, Connection, ve VBA ruší vazbu (asociaci) objektové proměnné na aktuální objekt (Set rngbunka = Nothing), čímž také uvolňuje systémové zdroje (alokovanou paměť) testujeme operátorem Is (rngbunka Is Nothing), tj. VBA nezná funkci IsNothing 0 0 0 Sub TestNothing() Dim rngbunka As Range Dim blnres As Boolean blnres = rngbunka Is Nothing 'přiřazení buňky A aktivního listu 'do objektové proměnné (typu Range) Set rngbunka = Range("A") 'False blnres = rngbunka Is Nothing 'ruší vazbu objektové proměnné 'na buňku A aktivního listu Set rngbunka = Nothing blnres = rngbunka Is Nothing 'Allen Browne: 'datový typ Variant/Empty Dim varpromenna As Variant 'nelze 'x = varpromenna Is Nothing 'dojde k přetypování na Variant/Object Set varpromenna = Nothing x = varpromenna Is Nothing ProExcel.cz

Missing ve VBA funkce IsMissing ověřuje, zda-li byl proceduře (funkci) předán argument (parametr musí být typu Variant, jinak budeme nuceni testovat výchozí hodnotu daného datového typu) 0 0 0 0 Sub TestMissing() Call VlastniFunkce Call VlastniFunkce Call VlastniFunkce("") Function VlastniFunkce(Optional varpromenna As Variant) 'při volání Call VlastniFunkce 'je proměnná varpromenna typu Variant/Error 'a obsahuje hodnotu Missing Dim blnres As Boolean 'testovat na hodnotu Missing 'lze jen proměnnu typu Variant blnres = IsMissing(varPromenna) 'nebo blnres = IsError(varPromenna) End Function Function VlastniFunkce(Optional varpromenna As String) 'při volání Call VlastniFunkce 'je proměnná varpromenna typu String 'a obsahuje prázdný řetězec coby výchozí hodnotu Dim blnres As Boolean 'nelze testovat na Missing 'blnres = IsMissing(varPromenna) blnres = varpromenna = vbnullstring End Function ProExcel.cz

Prázdný řetězec (null string, zero-length string, empty string) http://en.wikipedia.org/wiki/empty_string řetězec nulové délky, datový typ String neobsahující žádný znak nemá zastoupení v ASCII tabulce je-li ve VBA (nebo na listu) vyjadřován dvojicí uvozovek jdoucích bezprostředně za sebou (tj., zero-length string, empty string), pak v paměti využívá bitů a ukazatel na řetězec v paměti StrPtr( ) = číslo ve VBA konstanta vbnullstring (null string, null pointer, rychlejší při porovnávání než ), nezabírá v paměti místo, ukazatel na řetězec v paměti StrPtr(vbNullString) = 0 i když prázdná buňka obsahuje ve své vlastnosti Text prázdný řetězec, funkce listu JE.TEXT u ní narozdíl od skutečně obsaženého prázdného řetězce vrací NEPRAVDA 0 0 Sub TestPrazdnyRetezec() Dim a, b a = "" b = vbnullstring 'rozlišení "" a vbnullstring 'číslo... x = StrPtr(a) '0 (datový typ Long) x = StrPtr(b) 'test na prázdný řetězec x = a = "" 'lépe x = a = vbnullstring 'nejlépe x = Len(a) = 0 ProExcel.cz

Co je to ta inicializace? Inicializace představuje explicitní přiřazení počáteční hodnoty do (deklarované) proměnné. 0 0 0 Sub PrikladDeklaraceInicializace() 'VBA 'deklarace proměnné s názvem intcislo datového typu 'Integer, tj. celé číslo v rozsahu - až 'vyžadující bajty v paměti Dim intcislo As Integer 'pozn. přidělování paměťového prostoru proměnným 'se říká alokace paměti 'již v tuto chvíli proměnná intcislo obsahuje nepřímo 'definovanou (implicitní) hodnotu, což je pro datový typ 'Integer nula 'inicializace, tj. přiřazení počáteční hodnoty přímo '(explicitně) intcislo = 'deklaraci a inicializaci současně lze ve VBA provést 'pouze u konstant nebo volitelných parametrů procedur (funkcí) 'konstanta Const dblpi As Double =. 'VB.NET 'deklaraci i inicializaci lze i u proměných 'provádět současně 'Dim intcislo As Integer = V souladu s teorií je tedy za tu pravou inicializaci považováno přiřazení intcislo =. Nicméně podle mého názoru prvotní inicializaci (nastavení výchozích hodnot) u jednoduchých datových typů provádí Excel už v rámci továrního nastavení. tj. bezprostředně po deklaraci. U objektových proměnných je inicializace čistě na nás (a stejně tak inicializace třídy). A jaké jsou výchozí hodnoty pro jednoduché datové typy? ProExcel.cz

0 0 0 Sub VychoziHodnotyDatovychTypu() 'hodnota (datový typ/podtyp) 'Empty (Variant/Empty) Dim a 'totéž jako As Variant '0 (Integer) Dim b As Integer '0 (Double) Dim c As Double 'vbnullstring, konstanta pro prázdný řetězec (String) Dim d As String 'Chr(0), znak pro prázdný řetězec (String) Dim e As String * 'Nothing (Object) Dim f As Object 'False (Boolean) Dim g As Boolean '? (Variant(), tj. pole budoucích hodnot typu Variant) Dim h() '? (String(), tj. pole budoucích hodnot typu String) Dim i() As String Tip Je možné snadno převést Null, Empty a prázdný řetězec na nulu? Ano. 0 Sub NulaZNiceho() Dim a, b, c, d a = Null b = vbnullstring c = Empty 'univerzální převod, výsledkem 0 d = Val("" & a) e = Val("" & b) f = Val("" & c) ProExcel.cz

Tip Je možné snadno testovat, zda-li je prázdné pole? Ano. 0 0 Sub TestyPole() Dim Pole( To ) Dim Pole() boolpolejeprazdne = Len(Join(Pole, "")) = 0 Pole() = "Liberec" Pole() = 'False boolpolejeprazdne = Len(Join(Pole, "")) = 0 boolpolejeprazdne = (Not Pole) = True 'Array nebo ReDim Pole = Array(vbNullString, vbnullstring) 'False boolpolejeprazdne = (Not Pole) = True Je to vše? Bohužel, ani náhodou. Hlavní války o nic se odehrávají na listu Excelu. Do bitev vstupuje skrytí buňky přímo či filtrem, formát buňky pro zneviditelnění hodnoty (vynechání sekce po sobě jdoucími středníky), skrývání nul a další lahůdky související s XML (viz třeba článek Záhada zmrazené buňky). Prázdná buňka Její definici jsem čas od času nucen sám přehodnotit v souvislosti s novými poznatky. V souladu s tím, co bylo napsáno výše, se obsah skutečně prázdné buňky chová jako Variant/Empty. Podle kontextu je brána jako nula (běžný výsledek prostého odkazu na buňku), prázdný řetězec nebo NEPRAVDA. Přesto vás výsledky některých funkcí listu jistě zaskočí. ProExcel.cz

Prázdná buňka a funkce listu. část Prázdná buňka a funkce listu. část ProExcel.cz 0

Prázdná buňka a funkce listu. část U prázdné buňky převažuje numerické chování nad textovým. To je bohužel nepříjemné. Z odkazu ve vzorci obdržíme nulu, čímž Excel smaže rozdíl mezi mít nulu a nemít nic. To v praxi znamená nerozlišovat mezi nemít založen v bance účet a nemít na existujícím účtu ani korunu. Nebo a to je horší neprovádět měření versus naměřit nulovou odchylku. Do třetice příklad vypůjčený spíš z oblasti databází odpojený elektroměr pana Kropáčka (potřebujeme přitom zachovat záznam o tom, že byl klientem naší společnosti), a paní Šebestová, která za daný měsíc neodebrala elektřinu, protože je momentálně s přítelem Machem v zahraničí. ProExcel.cz