2016-08-25 33 views
0

私はかなり複雑なデータモデル(PowerPivotに組み込まれています)を持っています。そこでは、ダッシュボードにスライサーがいくつかあります。 しかし、私はこれらのスライサーをDataModelの一部ではない(そしてできない)別のテーブルに適用したいと思います。数式またはVBAでスライサーの選択を使用

したがって、ExcelのUDFを使用してスライサーの選択をキャプチャしています。 私が苦労している部分はここから始まります。スライサーから取り込んだ選択肢を使用し、VBAを使用してUnLinked Tableをフィルター処理するか、SUMPRODUCT/SUMIFS式を使用してUnLinkedTableから必要な結果を計算する必要があります。 例えば、 "PRODUCTS"スライサーで "A"、 "B"、 "C"、 "D"を選択した場合、私のUDF式は "A、B、C、D"を返します。 スライサーですべてが選択されている場合、数式は「すべての項目」を返します。

「A、B、C、D」の結果を使用してVBAでUnLinkedTable [PRODUCT]列をフィルタリングする方法、またはExcelでSUMPRODUCTまたはSUMIFS式を書き込むにはどうすればよいですか? UnLinkedテーブルには、複数のスライサーと複数の列があります。 私はあなたの助けに非常に感謝します!

+0

ので、あなたはこの1つ前の7つの質問をし、決して単一の答えを受け入れた...うーん... – cyboashu

+0

はただ、明確にする』あなたが意味ですかExcelテーブル(別名ListObject)?ピボットテーブルについて話していますか? – jeffreyweir

+0

私はピボットテーブルではなくExcelテーブルを意味します。 – jb007

答えて

0

私はVBAのビットで私の問題を解決することができます。 誰もが解決策に興味がある場合は、ここにある:

[SelectionsInSlicerBrand] -> this is the named range for the cell where my UDF brings the slicer selection 
BrandFilters = Split([SelectionsInSlicerBrand], ",") 
If [SelectionsInSlicerBrand] <> "All Items" Then 
ActiveSheet.ListObjects("TableFilterVBA").Range.AutoFilter Field:=1, Criteria1:=(BrandFilters), Operator:=xlFilterValues 
Else 
ActiveSheet.ListObjects("TableFilterVBA").Range.AutoFilter Field:=1 
End If 

しかし、私は今、別の問題があります。スライサーUDF式を通常のピボットテーブルでテストしたところ、うまくいきました。ただし、PowerPivotピボットテーブルを作成すると、UDFはもう機能しません。 次のリンクで読んだ内容に基づいて、PowerPivot PivotTableがOLAPベースであるため、SlicerCacheLevelを使用する必要があります。私のUDFのようにSlicerCacheLevelを使用する必要があります。PowerPivot Slicer selection based on cell value using VBA ここに私のUDF用のコードで、通常のピボットテーブルのスライサーを選択しても問題ありません。 PowerPivotでも動作するように変更することができれば、それはすばらしいでしょう。 UDFはここに発見された:表 『'をあなたが言うときhttp://www.jkp-ads.com/Articles/slicers05.asp

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" 
      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 
関連する問題