Quantcast
Channel: Guru-vinkki – HExcelligent.fi
Viewing all articles
Browse latest Browse all 20

Osittajan valinnat Excelin soluihin

$
0
0

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:

avuste1

Vastaavasti saat esiin työkirjasi osittajien nimet, kun kirjoitat toisen argumentin alkuun sl-kirjaimet (suomenkielisessä os):

avuste2

 

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.

kaava

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

  1. Siirry VBA-Editorin puolelle Alt+F11 -näppäinyhdistelmällä.
  2. Lisää makromoduuli valitsemalla komento Insert > Module.
  3. Kopioi edellä mainitulta nettisivulta The UDF -otsikon alta löytyvä koodi lisäämääsi koodimoduuliin.
  4. 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.

funktio

Tarkistat osittajan nimen pikavalikosta komennolla Slicer Settings (Osittajan asetukset).

osittajan nimi

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

 



Viewing all articles
Browse latest Browse all 20

Trending Articles