Osittajat eli slicerit ovat näppäriä pivot-taulukoiden ja -kaavioiden suodatusvälineitä. Mutta miten osittajasta valitut vaihtoehdot saa Excelin soluihin, jos niitä tarvitaan muissa Excel-kaavoissa tai ne halutaan tulostaa luettelona?
Tässä jutussa on ohje listan muodostamiseen sekä Power Pivotissa että tavallisessa Excelissä.
Kun pivotti on muodostettu Power Pivotin tietomallista
Power Pivotin tietomalli on rakenteeltaan kuutio, joten voit noutaa osittajasta valitut arvot CUBERANKEDMEMBER (KUUTIONLUOKITELTUJÄSEN) -funktiolla.
Alla oleva kaava noutaa osittajasta valitun n:nnen arvon:
=CUBERANKEDMEMBER(”yhteyden_nimi”; osittajan_nimi; n)
Kaava antaa tulokseksi virheilmoituksen, jos n on suurempi kuin valintojen määrä. Virheen voi estää käyttämällä IFERROR (JOSVIRHE) -funktiota:
=IFERROR(CUBERANKEDMEMBER(”yhteyden_nimi”; osittajan_nimi; n); ””)
Kun kirjoitat funktiota, Excel avustaa näyttämällä yhteyden (connection) nimen, kun olet kirjoittanut ensimmäisen lainausmerkin:
Vastaavasti saat esiin työkirjasi osittajien nimet, kun kirjoitat toisen argumentin alkuun sl-kirjaimet (suomenkielisessä os):
Entä miten saat n:n paikalle juoksevan numeroinnin ja luot riittävän määrän kaavoja arvojen noutamiseen? Voit käyttää hyödyksi ROW (RIVI)-funktiota, joka kertoo soluosoitteen rivin numeron. Esimerkiksi =ROW(A1) antaa tuloksena luvun 1 ja ROW(A2) antaa tulokseksi luvun 2.
Luomalla seuraavan kaavan ja kopioimalla sitä riittävästi alas, saat muodostettua luettelon valituista arvoista.
=IFERROR(CUBERANKEDMEMBER(”ThisWorkbookDataModel”; Slicer_ProductName; ROW(A1)); ””)
ROW-funktiota käytetään vain numeroinnin toteutuksessa. Solun A1 arvolla ei ole mitään tekemistä tämän kaavan toiminnan kannalta, joten solu saa sisältää mitä tahansa.
Huomaa: jos lisäät rivin 1 yläpuolelle uusia rivejä, kaavassa oleva osoite A1-osoite muuttuu A2:ksi, joten joudut korjaamaan kaavan rivin lisäämisen jälkeen.
Kun pivotti on muodostettu tavallisesta Excel-luettelosta
Jos pivot-taulukko on tehty tavallisesta Excel-luettelosta tai muusta tietolähteestä, joka ei ole kuutio, valintojen noutamiseen ei ole olemassa valmista funktiota.
Sinun pitää luoda VBA-kielellä funktio ja käyttää kyseistä funktiota valintojen näyttämiseen. Löydät funktion valmiin esimerkkikoodin esimerkiksi täältä: http://www.jkp-ads.com/Articles/slicers05.asp
Ohje funktion lisäämiseen
- Siirry VBA-Editorin puolelle Alt+F11 -näppäinyhdistelmällä.
- Lisää makromoduuli valitsemalla komento Insert > Module.
- Kopioi edellä mainitulta nettisivulta The UDF -otsikon alta löytyvä koodi lisäämääsi koodimoduuliin.
- Sulje VBA-Editori ja tallenna työkirja. Huomaa, että tallennuksen yhteydessä pitää valita tallennusmuodoksi .xlsm, jotta koodi tallentuu työkirjaan.
Tämän jälkeen voit käyttää kopioimaasi GetSelectedSlicerItems-funktiota Excelin solussa antamalla funktiolle argumentiksi osittajan nimen (huomaa, että nimi on eri asia kuin osittajan otsikko). Funktio muodostaa pilkulla erotetun listan valituista arvoista.
Tarkistat osittajan nimen pikavalikosta komennolla Slicer Settings (Osittajan asetukset).
Kopioin http://www.jkp-ads.com/Articles/slicers05.asp -sivulta koodin alle, jos kyseinen sivu ei ole käytettävissä:
Public Function GetSelectedSlicerItems(SlicerName As String) As String
Dim oSc As SlicerCache
Dim oSi As SlicerItem
Dim lCt As Long
On Error Resume Next
Application.Volatile
Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
If Not oSc Is Nothing Then
For Each oSi In oSc.SlicerItems
If oSi.Selected Then
GetSelectedSlicerItems = GetSelectedSlicerItems & oSi.Name & ", "
lCt = lCt + 1
ElseIf oSi.HasData = False Then
lCt = lCt + 1
End If
Next
If Len(GetSelectedSlicerItems) > 0 Then
If lCt = oSc.SlicerItems.Count Then
GetSelectedSlicerItems = "All Items"
Else
GetSelectedSlicerItems = Left(GetSelectedSlicerItems, Len(GetSelectedSlicerItems) - 2)
End If
Else
GetSelectedSlicerItems = "No items selected"
End If
Else
GetSelectedSlicerItems = "No slicer with name '" & SlicerName & "' was found"
End If
End Function
