Использование списка значений в операторе Select Case - PullRequest
0 голосов
/ 06 марта 2019

Привет. В настоящее время я пытаюсь скрыть ненужные сводные элементы в моей сводной таблице с помощью оператора выбора регистра.

Мой оператор выбора регистра выглядел бы так:

ws = ActiveWorksheet

For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems

Select Case oPI.Value
Case "Value1","Value2","Value3"
'Do Nothing
Case Else
oPI.Visible = False
End Select

Next

Однако я хочу изменить оператор так, чтобы он выполнял две вещи.

  1. Используйте «Like» внутри регистра «Value1», «Value2», «Value3», поскольку Value1, 2 и 3 не являются точными совпадениями для значений в сводных элементах.Например, значение 1 будет 12345, в то время как в сводных элементах оно будет 12345a или 12345b или 12345c.

  2. Вместо ввода в VBA фактических значений Value1, 2 и 3, IЯ хочу, чтобы в Case Case использовался диапазон Cell внутри моего активного рабочего листа (например, Range ("A1: A100").

Я уже пробовал много комбинаций, но мой код не отображаетсяна работу. Я не знаю, как это сделать также с заявлениями IF.

Ваша помощь будет высоко оценена. Спасибо!

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Вы можете прочитать диапазон значений для проверки в массиве, который вы сравниваете с текущим центральным элементом.Я использовал Instr, а не Like с подстановочными знаками (%), чтобы увидеть, присутствует ли подстрока.

Dim arr(), ws As Worksheet, i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
arr = Application.Transpose(ws.Range("A1:A100").Value)
'other code
For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems
    For i = LBound(arr) To UBound(arr)
        If InStr(arr(i), oPI.Value) > 0 Then
            oPI.Visible = False
            Exit For
        End If
    Next
Next
0 голосов
/ 06 марта 2019

Использование формулы массива и Match для поиска "похожих" совпадений:

Dim ws, oPI, r

Set ws = ActiveSheet

For Each oPI In ws.PivotTables(1).PivotFields("Reference Number").PivotItems
    r = ws.Evaluate("=MAX(IFERROR(MATCH(A1:A100 & ""*"",""" & oPI.Value & """,0),0))")
    oPI.Visible = (r = 0)
Next

Может не работать, если значения вашего поля являются числовыми, а не текстовыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...