Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сводные данные из нескольких вкладок в google sheet - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Сводные данные из нескольких вкладок в google sheet
awfulnoise Дата: Пятница, 29.04.2022, 15:30 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Добрый день

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

Как сделать вкладку со сводными данными - список всех имен без повторений и сумма всех баллов, которые получил человек, справа от имени.

Нашел как сделать в экселе, но все варианты по google таблице из интернета у меня почему-то не дают нужный результат.

Заранее большое спасибо
 
Ответить
СообщениеДобрый день

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

Как сделать вкладку со сводными данными - список всех имен без повторений и сумма всех баллов, которые получил человек, справа от имени.

Нашел как сделать в экселе, но все варианты по google таблице из интернета у меня почему-то не дают нужный результат.

Заранее большое спасибо

Автор - awfulnoise
Дата добавления - 29.04.2022 в 15:30
Gustav Дата: Пятница, 29.04.2022, 16:27 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Без примера, вслепую попробуйте на 9-м листе ("вкладке") ввести примерно такую формулу (многоточие - это данные с листов 3-6):
[vba]
Код
=QUERY({'Лист1'!A1:B150; 'Лист2'!A1:B150; ... 'Лист7'!A1:B150; 'Лист8'!A1:B150}; "select Col1, sum(Col2) group by Col1 label sum(Col2) ''")
[/vba]

И если будет нужен дальнейший разговор, то без примера он бессмыслен.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеБез примера, вслепую попробуйте на 9-м листе ("вкладке") ввести примерно такую формулу (многоточие - это данные с листов 3-6):
[vba]
Код
=QUERY({'Лист1'!A1:B150; 'Лист2'!A1:B150; ... 'Лист7'!A1:B150; 'Лист8'!A1:B150}; "select Col1, sum(Col2) group by Col1 label sum(Col2) ''")
[/vba]

И если будет нужен дальнейший разговор, то без примера он бессмыслен.

Автор - Gustav
Дата добавления - 29.04.2022 в 16:27
Ефгений Дата: Воскресенье, 04.06.2023, 00:11 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 80
Репутация: 0 ±
Замечаний: 0% ±

2010
Gustav, подскажите пожалуйста что добавить в формулу, чтобы она суммировала данные с новых листов таблицы? Сейчас при создании нового листа, в формулу приходится прописывать название данного листа.
 
Ответить
СообщениеGustav, подскажите пожалуйста что добавить в формулу, чтобы она суммировала данные с новых листов таблицы? Сейчас при создании нового листа, в формулу приходится прописывать название данного листа.

Автор - Ефгений
Дата добавления - 04.06.2023 в 00:11
Gustav Дата: Воскресенье, 04.06.2023, 15:11 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата Ефгений, 04.06.2023 в 00:11, в сообщении № 3 ()
при создании нового листа, в формулу приходится прописывать название данного листа

Да, и это самый простой и быстрый способ. Трёхмерных ссылок, как в Excel, типа Лист1:Лист8!A1:B150 в таблицах Google, увы, пока нет.

Что можно сделать еще? Видятся такие варианты:

1. Насоздавать много пустых листов ("на вырост"), прописать их всех в формулу и дальше задействовать и переименовывать в процессе необходимости. Само собой, даже пустые, они будут участвовать в вычислениях и, возможно (а то и наверняка), будут понижать быстродействие. Но формулу вручную править не придётся.

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

3. Написать маленькую пользовательскую функцию типа SHEETNAMES, возвращающую список рабочих листов. Далее, используя эту функцию, создать формулу, формирующую ТЕКСТ рабочей формулы с учетом добавления новых листов. Наконец, в нужный момент вручную копировать сформированный текст формулы в ячейку с рабочей формулой, заменяя старый текст рабочей формулы на новый. Т.е. по сравнению с вариантом 2, который только скриптовый, здесь будет "разделение труда" между скриптом и формулой, но зато весь процесс будет более наглядный и контролируемый.

В общем, если Вам не мило простое ручное добавление нового листа в формулу, то выбирайте из трёх представленных вариантов. Как можно понять из вышесказанного, каждый из этих вариантов потребует некоторых начальных инвестиций трудозатрат. Ну, а какой выигрыш по времени (и по комфорту) в дальнейшем они обеспечат (и обеспечат ли) покажет только само время.

[p.s.]"Бонус": маленькая скриптовая функция, возвращающую список всех рабочих листов файла (начало работ по варианту 3):[/p.s.]
[vba]
Код
function SHEETNAMES() {
    var sheets = SpreadsheetApp.getActive().getSheets();
    return sheets.map(function(sh) { return sh.getSheetName() });
}
[/vba]
Можно завести вспомогательный рабочий лист "СписокЛистов" и в его ячейку A1 поместить вызов этой маленькой функции:
[vba]
Код
=SHEETNAMES()
[/vba]
И тогда, начиная с этой ячейки с формулой, вниз по столбцу сформируется список рабочих листов текущего файла.

[p.s.]"Бонус-2": Подгоню тогда и примерную формулу.[/p.s.]И вообще лист "СписокЛистов" можно использовать как некое рабочее место (АРМ) для формирования обновленного текста формулы.

Итак, в соседнем столбце B напишем слово "нет" напротив имен тех листов, которые не должны участвовать в формуле.

Далее в любой ячейке листа "СписокЛистов" правее столбцов A и B (для них мы уже нашли применение), допустим, в ячейке D1 пишем такую формулу, формирующую текст нашей рабочей формулы:
[vba]
Код
=LET(
shList;  FILTER('СписокЛистов'!A:A; 'СписокЛистов'!A:A<>""; 'СписокЛистов'!B:B<>"нет");
refs;    MAP(shList; LAMBDA(sh; "'" & sh & "'!A1:B150"));
"=QUERY({" & JOIN("; "; refs) & "}; ""select Col1, sum(Col2) group by Col1 label sum(Col2) ''"")"
)
[/vba]
Теперь всё, что останется сделать после добавления нового листа/листов - скопировать сформированный текст из ячейки D1 и заменить им рабочую формулу.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 04.06.2023, 15:30
 
Ответить
Сообщение
Цитата Ефгений, 04.06.2023 в 00:11, в сообщении № 3 ()
при создании нового листа, в формулу приходится прописывать название данного листа

Да, и это самый простой и быстрый способ. Трёхмерных ссылок, как в Excel, типа Лист1:Лист8!A1:B150 в таблицах Google, увы, пока нет.

Что можно сделать еще? Видятся такие варианты:

1. Насоздавать много пустых листов ("на вырост"), прописать их всех в формулу и дальше задействовать и переименовывать в процессе необходимости. Само собой, даже пустые, они будут участвовать в вычислениях и, возможно (а то и наверняка), будут понижать быстродействие. Но формулу вручную править не придётся.

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

3. Написать маленькую пользовательскую функцию типа SHEETNAMES, возвращающую список рабочих листов. Далее, используя эту функцию, создать формулу, формирующую ТЕКСТ рабочей формулы с учетом добавления новых листов. Наконец, в нужный момент вручную копировать сформированный текст формулы в ячейку с рабочей формулой, заменяя старый текст рабочей формулы на новый. Т.е. по сравнению с вариантом 2, который только скриптовый, здесь будет "разделение труда" между скриптом и формулой, но зато весь процесс будет более наглядный и контролируемый.

В общем, если Вам не мило простое ручное добавление нового листа в формулу, то выбирайте из трёх представленных вариантов. Как можно понять из вышесказанного, каждый из этих вариантов потребует некоторых начальных инвестиций трудозатрат. Ну, а какой выигрыш по времени (и по комфорту) в дальнейшем они обеспечат (и обеспечат ли) покажет только само время.

[p.s.]"Бонус": маленькая скриптовая функция, возвращающую список всех рабочих листов файла (начало работ по варианту 3):[/p.s.]
[vba]
Код
function SHEETNAMES() {
    var sheets = SpreadsheetApp.getActive().getSheets();
    return sheets.map(function(sh) { return sh.getSheetName() });
}
[/vba]
Можно завести вспомогательный рабочий лист "СписокЛистов" и в его ячейку A1 поместить вызов этой маленькой функции:
[vba]
Код
=SHEETNAMES()
[/vba]
И тогда, начиная с этой ячейки с формулой, вниз по столбцу сформируется список рабочих листов текущего файла.

[p.s.]"Бонус-2": Подгоню тогда и примерную формулу.[/p.s.]И вообще лист "СписокЛистов" можно использовать как некое рабочее место (АРМ) для формирования обновленного текста формулы.

Итак, в соседнем столбце B напишем слово "нет" напротив имен тех листов, которые не должны участвовать в формуле.

Далее в любой ячейке листа "СписокЛистов" правее столбцов A и B (для них мы уже нашли применение), допустим, в ячейке D1 пишем такую формулу, формирующую текст нашей рабочей формулы:
[vba]
Код
=LET(
shList;  FILTER('СписокЛистов'!A:A; 'СписокЛистов'!A:A<>""; 'СписокЛистов'!B:B<>"нет");
refs;    MAP(shList; LAMBDA(sh; "'" & sh & "'!A1:B150"));
"=QUERY({" & JOIN("; "; refs) & "}; ""select Col1, sum(Col2) group by Col1 label sum(Col2) ''"")"
)
[/vba]
Теперь всё, что останется сделать после добавления нового листа/листов - скопировать сформированный текст из ячейки D1 и заменить им рабочую формулу.

Автор - Gustav
Дата добавления - 04.06.2023 в 15:11
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!