Office Guru

Cellaformátum meghatározása függvénnyel - aztán VBA-val

2017. december 02. - Office Guru

Rendhagyó módon a mai poszt nem egy konkrét probléma megoldásáról fog szólni, hanem ahogy a múltban már többször tettem, egy érdekes kérdést járok körbe, keveset használt funkciók bemutatásával. Ma ez a kérdéskör a cellák formátuma lesz, méghozzá abból az aspektusból, hogy hogyan tudjuk megállapítani függvény segítségével egy celláról, hogy annak mi a formátuma. Persze ez alapvetően a Ribbonunk Home fülén lévő Number szekcióban is látható, de elképzelhető olyan helyzet, ahol bizonyos formátumok esetén visszajelzést akarunk adni a felhasználónak, kollégának.

Adott tehát a következő tábla, különböző formátumban lévő cellákkal:

01_2.JPGTehát a cél függvénnyel megmondani, hogy milyen formátumban van az adott cella. Az első formula, ami beugrik, az a TYPE, amely a paramétereként megadott cella adattípusát fogja megadni öt kategória szerint (ezek egyébként látszanak is a függvény leírásában):

02_2.JPG

03_2.JPGLátható tehát, hogy alapvetően ugyan nyújt információt ez a függvény, de a Number és Text formátumok közötti különbséget leszámítva, nem jutottunk sokkal közelebb az elvárt eredményünkhöz.

Ennél sokkal hasznosabb és hatékonyabb a CELL függvény, amelynek első paramétereként azt adhatjuk meg, hogy milyen információt akarunk kinyerni a celláról (van itt lehetőségünk bizonyos színinformáció begyűjtésére vagy akár sor- és oszlopszám meghatározására stb.), és itt van egy olyan információtípus, hogy "Format", ami a második paramétereként megadott celláról fog szöveges kódot visszaadni, ami segít meghatározni a formátumát egy részletes kódmapping segítségével.

04_2.JPGA Help és a Microsoft hivatalos oldala is szépen megadja nekünk a kódlistát, például azt, hogy a G az a "General" formátumot jelképezi, a P2 a "Percentage" formátumot, az F2 a "0.00" típusú számformátumot és így tovább.

05_3.JPGKipróbálhatjuk még a CELL függvény "Type" paraméterét is, de ez igazából azért elég gyenge, három eredményt tud visszaadni: b, ha a cella üres, l, ha a cella szöveget tartalmaz és v, ha bármi mást. Szóval ez azért nem visz közelebb a megoldáshoz.

06_1.JPGDe ha csinálunk egy kis elemzést a beadott adatainkról, hogy végül sikerült-e mindent beazonosítanunk ezen formulák segítségével:

07_2.JPGAkkor azt láthatjuk, hogy az utolsó dátumunkat egyik formula visszaadott értéke sem segít beazonosítani, hiszen tudjuk, hogy nem szöveg (1 és v), a formátumra pedig G-t ad vissza és nem egy speciális kódot, így ott maradtunk meglőve.

Ekkor már célszerű VBA-hoz fordulni, méghozzá egy Custom funkció megírásával (amit már megtettünk korábban itt a blogon). Szóval menjünk át ALT+F11 segítségével a VBA editorba, ahol jobb gombos kattintás után Insert-Module lenyomásával hozzunk létre egy új modult, ahol pedig csináljuk meg a funkciónkat.

08_2.JPG

Mivel elég rövid ez a kód, nem bajlódtam külön végigmenni a sorokon, úgyhogy most nézzük meg, miről is van szó.

Első körben tehát létrehozzuk a TypeExtra névre hallgató függvényünket, amelynek egyetlen paramétere lesz, a cella, amelynek formátumát szeretnénk meghatározni. Application.Volatile segítségével beállítjuk, hogy custom funkciónk mindig újrakalkulálódjon, ha történik valami a munkalapunkon.

A kód másik része pedig a CASE utasítás, amelynek segítségével a SELECT CASE után megadott kifejezést validáljuk a SELECT...END SELECT között megadott esetekre ("Casekre"), azaz jelen esetünkben azt, hogy melyik igaz a SELECT...END SELECT között felsorolt esetekből.

Jelen példánkban most csak két vizsgálatot végzek, az ISDATE funkcióval megnézzük, hogy a beadott cella valid dátum-e vagy sem (az ISDATE True vagy False értéket ad vissza), az INSTR funkciót pedig a Time formátum meghatározására használjuk fel. Alapesetben az INSTR formula VBA-ban egy szövegen belül egy megadott szövegrész, karakter helyzetét adja vissza, az első paramétereként megadott karakteről kezdve a második paramétereként megadott szövegben, úgy hogy a harmadik paramétereként megadott szövegrészt-karaktert keresi. Jelen esetben ez a :, hiszen egy TIME formátum azt mindenképpen tartalmaz és ha talál legalább egy :-t, akkor a függvényünk a "Time" szót adja vissza (ez persze azért félrevezető is lehet bizonyos speciális esetekben).

És kész is vagyunk.

09_1.JPG

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr7713410671

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása