基于应用过滤器的单元格值

基于应用过滤器的单元格值

是否可以让单元格值等于当前应用的过滤器?

我有一列数据如下:001.1、002.1、003.1...(我有 100 行)我需要 L1 单元格(例如)等于该列的选定过滤器。

所以如果我过滤 002.1,那么 L1 = 002.1

请问我怎样才能更轻松地达到此目的?

Sub filtr()
If ActiveWorkbook.SlicerCaches("Průřez_Lokace").SlicerItems("001.1").Selected = True Then
    Range("L1") = "001.1"
    Else
        If ActiveWorkbook.SlicerCaches("Průřez_Lokace").SlicerItems("002.1").Selected = True Then
            Range("L1") = "002.1"
        End If
End If
End Sub

或者可能是这样的?

For i = 1 To 120
    If ActiveWorkbook.SlicerCaches("Prùøez_Lokace").SlicerItems(""00" & i & ".1"").Selected = True Then
        Range("L1") = "00" & i & ".1"
    End If
Next i

或者类似这样?

For i = 1 To 9
    x = "00" & i & ".1"
    If ActiveWorkbook.SlicerCaches("Prùøez_Lokace").SlicerItems(x).Selected = True Then
        Range("L1") = x
    End If
Next i

不幸的是,第一个(最复杂的)当然可以工作,但其他两个却不行。

答案1

这是一个非常简单的例子:

  • 一列
  • 一个标准
  • 自动过滤


在此处输入图片描述

如果用户设置自动筛选显示罗伯特并运行此宏:

Sub dural()
    Dim rng As Range, r As Range, i As Integer
    Set rng = Range("A:A").Cells.SpecialCells(xlCellTypeVisible)
    i = 0
    For Each r In rng
        If i = 1 Then
            Range("B1").Value = r.Value
            Exit Sub
        End If
        i = i + 1
    Next r
End Sub

然后罗伯特将被关进牢房B1。这利用了列中显示的内容A (除标题外)符合标准。

答案2

这是一个开始:https://www.mrexcel.com/forum/excel-questions/591287-start-macro-when-changing-value-slicer.html

在您的工作簿中使用此子项:

Private Sub Workbook_SheetPivotTableChangeSync(ByVal Sh As Object, ByVal Target As PivotTable)
    'your macro
End Sub

我只是稍微玩了一下(每次单击切片器按钮时都会弹出一个消息框),但它应该更优雅,因为你不需要在每次单击切片器按钮后都运行 VBA。

相关内容