Tämän artikkelin esimerkit tiedostossa autofilter.xlsm
Yksinkertainen suodatus
Range.Autofilter menetelmällä voit suodattaa aineistosta osa-ainestoja tehokkaasti. Esimerkiksi lause
ActiveCell.AutoFilter Field:=5, Criteria1:=”Korkeakoulu”
suodattaa aktiivisen solun ympärillä olevan aineiston siten että näkyville jäävät vain rivit, joissa on viidennessä sarakkeessa teksti Korkeakoulu.
Seuraavassa ohjelmassa hyödynnän suodattamista. Ohjelma kopioi korkeakoulututkinnon suorittaneiden henkilöiden tiedot uuteen laskentataulukkoon.
Sub MyFilterCopy() Dim MyRange As Range Dim NewSheet As Worksheet Set MyRange = ActiveCell MyRange.AutoFilter Field:=5, Criteria1:="Korkeakoulu" Set NewSheet = Worksheets.Add MyRange.CurrentRegion.Copy Destination:=NewSheet.Range("A1") MyRange.AutoFilter End Sub
Huomaa erityisesti, että Range-objektin CurrentRegion-ominaisuus tavoittaa suodatetusta aineistota näkyville jääneet rivit. Ohjelman viimeisenä rivinä on AutoFilter-menetelmä ilman argumentteja. Tämä poistaa aineiston suodatukset.
Seuraava ohjelmaa värjää korkeakoulun suorittaneiden rivit vihreiksi.
Sub MyFilterGreen() Dim MyRange As Range Dim MyRows As Long Set MyRange = ActiveCell MyRows = MyRange.CurrentRegion.Rows.Count MyRange.AutoFilter Field:=5, Criteria1:="Korkeakoulu" MyRange.CurrentRegion.Offset(1).Resize(MyRows - 1) _ .Interior.Color = RGB(0, 255, 0) MyRange.AutoFilter End Sub
Offset(1).Resize(MyRows-1) tarvitaan, jotta ostsikkoriviä ei värjätä.
Seuraava ohjelma poistaa korkeakoulun suorittaneet aineistosta.
Sub MyFilterRowsDelete() Dim MyRange As Range Dim MyRows As Long Set MyRange = ActiveCell MyRows = MyRange.CurrentRegion.Rows.Count MyRange.AutoFilter Field:=5, Criteria1:="Korkeakoulu" MyRange.CurrentRegion.Offset(1).Resize(MyRows - 1) _ .EntireRow.Delete MyRange.AutoFilter End Sub
Voit käyttää Criteria1-argumentin arvoissa jokerimerkkiä *. Esimerkiksi Criteria1:=”*koulu*” jättää näkyville kaikki rivit, joissa esiintyy viidennessä sarakkeessa sana koulu.
Jos haluat hakea tyhjiä soluja, niin käytä Criteria1:=”=”
Jos haluat hakea ei-tyhjiä soluja, niin käytä Criteria1:=”<>”
Operator-argumentti
AutoFilter-menetelmän Operator-argumentin avulla voit tehdä monipuolisempia suodatuksia.
ActiveCell.AutoFilter Field:=7, Criteria1:=”3″, Operator:=xlTop10Items jättää näkyville ne rivit, joissa on seitsemännen sarakkeen kolme suurinta arvoa.
- Field-argumentti määrittää sarakkeen, jota ehto koskee.
- Operator:=xlTop10Items tarkoittaa, että sarakkeesta haetaan suuripia arvoja. On toki hämmentävää, että argumentin arvossa esiintyy luku 10 vaikka välttämättä ei olla hakemassa kymmentä suurinta arvoa.
- Criteria1-argumentin arvolla täsmennetään kuinka monta suurinta haetaan.
Vastaavalla tavalla voit käyttää Operator-argumentin arvoja xlBottom10Items, xlTop10Percent ja xlBottom10Percent. Voit jopa suodattaa värin perusteella käyttämällä argumentin arvoja xlFilterCellColor tai xlFilterFontColor. Värin voi ilmaista RGB-arvona, esimerkiksi Criteria1:=RGB(0,255,0).
Operator-argumentin xlAnd ja xlOr -arvoilla voit yhdistää ehtoja. Esimerkiksi
ActiveCell.AutoFilter Field:=8, Criteria1:=”1″, Operator:=xlOr, Criteria2:=”2″
jättää näkyville ne rivit, joissa on kahdeksannessa sarakkeessa arvo 1 tai arvo 2.
ActiveCell.AutoFilter Field:=7, Criteria1:=”>2000″, Operator:=xlAnd, Criteria2:=”<3000″
jättää näkyville ne rivit, joissa on seitsemännessä sarakkeessa suurempi kuin 2000, mutta pienempi kuin 3000.
Jos haluat useampia kuin 2 ehtoa, niin voit antaa ehdot vektorina (Array). Tällöin Operator-argumentin arvona on xlFilterValues. Esimerkiksi lause
Range(”A1”).AutoFilter Field:=6, Criteria1:=Array(”1”, ”2”, ”4”), Operator:=xlFilterValues
jättää näkyville ne rivit, joissa on kuudennessa sarakkeessa arvo 1, 2 tai 4.
Lisätietoa
Lisätietoa Range.AutoFilter -menetelmän ohjetoiminnosta.
Tämän artikkelin esimerkit tiedostossa autofilter.xlsm