Nano Hash - криптовалюты, майнинг, программирование

Установите фильтр страницы сводной таблицы с подстановочным знаком

Я пытаюсь установить фильтр страницы в сводной таблице, используя строку Test в качестве базы поиска, чтобы он возвращал все, что содержит этот фрагмент строки. Я попытался использовать * в качестве подстановочного знака для строки, но он возвращает ошибку.

Я смог сделать это для сводных фильтров (столбцы/строки), но кажется, что фильтры страниц (те, что сверху/снаружи сводной таблицы) используют другой метод или синтаксис.

Я пробовал искать в других темах и не нашел ответа, который соответствует моим потребностям. Вот часть кода:

Dim pt As PivotTable
Dim pf As PivotField
Dim TextFilter As String

Set pt = ActiveSheet.PivotTables("PivotTable3")
Set pf = pt.PivotFields("Title")
TextFilter = "Test"

pt.PivotCache.Refresh
pf.ClearAllFilters

Следующая строка работает для точного совпадения строк:

ActiveSheet.PivotTables("PivotTable3").PivotFields("Title").CurrentPage = TextFilter

Строка ниже не работает для частичного совпадения строки (или содержит):

ActiveSheet.PivotTables("PivotTable3").PivotFields("Title"). _
PivotFilters.Add Type:=xlCaptionContains, Value1:="Test"

Как установить фильтр страницы для таких строк, как Test?

Кроме того, что было бы лучшим решением для зацикливания окончательного (правильного) кода для других сводных таблиц на том же рабочем листе и/или в рабочей книге?

01.04.2021

Ответы:


1

Было бы полезно увидеть документацию, чтобы объяснить, почему PivotFilters.Add не работает для фильтров страниц, например. см. здесь и здесь.

Однако простой цикл работает, как показано в этом post который вы, возможно, уже видели, но не определяет фильтры страниц.

Итак, вы можете сделать что-то вроде этого:

Option Explicit

Sub Test()

    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim strLike As String
    
    Set pt = ThisWorkbook.Worksheets("Sheet1").PivotTables(1)
    Set pf = pt.PivotFields("name")
    
    strLike = "b*"
    
    pt.PivotCache.Refresh
    pf.EnableMultiplePageItems = True ' make sure the filter accepts multiple items
    pf.ClearManualFilter ' make sure to reset to avoid an error for no active filter
    
    For Each pi In pf.PivotItems
        pi.Visible = (pi.Name Like strLike)
    Next pi
    
End Sub

Чтобы использовать это в цикле всех рабочих листов в книге, вы можете расширить это следующим образом:

Option Explicit

Sub Test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pt As PivotTable
    
    Set wb = ThisWorkbook
    
    For Each ws In wb.Worksheets
        For Each pt In ws.PivotTables
            PivotPageByWildcard pt, "name", "b*"
        Next pt
    Next ws
    
End Sub

Sub PivotPageByWildcard(pt As PivotTable, strField As String, strLike As String)

    Dim pf As PivotField
    Dim pi As PivotItem
    
    Set pf = pt.PivotFields(strField)
    
    pt.PivotCache.Refresh
    pf.EnableMultiplePageItems = True
    pf.ClearManualFilter
    
    For Each pi In pf.PivotItems
        pi.Visible = (pi.Name Like strLike)
    Next pi
    
End Sub

Простой тестовый пример:

введите здесь описание изображения

01.04.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..