sreda, 28. september 2011

Kaksne barve sta besedilo in celica?

Excel vsebuje ziljon funkcij, ampak včasih si res zaželimo, da bi imeli čisto svojo. Potrebujemo samo idejo in 3 minute časa. Zaženemo Excel, pritisnemo uporabno kombinacijo Alt+F11 in smo v VBA-ju. Vstavimo nov Modul in namesto Sub karneki(), vpišemo Function karneki().

Današnji funkciji sta nastali zaradi čudne excelove tabele v kateri so bile celice z različnimi barvami polnil in različnimi barvami besedila. In ker mi seveda ni padlo nič pametnega na misel, sem si filtriranje zamislil po svoje.
Funkciji sta:

Function txtColor(rng As Range)
'funkcija ki vrne številko barve besedila
    txtColor = rng.Font.ColorIndex
End Function

Function backColor(rng As Range)
''funkcija ki vrne številko barve polnila
    backColor = rng.Cells.Interior.ColorIndex
End Function

To preprosto vnesemo v VBA in se vrnemo v Excelovo datoteko ter izvedemo preizkus. V celico A2 vnesemo besedilo in ga pobarvamo rdeče, za polnilo pa izberemo rumeno barvo. Nato se postavimo v celico B2 in vpišemo "=txtColor(A2)", kar nam da rezultat 3. V celico C3 vpišemo "=backColor(A2)" in dobimo 6.


torek, 13. september 2011

VBA AutoFilter

Nov teden, nov problem oziroma nov izziv. Ko ljudi naučis uporabljat Filter (Razvrsti in filtriraj -> Filter), začnejo takoj razgljabljat, da je v nekaterih tabelah preveč podatkov, preveč klikanja, preveč napak. Skratka vsega je preveč. Vse to je pripeljajo da ideje o preprostem Obrazcu (UserForm), kjer bi uporabnik vnesel pogoje za filtriranje, pritisnik OK in stvar bi delovala.

Najprej potrebujemo sestavine:
- 1x UserForm (UserForm1)
- 2x TextBox (txtFrakcija in txtNaselje)
- 2x Label (Frakcija in Naselje)
- 1x Button (cmdIsci)

Naredimo obrazec

Ko smo z izgledom obrazca približno zadovoljni, dvakrat kliknemo na gum išči in odpre se nam urejevalnik kode. Vnesemo nekaj preprostih vrstic:

Private Sub cmdIsci_Click()
    Selection.AutoFilter
        ActiveSheet.Range("$A$1:$E$631").AutoFilter Field:=2, Criteria1:="*" & txtFrakcija.Value & "*"
        ActiveSheet.Range("$A$1:$E$631").AutoFilter Field:=4, Criteria1:="*" & txtNaselje.Value & "*"
End Sub

Še kratka razlaga. Na aktivnem listu, kjer imamo seveda vklopljen Filter, lahko filtriramo podatke po 2. in 4. stolpcu. Poleg tega sem dodal še "*" na začetek in konec.

Na excelov delovni list sem dodal še gumb za zagon obrazca in ga povezal z:

Sub odpri()
    UserForm1.Show
End Sub



Zanimivo je, da lahko uporabimo txtFrakcija.Value ali txtFrakcija.Text. V obeh primerih stvar deluje.

četrtek, 1. september 2011

Weeknum

Vsi vemo, da ima leto 52 tednov, ko pa ugotavljamo v katerem tednu se je kaj zgodilo smo pa malce zmedeni. V Excelu lahko uporabimo funkcijo WEEKNUM(serijska_številka; vrsta rezultata), ki nam vrne številko tedna.

Funkcija ima dva argumenta:
- serijska številka
- vrsta rezultata

Serijska številka je datum, ki ga zapišemo kot DATE(leto;mesec;dan), vrsta rezultata pa nam pove s katerim dnem hočemo, da se začne teden. Privzeto je to nedelja (1). Lahko pa določimo tudi katerikoli drugi dan

1 ali izpuščeno -> nedelja
2 ->   ponedeljek
11 -> ponedeljek
12 -> torek
13 -> sreda
14 -> četrtek
15 -> petek
16 -> sobota
17 -> nedelja
21 -> ponedeljek
 
Primeri:

V celico A1 napišemo datum. V celico A2 napišemo
=WEEKNUM(A1;2)

In dobim številko tedna v letu ob upoštevnju, da se teden začne s ponedeljkom.

Lahko napišemo tudi:
=WEEKNUM(DATE(leto;mesec;dan), npr.

=WEEKNUM(DATE(2011;9;1);2)


Za izpis trenutne tedna v letu, pa kombiniramo uporabo funkcij WEEKNUM, DATE in NOW



=WEEKNUM(DATE(YEAR(NOW());MONTH(NOW());DAY(NOW()));2)

petek, 19. avgust 2011

Bližnjice

To pa sploh ne bo objava, ampak si bom sproti beležil bližnjice, ki so mi zanimive/uporabe:

Ctrl+R -> ustvari tabelo

Ctrl+Shift+% -> oblikovanje kot število z %, brez decimalk

Ctrl+- -> Pobriši (stolpec, vrstico,...)

Desni klik na list, "Izberi vse", Ctrl+F -> Išče podatek na vseh listh

ponedeljek, 1. avgust 2011

Barvanje presečišča

Veliko ljudi uporablja Excel le za kratke izračune, izdelavo računov, ipd. Vendar je program namenjen delu z veliko količino podatkov, kar privede do velike zmede na zaslonu. Velikokrat ne vemo kam določen podatek spada. V takem primeru je zelo uporabna naslednja kratka koda:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub


    Application.ScreenUpdating = False
    Cells.Interior.ColorIndex = 0
    
    With Target
        .EntireColumn.Interior.Color = vbCyan
        .EntireRow.Interior.Color = vbCyan
    End With
    
    Application.ScreenUpdating = True


End Sub


Kodo skopiramo (Ctrl+C), v delovnem zvezku kliknemo z desno miškino tipko na zavihek lista, v katerem jo želimo uporabiti in izberemo opcijo "Ogled kode". 



Odpre se urejevalnik VBA, kamor prilepimo zgornjo kodo (Ctrl+V) in okno zapremo (Alt+Q).

Ko sedaj kliknemo v celico, se na zaslonu obarva križ, katerega presečišče je izbrana celica.





petek, 29. julij 2011

Tweetdeck v Ubuntuju

Navkljub temu, da dandanes uporabnik računalnikov ločimo na jabolkarje in oknarje, se občasno še najdejo ljudje, ki uporabljajo operacijske sisteme temelječe na Linux. In taki s(m)o velikokrat prikrajšani za programe, ki jih v drugih OS z lahkoto namestimo. Kljub strahu, da bo v Ubuntu-ju vse strašno zakomplicirano in neizvedljivo, je nameščanje twitter aplikacije Tweetdeck popolnoma enostavno in zahteva od uporabnika le malce tipkanja oz. prepisovanja.

    Program Tweetdeck uporablja izvajalno okolje (runtime) AdobeAIR, ki ga najdemo na naslovu:

      http://get.adobe.com/air/

      Izberemo datoteko s končnico .bin in jo prenesemo na lokalni računalnik.
      Ko je datoteka (AdobeAIRInstaller.bin) prenešena, kliknemo nanjo z desno miškino tipko, izberemo zavihek "Dovoljenja" in obkljukamo "Dovoli izvajanje datoteke kot programa".

      Sledi "najzahtevnjši" korak, ki poleg uporabe miške, zahteva še uporabo tipkovnice. Odpremo "Terminal" in se premaknemo v mapo, kamor smo shranil datoteko "AdobeAIRInstaller.bin" in vnesemo naslednja ukaza:

       chmod +x AdobeAIRInstaller.bin

       sudo ./AdobeAIRInstaller.bin

      S tem smo namestili izvajalno okolje AdobeAir.

      Sedaj se moramo samo še odpraviti na spletni naslov http://tweetdeck.com in prenesti zadnjo različico programa Tweetdeck.

      No, malo klikanja je še potrebno, ampak več kot "OK" menda res ne.

      torek, 5. julij 2011

      Funkcije LEN, LEFT in DATEDIF

      Lep deževni pozdrav, slučajnemu mimoidočemu. Uspelo mi je sestavit še eno objavo, pa čeprav sem v teh toplih dneh veliko raje na kolesu po Katarini in okolici, kot pa pred "kišto". No, služba je služba in služba je denar, zato moramo tudi delat. In med delom sem se spomnil, še dveh pametnih zadev.

      1. LEFT & LEN
      Pa gremo lepo po vrsti. Prva težava, če ji lahko tako rečemo, je bila, ko sem sem moral sešteti porabo prenosa podatkov na mobilnem telefonu. Podatki so zapisani v, za Excel, neuporabni obliki; npr. 180,0MB. Lahko bi sicer preprosto uporabil Ctrl+H (najdi in zamenjaj), ter vse MB zamenjal s praznim besedilom. Toda to nebi bilo tako zanimivo, zato sem raje uporabil funkcijo LEN() in LEFT(). Postopek gre pa nekako tako:
      v prvem stolpcu so podatki napisani v zgoraj omenjeni obliki. Decimalna vejica je uporabljena samo ko je decimalka različna od 0. Vedno pa velja, da sta zadnja dva znaka MB. Formula se torej glasi:

      =LEFT(A2;LEN(A2)-2)

      torej najprej preberemo število znakov v nizu z LEN(A2), odštejemo 2 znaka (MB) in nazadnje preberemo LEN()-2 znaka, šteto z leve strani.


      Če nam dobljenega rezultata še vedno noče seštevati, ga označimo, kopiramo in uporabimo ukaz: "Pretvori v število".

      2. DATEDIF
      Datedif je uporaben predvsem v kadrovski službi in prav od tam je prišlo vprašanje če Excel zna in kako bi se naredilo, da bi iz datuma rojstva določenega zaposlenega izpisalo starost na današnji dan. Rešitev je pravzaprav zelo preprosta, uporabimo funkcijo DATEDIF, malo &, malo "" in to je to.

      DATEDIF je dejansko sestavljena tako:
      =DATEDIF(Datum1, Datum2, Interval)

      V našem primeru jo uporabimo za razliko med danes NOW() in rojstnim datumom. Y, YM in MD uporabimo za leta, mesece in dneve.

      Torej v celico D2 smo vnesli rojstni datum 25.6.1991 (Dan državnosti) v celico E2
      =DATEDIF(D2;NOW(); "Y") & " let, " & DATEDIF(D2;NOW(); "YM") & " mesecev in " & DATEDIF(D2;NOW(); "MD") & " dni."

      in na današnji dan je rezultat: 20 let, 0 mesecev in 10 dni.