Как выделить видимые ячейки в гугл таблицах
Перейти к содержимому

Как выделить видимые ячейки в гугл таблицах

  • автор:

Как обработать только видимые на листе строки?

Скрипт ниже получает массив данных, соответствующий области выделения.

var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var selection = sheet.getActiveRange(); var fromRow = selection.getRow(); var toRow = selection.getLastRow(); var fromColumn = 1; var toColumn = 7; var array = sheet.getRange(fromRow, fromColumn, toRow, toColumn).getValues(); var selected_rows = array.length + 1; 
  • Ожидаемый результат: selected_rows = 6.
  • Полученный результат: selected_rows = 200.

То есть метод getRange получает данные из области выделения, не учитывая результаты фильтрации.

Как обработать только видимые на листе строки?

  • google-spreadsheet
  • google-apps-script

Отслеживать
19.1k 6 6 золотых знаков 30 30 серебряных знаков 44 44 бронзовых знака
задан 16 июл 2015 в 11:10
Владислав Погорелов Владислав Погорелов
85 9 9 бронзовых знаков
16 июл 2015 в 11:14

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

/* -------------------------------------------------------------- возвращает массив видимых строк в границах заданной области ----------------------------------------------------------------- */ function getVisibleData (range) < var values = range.getValues(); var selection = range.getSheet().getActiveRange(); var row1 = selection.getRow(); var row2 = selection.getLastRow()-row1+1; var range2 = range.getSheet().getRange(row1, 1, row2); var arrData = [], colors = []; // обрабатываем только видимые строки (работа в условиях включенной фильтрации на листе) // запоминаем текущие цвета var oldColors = range2.getFontColors(); // меняем цвета на новые for (var r = 0; r < oldColors.length; r++) colors[r] = [(oldColors[r] == '#000001') ? '#000002' : '#000001']; range2.setFontColors(colors); // Невидимые строки не окрашиваются. Находим окрашенные и записываем в массив. var newColors = range2.getFontColors(); for (var r = 0; r < colors.length; r++) < if ((oldColors[r][0] !== newColors[r][0])) arrData.push(values[r]); >// возвращаем старые цвета range2.setFontColors(oldColors); // возвращаем массив видимых строк выделенного диапазона. return arrData; > 

Отслеживать
ответ дан 20 июл 2015 в 7:37
Владислав Погорелов Владислав Погорелов
85 9 9 бронзовых знаков

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

5 мар 2017 в 7:05

Ну правильно, вы же руками строите range от первого выбранного до последнего выбранного, поэтому и выдает 200. Чтобы получить интересующий range, нужно взять пересечение созданного array с имеющимся selection . В Excel VBA есть метод Intersect(range,range. ), в гугл-таблицах не нашел, но должен быть (нашел вот такой запрос, там упоминается, что есть rangeset, который умеет хотя бы с одним range пересечение делать — его можно попробовать применить). То есть если selection на самом деле является RangeSet, можно вызвать так:

var array = selection.subRangeSet(sheet.getRange(fromRow, fromColumn, toRow, toColumn)).getValues(); 

Отслеживать
ответ дан 16 июл 2015 в 14:13
1,084 8 8 серебряных знаков 21 21 бронзовый знак
В GAS нет метода RangeSet .
20 июл 2015 в 7:38

  • google-spreadsheet
  • google-apps-script
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8420

Гугл таблицы — как подсчитать сумму значений видимых ячеек?

Привет, я веду учет обращений по каждой статье и если статья подходит под вопрос какого либо из столбцов проставляю в ячейке статье 1 которые у меня после суммируются «=СУММ(K4:K)» и выводятся в процентах, но при фильтрации он всё равно считает все значения столбца, что можно указать в формуле, дабы при фильтрации(допустим по названию статьи) он считал значения только в видимых ячейках. В экселе вопрос легко решаем, но нужно решение для гуглтаблиц ибо основной софт. Спасибо!

  • Вопрос задан более трёх лет назад
  • 11829 просмотров

Комментировать

Решения вопроса 1

Omiku @Omiku Автор вопроса

Вопрос решил заменой на =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;K4:K)

Ответ написан более трёх лет назад

Комментировать

Нравится 1 Комментировать

Ответы на вопрос 1

Это какой-то бред для рядового пользователя.
Т.е. я не могу просто ткнуть в пустую ячейку, нажать кнопку СУМ и обвести нужный диапазон отфильтрованных данных. Надо обязательно прописывать формулу, искать функцию SUBTOTAL которая никогда не на виду, прописывать первый аргумент — «9» и потом только диапазон.

Ответ написан более трёх лет назад

Passionare @Passionare

Да. Нарочно чрезмерно запутанная система.
2021 год.
все те же проблемы )))

Ваш ответ на вопрос

Войдите, чтобы написать ответ

google-sheets

  • Google Sheets

Скрип для записи последних действий в документе?

  • 1 подписчик
  • вчера
  • 71 просмотр

google-sheets

  • Google Sheets
  • +1 ещё

Как настроить триггер на изменение в гугл таблицах?

  • 1 подписчик
  • 28 апр.
  • 47 просмотров

Как получить СУММЕСЛИ только видимых ячеек?

https://docs.google.com/spreadsheets/d/1NU13NCXs4W.
Вот ссылка на таблицу.
Как получить сумму значений в ячейках при условии, что эти ячейки видимы после фильтра и удовлетворяют определенному значению в соседней ячейке?
Например, есть промежуточные итоги — она считает только видимые значения, но нет условия. Есть сумма если — есть условие но считает все значения и видимые и скрытые. Объединить не получается. Желательно решить этот вопрос без доп.списков и скриптов.

  • Вопрос задан более трёх лет назад
  • 2025 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 1

ProgrammerForever

Григорий Боев @ProgrammerForever Куратор тега Google Sheets

Учитель, автоэлектрик, программист, музыкант

Не совсем то, но думаю что поможет. Используейте FILTER(Диапазон;Условие1;Условие2;. УсловиеN) для подсчёта суммы.
например, в вашем случае, в B47 пишем:
=СУММ(FILTER($C$2:$C$45;$B$2:$B$45=A47))
Где A47 — фильтр-условие на диаметр трубопровода
А ещё лучше — сразу сделать так:

=ЕСЛИОШИБКА(СУММ(FILTER($C$2:$C$45;$B$2:$B$45=A47));0)

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Суммирование только видимых ячеек

Некоторые из приведенных ниже способов чувствительны к этим факторам, некоторые – нет. Это нужно учитывать при выполнении вычислений:

суммирование только видимых ячеек после фильтра, итогов

СУММ (SUM) – тупо суммирует все в выделенном диапазоне без разбора, т.е. и скрытые строки в том числе. Если хотя бы в одной ячейке есть любая ошибка – перестает считать и тоже выдает ошибку на выходе.

ПРОМЕЖУТОЧНЫЕ.ИТОГИ (SUBTOTALS) с кодом 9 в первом аргументе – суммирует все видимые после фильтра ячейки. Игнорирует другие подобные функции, которые могут считать внутренние подитоги в исходном диапазоне.

ПРОМЕЖУТОЧНЫЕ.ИТОГИ (SUBTOTALS) с кодом 109 в первом аргументе – суммирует все видимые после фильтра и группировки (или скрытия) ячейки. Игнорирует другие подобные функции, которые могут считать внутренние подитоги в исходном диапазоне.

Если нужно не суммировать, то можно использовать другие значения кода математической операции:

коды операций функции ПРОМЕЖУТОЧНЫЕ.ИТОГИ

АГРЕГАТ (AGGREGATE) – самая мощная функция, появившаяся в Office 2010. Также как и ПРОМЕЖУТОЧНЫЕ.ИТОГИ может не только суммировать, но и считать среднее, количество, минимум, максимум и т.д. — код операции задается первым аргументом. Плюс к этому имеет множество опций по подсчету, которые можно указать вторым аргументом:

функция АГРЕГАТ в Excel

Ссылки по теме

  • Выборочные вычисления по одному или нескольким условиям
  • Вставка в отфильтрованные строки
  • Быстрое скрытие и отображение ненужных строк и столбцов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *