Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос для фильтрации
 
А вот иллюстрация к проблеме.
См. вложение.

Я даже не заметил, что она не подгрузилась к моему сообщению. Без нее труднее понять. Теперь я надеюсь, что стало наглядно. Здравый смысл мне подсказывает, что это должно быть не очень сложно, если знаешь VBA. Ведь задача очень конкретная, не требующая поиска вариантов решения. Надо просто знать, как это кодируется. Я, к сожалению, не знаю.

Неужели никто не возьмется?
Макрос для фильтрации
 
Добрый день, уважаемые коллеги!

Есть рабочая область Excel, состоящая из двух блоков.
В левой части  сводная таблица. Она содержит только атрибуты в строках. В области расчета параметров ничего нет, в контекстном фильтре ничего нет, в столбцах ничего нет.
В правой части рабочей области - статичная таблица. Она содержит множество столбцов.
В результате -получается одна таблица.


Когда пользователь применяет фильтр к атрибутам из сводной таблицы, статичная часть не фильтруется.
Фильтрация атрибутов нужна только по полям Brand и EAN.
Возможное решение: добавить два столбца сразу после сводной таблицы (их впоследствии надо будет скрыть), где будут ссылки на значения из соответствующих полей сводной таблицы. Ссылки не типа GETPIVOTDATA, а простые - типа "=D7". Пишется макрос, который анализирует, какие именно значения попали в фильтр сводной таблицы по полю Brand и по полю EAN, и потом применяет эти наборы выбранных значений к фильтрам в двух вспомогательных столбцах. Макрос должен запускаться автоматически. Событие - применение фильтра к одному из обозначенных полей сводной таблицы.

Нельзя сортировать сводную таблицу и менять в ней порядок строк. Иначе все прогнозы "съедут"

На всякий случай добавлю: да, я осознаю, что при обновлении сводной таблицы порядок строк меняется. Это предусмотрено. Процесс построен так, что при обновлении сводной таблицы новые строки добавляются только снизу (за счет сортировки по ID_EAN).

Цена вопроса - 500 руб.

Открыт к переговорам. Завтра и послезавтра могу не иметь доступа к сети, поэтому отвечу не сразу. Срок - до 23 декабря.
Удаление столбцов по условию
 
Антон, огромное спасибо!

Очень подходит! Теперь я понял.
Удаление столбцов по условию
 
Антон, Спасибо.
Массив данных - это таблица. Под "...." я имел в виду любое выражение. Не четыре точки. Простите, что ввел в заблуждение.

Пример прилагаю. В строке 3 есть повторяющееся выражение СРЕДНЯЯ ЦЕНА ПРОДАЖИ (РУБ.)
Мне нужно удалить все столбцы, где в строке 3 встречается такое выражение. Хотелось бы, чтобы макросу можно было задавать номер строки, по которой смотреть (или чтобы он сам понимал это, исходя из того, где стоит курсор), а также задавать само выражение. В следующий раз может потребоваться удалить столбцы, где выражение другое.
Удаление столбцов по условию
 
Добрый день,
Прошу помочь написать макрос, который удалял бы в массиве данных столбцы по выбранному критерию. Например, удалить столбцы, на пересечении с которыми в шапке (или в i-ой строке массива данных) встречается выражение "....".
За основу я взял аналогичный макрос, который удаляет строки по обозначенному критерию. Но мне не удается переписать его, заменив "rows" на "columns" и наоборот.
'Удаление всех отобранных строк
Код
Sub Rows_Delete_If()
    Dim msg, style, title, Help, Ctxt, Response, MyString
    Dim region As Range, col As Range, checkrange As Range, delrange As Range
    Dim cell As Range

    On Error Resume Next
    If TypeName(Selection) <> "Range" Then Exit Sub

    x = ActiveCell.Value
    Set region = ActiveCell.CurrentRegion
    Set col = ActiveCell.EntireColumn
    Set checkrange = Intersect(region, col)

    If Len(col.Address) > 5 Then
        colName = Mid(col.Address, 2, 2)
    Else
        colName = Mid(col.Address, 2, 1)
    End If

    msg = "Сейчас будут удалены все строки, " & vbCrLf & " где в столбце " & colName & " есть значение '" & x & "'." & vbNewLine & "Продолжить?"
    style = vbYesNo + vbCritical + vbDefaultButton2
    title = "Выборочное удаление строк"

    Response = MsgBox(msg, style, title)

    If Response = vbYes Then
        Call Intro
        Call SaveUndoInfo(ActiveSheet.UsedRange)

        For Each cell In checkrange
            If cell.Value = x Then
                If n = 0 Then
                    Set delrange = cell.EntireRow
                    n = 1
                Else
                    Set delrange = Union(delrange, cell.EntireRow)
                End If
            End If
        Next
        delrange.Delete

    End If
    Call Outro
    Application.OnUndo "Отменить удаление строк", "RestoreUndoInfo"
End Sub
Страницы: 1
Наверх