목록의 시트에 슬라이서 선택 추가 - Excel VBA

목록의 시트에 슬라이서 선택 추가 - Excel VBA

사용자가 여러 항목을 선택할 수 있는 슬라이서가 있는 피벗 테이블이 있습니다. 슬라이서에서 선택한 값을 나열한 다음 CONCATENATE를 사용하여 다른 셀에서 함께 결합할 수 있도록 하려고 합니다. 아래 코드를 사용하고 있습니다.

현재 셀 L5:L7은 슬라이서에서 처음 선택한 항목으로 채워지고 다른 항목은 채워지지 않습니다.

몇 가지 조사를 통해 CUBESET 함수로 가능한 솔루션을 찾았지만 내 스프레드시트에서 작동하도록 할 수 없습니다. 따라서 VBA 시도입니다. 뭐가 문제인지 아는 사람 있나요?

    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

답변1

다음은 이 작업을 수행하는 통합 문서에서 직접 호출할 수 있고 '기존' 피벗 테이블, OLAP/PowerPivot 피벗 테이블 또는 테이블 슬라이서 등 모든 유형의 슬라이서에서 실행할 수 있는 사용자 정의 함수입니다. 이것을 표준 코드 모듈에 넣은 다음 통합 문서에 다음을 입력하십시오.

=SlicerItems("Slicer_City")

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

그리고 그 모습은 다음과 같습니다:

여기에 이미지 설명을 입력하세요

관련 정보