Страницы: 1
RSS
Построение диаграмм на основе отфильтрованных данных
 
Уважаемые форумчане, добрый день!
Помогите пожалуйста с задачкой.
Есть таблица с данными. На основе этих данных построены диаграммы.
Задача - сделать так, чтобы диаграммы строились на основе данных, по результату фильтрации.
В примере на первом листе - сама таблица, на втором - результаты выборки + диаграммы
Единственный не решённый вопрос - как сделать так, чтобы автоматически формировалась таблица только из отфильтрованных значений? (в примере на втором листе скрытые значения просто удалены)
 
Код
Option Explicit

Sub Перенести_отфильтрованные()
    Dim rTarget As Range
    Set rTarget = Sheets("Лист2").Range("D8")
    
    Dim arr As Variant
    arr = GetArr(Sheets("Лист3").Range("A2"))
    rTarget.Resize(rTarget.Parent.UsedRange.Rows.Count, UBound(arr, 2)).ClearContents
    rTarget.Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

Private Function GetArr(rSource As Range) As Variant
    Dim aSource As Variant, aTarget As Variant
    aSource = rSource.Resize(rSource.Parent.UsedRange.Rows.Count).Value
    ReDim aTarget(1 To UBound(aSource, 1), 1 To 2)
    Dim ys As Long, yt As Long
    For ys = 1 To UBound(aSource, 1)
        If Not IsEmpty(aSource(ys, 1)) Then
            If Not rSource.Cells(ys, 1).EntireRow.Hidden Then
                yt = yt + 1
                aTarget(yt, 1) = yt
                aTarget(yt, 2) = aSource(ys, 1)
            End If
        End If
    Next
    GetArr = aTarget
End Function
В прикреплённом файле срабатывает на активацию листа.
 
Всё работает, спасибо большое!
Буду разбираться как теперь это в основную таблицу перенести.
Видимо пришло время познакомиться с макросами поближе ))
 
Да буквально вчера тема была с промежуточными итогами и смещением. В файле ссылка на лист3, где у вас фильтр стоит. Так нужно?  
Изменено: Sergey Stoyanov - 10.04.2026 15:36:21
 
stas-chery, почему бы не использовать сводные диаграммы?
см файл
 
ПавелW,
Потому что я не знаком с ними (был). Теперь познакомился )
Спасибо!
 
Sergey Stoyanov, спасибо!
С моими достаточно базовыми знаниями - использование формул самое понятное. Буду пытаться понять как работает Ваша формула.
 
Друзья, покопался в этой задачке. Понятно, что тут не обязательны фильтры и достаточно просто набора условий для отбора данных. Либо сводной таблицы и диаграмм со срезами. Но и в такой постановке задача имеет смысл.
Натолкнулся на смешной момент - фильтрую таблицу на Лист 1 и все время выползает Студент  на автомобиле возрастом 25 годиков :)
То есть ставлю фильтр только Женщины - Студент не пропадает... Снимаю все фильтры и ставлю  Профессия=Пенсионер и снова Студент тут...
(кстати разве Пенсионер = профессия?)     В чем причина такогой работы фильтров? Выделил Студента красной заливкой.
Спасибо!    
познакомился с Excel
 
ВовавВова,
Да, пенсионер не совсем профессия, как и студент впрочем. Колонку корректнее было назвать иначе ))
Цитата
написал:
То есть ставлю фильтр только Женщины - Студент не пропадает... Снимаю все фильтры и ставлю  Профессия=Пенсионер и снова Студент тут...(кстати разве Пенсионер = профессия?)     В чем причина такогой работы фильтров? Выделил Студента красной заливкой.
Он не фильтрует почему-то последнюю строчку. Причём если на следующей, пустой строке поставить 1 - область "нефильтрации" смещается на эту строку
 
Цитата
ВовавВова написал:
все время выползает Студент  на автомобиле возрастом 25 годиков
потому что в таблице присутствует функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ. Excel считает, что последняя строка - строка итогов и не фильтрует её. Если добавить ещё одну "фейковую" строку в конец таблицы(без всяких функций) - то все будет фильтроваться как ожидается.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
то все будет фильтроваться как ожидается.
Спасибо, Дмитрий!
познакомился с Excel
 
немного простого перфоманса по теме :)
познакомился с Excel
 
Цитата
написал:
Да буквально вчера тема была с промежуточными итогами и смещением. В файле ссылка на лист3, где у вас фильтр стоит. Так нужно?  
Подскажите пожалуйста, почему при смещении таблицы с данными, при сохранении на неё ссылок - формула перестаёт видеть часть данных?
Получается для формулы важно чтобы таблица со значениями начиналась с самой первой строки?
Изменено: stas-chery - 13.04.2026 11:21:25
 
Цитата
написал:
почему ... формула перестаёт видеть часть данных?
Из-за изменения индексов строк, получаемых функцией СТРОКА().
Нужно изменить формулу:
Код
=СУММПРОИЗВ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;СМЕЩ(Лист3!$B$1;СТРОКА(Лист3!$B$26:$B$50)-1;0))*(Лист3!$B$26:$B$50=Лист3!H2))
 
... или так:
Код
=СУММПРОИЗВ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;СМЕЩ(Лист3!$B$8;СТРОКА(Лист3!$B$8:$B$32)-СТРОКА(Лист3!$B$8);0))*(Лист3!$B$8:$B$32=Лист3!H2))
 
Цитата
написал:
Из-за изменения индексов строк, получаемых функцией СТРОКА().Нужно изменить формулу:
Благодарю. Заработало!
Страницы: 1
Читают тему
Наверх