Imamo seznam, v katerem se pojavljajo različna imena različno število krat.

Prva možnost je prek uporabe funkcij polja. Te se od običajnih razlikujejo po tem, da je treba po vpisu namesto Enter izbrati Ctrl+Shift+Enter. To je treba narediti, ko formulo vpišemo prvič in tudi pri vsakem nadaljnjem spreminjanju. Če boste pritisnili samo običajni Enter, stvar ne bo delovala. No, pa si oglejmo, kako zadeva deluje.

Na sliki vidite, da je naš seznam v stolpcu A, in to od celice A2 do A16. Najprej želimo ugotoviti, kateri vnosi so v stolpcu A oziroma katera imena se pojavljajo v njem. Za to bomo uporabili funkcijo INDEX, v katero bomo vključili še funkciji MATCH in COUNTIF.

Kombinacijo funkcij INDEX in MATCH običajno uporabljamo, če hočemo v nekem seznamu najti neko vrednost, funkcijo COUNTIF pa, če želimo, da se neki vnos upošteva le, če je izpolnjeno neko merilo. Naša funkcija, ki jo vpišemo v polje B2, se bo torej glasila:

=INDEX($A$2:$A$16;MATCH(0;COUNTIF($C$1:C1;$A$2:$A$16);0))

Pri tem seveda pazimo, da po zaključku pisanja formule pritisnemo omenjeni Ctrl+Shift+Enter. Ko bomo to naredili, bomo videli, da je celotna funkcija zdaj zapisana v zavitih oklepajih. Te je dodal Excel sam. Če jih boste dodajali ročno, ne bo enakega učinka. Funkcija bo torej videti: {=INDEX($A$2:$A$16;MATCH(0;COUNTIF($C$1:C1;$A$2:$A$16);0))}

Zdaj formulo iz polja B2 prekopiramo navzdol, dokler se ne začnejo pojavljati vrednosti #N/V, ki pomenijo, da vrednosti, ki bi ustrezale merilom, več ni. Sicer bi lahko zadevo zapletli in uporabili funkcijo, ki bi te #N/V brisala, a je lažje, če jih izbrišemo kar ročno.

S kombinacijo funkcij INDEX, MATCH in COUNTIF lahko izdelamo seznam imen, ki se pojavljajo na nekem seznamu. Vrednosti #N/V lahko izbrišemo.

Naslednji korak je, da v stolpcu C preštejemo, kolikokrat se posamezni vnos iz stolpca B pojavlja v stolpcu A. Funkcija je dokaj preprosta, saj v celico C2 vpišemo:

=COUNTIF($A$2:$A$401;B2)

Z besedami bi stvar opisali tako: v obsegu celic A2 do A16 preštej vse vnose, ki ustrezajo vrednosti v polju B2. Ko bomo to funkcijo kopirali navzdol do konca seznama iz stolpca B, se bo v formuli vrednost B2 spreminjala v B3, B4 in tako naprej, s čimer se bodo seveda šteli tudi različni vnosi.

Zadnji korak je, da preštejemo, kolikokrat se posamezni vnos iz stolpca B pojavlja v stolpcu A.

Metoda je sicer zanimiva, a dokaj zapletena, zlasti sestavljanje prve funkcije je dokaj čudno. Obstaja pa način, kako mimo nje. In je tudi precej preprost.

Zapisali smo, da imamo v stolpcu A seznam. Prvi korak je, da ta seznam razvrstimo. V primeru imen, torej besed, ga lahko razvrstimo po abecedi, pri čemer je vseeno, v kakšnem vrstnem redu, v primeru številk pa po velikosti, pri čemer je tudi vseeno, ali od velikih proti majhnim ali obratno. Pomembno je, da imamo vnose združene. Razvrščanje poteka prek opravilnega traku Podatki. Ko so podatki razvrščeni, jih je treba ustrezno filtrirati. V ta namen pa ne uporabimo ukaza Filter na opravilnem traku Podatki, ampak ukaz Dodatno. Odpre se okence, kjer izberemo Prekopiraj na drugo mesto. V polju Obseg seznama izberemo naš obseg razvrščenega seznama, v okencu Kopiraj na izberemo celico, kjer naj se začne naš filtriran seznam, nato pa na dnu vključimo še Samo enolični zapisi. Ko potrdimo naš filter, se bo prikazal seznam, kot nam ga je dala v prejšnjem primeru tista zapletena funkcija polja.

Zdaj na podoben način s funkcijo COUNTIF preštejemo vnose iz našega seznama. Funkcija, ki jo vpišemo v našem primeru v stolpec D, se glasi:

=COUNTIF(A$2:A$16;C2)

Ali pa:

=COUNTIF(B$2:B$16;C2)

Gornji funkciji veljata za naš primer, kjer smo imeli v stolpcu A osnovni seznam, nato smo v stolpcu B tvorili razvrščen seznam (tega nam ne bi bilo treba, saj bi lahko razvrstili kar osnovnega, vendar smo pri opisu izdelali novega zaradi preglednosti), v stolpcu C pa imamo filtriran seznam, torej seznam, v katerem se pojavlja vsak vnos le enkrat. Vseeno je, ali štejemo vnose v stolpcu A ali B, saj je njihovo število enako, le mesta so druga. Funkcijo seveda prekopiramo navzdol po stolpcu D tolikokrat, kolikor je različnih vnosov.

Malce manj zapleten način je tak, da najprej seznam razvrstimo po kakršnem koli merilu, ki bo vnose uredil tako, da bodo enaki vnosi na kupu, nato ga filtriramo tako, da iz njega potegnemo le enolične zapise, kar nam da pogoje za uporabo funkcije COUNTIF.

Vendar je tudi to dokaj zamudno. Gre kako hitreje? Gre. Recimo prek uporabe še enega »čuda« elektronskih preglednic – vrtilne razpredelnice (pivot table v angleščini). Z njo je rešitev gotova v nekaj sekundah.

Imamo torej naš seznam, ki je v stolpcu A. Da bi zadeva delovala, izdelamo še en stolpec, ki pa je povsem preprost, saj so v njem same enice, damo pa mu neko ime, recimo »Število«. Zdaj se postavimo nekam na delovni list, kjer bi radi rezultate našega štetja, in izberemo opravilni trak Vstavljanje, v njem pa Vrtilno tabelo (skrajno levo). Odprlo se bo pogovorno okno, v katerem izberemo obseg celic, ki naj jih razpredelnica upošteva, v našem primeru je to obseg A1:B16, torej vsa polja, kjer imamo podatke, in tudi naslovna polja. Izbiro potrdimo in na desni strani Excelovega okna se bodo odprle funkcije vrtilne razpredelnice. V njej boste na vrhu našli svoj »Seznam« in »Število«. Polje »Seznam« potegnite navzdol v okence Oznake vrstic, polje »Število« pa v okence Vrednosti. In to je vse. Na zaslonu se bo pojavila razpredelnica, v kateri bodo izpisani posamezni vnosi, njihovo število in skupno število vseh vnosov. Slednjega sicer ne potrebujemo, a tudi ni odveč.

Postopek je z vrtilno razpredelnico opravljen v manj kot minuti.

Zadevo je mogoče rešiti tudi s pomočjo kakšnega makra, toda glede na preprostost rešitve s pomočjo vrtilne razpredelnice je smiselnost pisanja makra vprašljiva. Če pa se vam zdi vseeno bolj elegantna, pa jo lahko uporabite. Postopek je naslednji.

Najprej je seveda treba imeti seznam. Ta bo v našem primeru v stolpcu A in bo brez naslovne celice (torej brez celice »Seznam« na vrhu stolpca). Nato se lotimo makra. Izberemo Alt+F11, da se odpre urejevalnik makrov, v njem z Insert > Module dodamo nov prazen makro, nato pa vanj prepišemo naslednji programček.

Sub Stetje()
Dim i, LastRowA, LastRowB
LastRowA = Range("A" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
Application.EnableEvents = False
Columns("B:C").ClearContents
For i = 1 To LastRowA
If Application.CountIf(Range("B:B"), Cells(i, "A")) = 0 Then
Cells(i, "B").Offset(1, 0).Value = Cells(i, "A").Value
End If
Next
Columns("B:B").Select
Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
LastRowB = Range("B" & Rows.Count).End(xlUp).Row
For i = 2 To LastRowB
Cells(i, "C").Value = Application.CountIf(Range("A:A"), Cells(i, "B"))
Next i
Range("B1").Value = "Vnos"
Range("C1").Value = "Pojavljanja"
Range("B1:C1").HorizontalAlignment = xlLeft
Range("B1").Select
Columns("B:C").AutoFit
Application.EnableEvents = True
End Sub

Nato urejevalnik zapremo in pritisnemo Alt+F8, da se prikaže seznam makrov. Izberemo ga (v našem primeru je to makro Stetje) in ga zaženemo. V stolpcu B z naslovom »Vnos« se bo prikazal seznam različnih vnosov, v stolpcu C, imenovanem »Pojavljanja«, pa število njihovih ponovitev iz stolpca A.

Moj mikro, marec - april 2014 | Miha Gradišnik |