Ich habe eine Pivot-Tabelle mit einem Slicer, in dem ein Benutzer mehrere Auswahlen treffen kann. Ich versuche, die ausgewählten Werte im Slicer aufzulisten, damit sie dann mit CONCATENATE in einer anderen Zelle zusammengeführt werden können. Ich verwende den folgenden Code.
Derzeit werden die Zellen L5:L7 mit der ersten im Slicer getroffenen Auswahl gefüllt, aber nicht mit anderen.
Ich habe ein bisschen recherchiert und eine mögliche Lösung mit der CUBESET-Funktion gefunden, aber ich kann sie in meiner Tabelle nicht zum Laufen bringen. Daher der VBA-Versuch. Weiß jemand, was daran falsch ist?
Sub City_Click()
Dim cache As Excel.SlicerCache
Set cache = ActiveWorkbook.SlicerCaches("Slicer_City")
Dim sItem As Excel.SlicerItem
For Each sItem In cache.SlicerItems
If sItem.Selected = True Then Range("L5").Value = sItem.Name
If sItem.Selected = True Then Range("L6").Value = sItem.Name
If sItem.Selected = True Then Range("L7").Value = sItem.Name
Next sItem
End Sub
Antwort1
Hier ist eine benutzerdefinierte Funktion, die Sie direkt aus der Arbeitsmappe aufrufen können und die dies für Sie erledigt. Sie kann auf jedem Slicer-Typ ausgeführt werden, sei es eine „herkömmliche“ PivotTable, eine OLAP/PowerPivot-PivotTable oder ein Tabellen-Slicer. Fügen Sie dies einfach in ein Standardcodemodul ein und geben Sie dann in der Arbeitsmappe Folgendes ein:
=SlicerItems("Slicer_Stadt")
Public Function SlicerItems(SlicerName As String, Optional sDelimiter As String = "|") As String
Dim oSc As SlicerCache
Dim oSi As SlicerItem
Dim i As Long
Dim lVisible As Long
Dim sVisible() As String
On Error Resume Next
Application.Volatile
Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
If Not oSc Is Nothing Then
With oSc
If .FilterCleared Then
SlicerItems = "(All)"
Else
If .OLAP Then
SlicerItems = Join(.VisibleSlicerItemsList, sDelimiter)
SlicerItems = Replace(SlicerItems, .SourceName, "")
SlicerItems = Replace(SlicerItems, ".&[", "")
SlicerItems = Replace(SlicerItems, "]", "")
Else
lVisible = .VisibleSlicerItems.Count
If .VisibleSlicerItems.Count = 1 Then
SlicerItems = .VisibleSlicerItems(1).Name
Else
ReDim sVisible(1 To lVisible)
For i = 1 To lVisible
sVisible(i) = .VisibleSlicerItems(i).Name
Next i
SlicerItems = Join(sVisible, sDelimiter)
End If
End If
End If
End With
Else
SlicerItems = SlicerName & " not found!"
End If
End Function
Und so sieht es aus: