![基于应用过滤器的单元格值](https://linux22.com/image/1532256/%E5%9F%BA%E4%BA%8E%E5%BA%94%E7%94%A8%E8%BF%87%E6%BB%A4%E5%99%A8%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%E5%80%BC.png)
是否可以让单元格值等于当前应用的过滤器?
我有一列数据如下: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。