Google Таблицы
62.7K subscribers
461 photos
147 videos
8 files
835 links
Работа в Google Таблицах. Кейсы, решения и угар.

админы:
@namokonov
@r_shagabutdinov
@IT_sAdmin

оглавление: goo.gl/HdS2qn
заказ работы: teletype.in/@google_sheets/sheet_happens
купить рекламу: https://telega.in/c/google_sheets

РКН: clck.ru/3F3u9M
Download Telegram
Media is too big
VIEW IN TELEGRAM
Видеоурок для новичков: подготовка данных для сводной таблицы

В этом видео смотрим на типовые ситуации по подготовке данных к своднотаблицостроительству. Новичкам будет полезно и не только в контексте сводных. Темы такие:
— Ошибки, пробелы и Ctrl+H
— Объединенные ячейки, чтоб их
— Нетабличные данные с промежуточными заголовками во всю строку
— Проверка данных
— Объединение таблиц и бесконечный XLOOKUP

Это часть будущего курса по сводным таблицам в Google. Курс еще в процессе, пока предлагаем вам посмотреть этот урок — бесплатно, без регистрации и вэпээн 😎


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Друзья, когда-то мы писали про шутейную формулу, которая позволяет получать число прописью

=REGEXREPLACE(GOOGLETRANSLATE(BAHTTEXT(A1);"th";"ru");"бата?\.|батов \.";"")


Ну а сегодня про полноценный и проверенный (более 500 000 скачиваний с 2019 года!) инструмент для этого 🙂
Рекомендуем вам дополнение NUMBERTEXT маэстро Александра Иванова.

Помимо традиционного текстового представления, программа поддерживает перевод чисел в римские цифры и даже числа Сучжоу (китайскую систему счета).

Установить приложение можно по ссылке: https://workspace.google.com/marketplace/app/numbertext/505819167361

После этого во всех таблицах сможете пользоваться функциями
Можно выводить и суммы в определенных валютах! Для этого есть функция MONEYTEXT.
То есть следующая функция:

=MONEYTEXT("123"; "RUB")


Вернет "Сто двадцать три рубля".

Вот тут подробная справка:
https://contributor.pw/post/add-on-numbertext/
А еще можно просто ввести формулу

=NUMBERTEXT("help")



📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Получаем номер квартала из даты: разные варианты

К сожалению, для вычисления номера квартала функции нет ни в Excel любых версий, ни в Google Таблицах. Обычно номер квартала вычисляют составной формулой, опираясь на номер месяца. Например, такой.

Вариант 1, классический

=ЦЕЛОЕ ((МЕСЯЦ (ячейка с датой) + 2)/3)

Для января (месяц = 1) формула будет возвращать единицу:
(1 + 2)/3 = 1
А для августа (8):
(8 + 2)/3 = 3,(3)
Дробную часть мы убираем с помощью функции ЦЕЛОЕ / INT
и за счет этого получаем целое число 3 для августа.

ЦЕЛОЕ ((8 + 2)/3) = ЦЕЛОЕ (3,(3)) = 3


Вариант 2, с извращениями

=ВЫБОР (МЕСЯЦ (дата);1;1;1;2;2;2;3;3;3;4;4;4)

Функция ВЫБОР / CHOOSE возвращает один из своих аргументов по порядковому номеру, заданному в первом аргументе. То есть если МЕСЯЦ у нас будет равен единице, двойке или тройке, то ВЫБОР вернет второй, третий или четвертый аргумент — это у нас единицы.

Вариант третий, через LOOKUP

=ПРОСМОТР (МЕСЯЦ(A4); {1;4;7;10};{1;2;3;4})

Здесь мы ищем ближайшее наименьшее число к номеру месяца в массиве функцией ПРОСМОТР. И получаем соответствующий номер квартала из другого массива.


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
This media is not supported in your browser
VIEW IN TELEGRAM
Связанные выпадающие списки на формулах

Вообще-то уже очень давно мы публиковали скрипт для создания связанных списков — вот ссылка.
Но для разнообразия предлагаем также слегка колхозное решение на формулах 🤠Если вы не любите скрипты.
По сути, мы создаем таблицу с таким же количеством строк, как основная. И в ней в каждой строке формируем данные для выпадающего списка нижнего уровня (сотрудники, например), куда отправляем значения исходя из выбранного значения в выпадающем списке верхнего уровня (отдел, например)

Алгоритм:
— Формируем в укромном месте список значений нижнего уровня для каждого выбранного значения в основной таблице. В нашем примере — для каждого выбранного отдела в основной таблице получаем список сотрудников этого отдела (то есть горизонтальный массив значений на каждое выбранное в основной таблице значение верхнего уровня)
Вариант формулы:

=MAP(столбец со значениями первого уровня ;LAMBDA(x; IFNA(ТРАНСП(ИНДЕКС(таблица со списками ;; XMATCH(x;названия списков первого уровня)));"")))


— Создаем проверку данных и в качестве диапазона ссылаемся на первый список (для первого значения), делаем ссылку относительной (то есть у номеров строк нет долларов) и получается, что в каждой строке забираем список для каждого очередного выпадающего списка.
Ссылка в проверке данных:
='Вспомогательный лист'!$A2:$Z2 (столбцы можно взять с запасом)


Куча лишних данных, но работает.

Таблица с примером


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Проверяем, был ли у сотрудника хотя бы один 14-дневный отпуск
Интересная задача от участницы практикума "Магия формул", мы решили вынести решение на всех вас :)
Итак, в таблице с сотрудниками единицами отмечены дни отпуска. Надо понять, была ли у сотрудника приятная цепочка в 14 или более таких дней.

Алгоритм такой:
1. Убираем заголовки с месяцами (чтобы остались только дни; нам не нужно считать итог месяца отдельным днем, его надо пропустить) через функцию FILTER. Можно исключать конкретное слово "<>итого" или оставлять только числа ISNUMBER(...) )
2. Далее в полученном массиве идущих подряд дней с помощью SCAN считаем нарастающий итог — число идущих подряд единиц. Если есть единица, прибавляем к накопленному итогу ее, иначе обнуляем счетчик)
3. В результате получаем массив с накопленными днями отпусков — с помощью COUNTIF проверяем, есть ли там хоть одно число от 14 включительно.
4. Напоминаем вам, что логические значения TRUE и FALSE, если они выдаются формулами, можно показывать как флажки.

Вариант для одной строки (на скриншоте в строках с 9-й видно, что возвращает функция SCAN, то есть все, что внутри COUNTIF / СЧЁТЕСЛИ) — массив накопленных значений, в котором мы потом ищем числа от 14.


=COUNTIF(SCAN(0;FILTER(строка с днями сотрудника;строка заголовков<>"итого"); LAMBDA(acc;value;IF(value;acc+value;0)));">=14")<>0


Еще вариант — одной формулой все сотрудники:

=BYROW(SCAN(;IFNA(HSTACK(;FILTER(D3:NQ7;ISNUMBER(D2:NQ2))));LAMBDA(acc;z;IF(z="";;acc)+z));LAMBDA(zz;IF(MAX(zz)>13;TRUE;FALSE)))


Ссылка на таблицу с вариантами формул

Не забывайте отдыхать, друзья! И предлагайте свои варианты решения задачи🤠


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Google Таблицы
Создаем пакет документов для оформления нового сотрудника прямо из Google Таблицы Коллеги, привет! Наш подписчик Василий поделился с нами своим решением, которое он написал на GAS-скриптах. Василий решал задачу "у меня есть шаблон в Google Документе, в нём…
Создаем пакет документов для оформления нового сотрудника прямо из Google Таблицы

Друзья, напоминаем про отличный пост – из Таблицы скриптами формируем несколько Google Документов с договорами исходя из введенных данных.

Простое решение, которое каждый может применить у себя, бесплатно и без оплаты звездами 🙂
ЛЮБИМЫЕ СКРИПТЫ НАШЕГО КАНАЛА

Друзья, посмотрите, вдруг вы пропустили что-нибудь полезное:

— СОБИРАТОР 4.0, интерфейс для сбора других Таблиц

🧞‍♂️ПРЕВРАЩАТОР Листа Таблицы в xlsx / pdf / csv

— ОТПРАВЛЯТОР, отправляем ваши отчеты в теле письма по расписанию

— ОТПРАВЛЯТОР 2, создаём из Таблиц PDF и JPG и рассылаем в Телеграм по заданному расписанию

— ДОПУСКАТОР 2, убираем из файлов всех пользователей кроме себя и закрываем доступ по ссылке.

— ЗАМЕНЯТОР, заменяем значения по словарю в выбранных Таблицах

— ЗАКРЫВАТОР, скрипт автоматического закрытия прошедших дней

— ДОСТАВАТОР, берём из кода веб-страниц регуляркой нужное

— Скриптами определяем, когда освободится домен

— Запускаем скрипт по чекбоксу (работает и из мобильной версии Таблиц)

— DRIVE COLUMBUS, смотрим на свой Google Диск и управляем им прямо из Таблицы

— С помощью скрипта даём доступ к другой Таблице, чтобы IMPORTRANGE заработал сразу

— Защищаем скрипты от редактирования

— Регулярный бэкап Таблиц в формате XLSX в телеграм!

— Скрипт. Распознаем текст на изображениях. OCR в Google Docs

— Скрипт onEdit(), реагирующий на изменения и отправляющий письма (или триггер в триггере)
Скрипт, загружаем письма вашего GMAIL-аккаунта в Таблицу

— Важный скрипт. Связанные выпадающие списки из кэша

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Защита от копирования или onOpen убиваюший Таблицы :)

Друзья, привет, сегодня у нас веселое пятничное решение, которое может позволить защитить Таблицы от копирования.

При копировании Таблицы (если не менять название файла) в названии будет слово Копия или Copy.

Мы воспользовались этим и написали простой onOpen скрипт, которому не нужна авторизация и который запускается при каждом открытии Таблицы.

Скрипт проверяет, есть ли слово копия (copy) в названии документа и если есть, то обращается к каждому листу, очищает его и вставляет "убивающую Таблицу формулу" на каждый лист в ячейку A1. Повторюсь – этому onOpen авторизация не нужна, он будет запускаться автоматически.

Таблица со злым onOpen (осторожнее 😁)


function onOpen() {
const ss = SpreadsheetApp.getActive();
const name = ss.getName();

if (/копия|сopy/i.test(name)) { //проверяем, есть ли в названии таблиц слово копия
ss.getSheets().forEach(sheet => {
sheet.clearContents();
sheet.getRange("a1").setValue('=SEQUENCE(9^9;9)');
});
};
};


PS Спасибо за хорошие идеи Лизе и Александру

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Google Таблицы
Защита от копирования или onOpen убиваюший Таблицы :) Друзья, привет, сегодня у нас веселое пятничное решение, которое может позволить защитить Таблицы от копирования. При копировании Таблицы (если не менять название файла) в названии будет слово Копия или…
Защита от копирования Таблицы 2 (или убиваем скопированную Таблицу с помощью onOpen)

И сразу же усиленная версия, смотрим не на имя Таблицы, а на ID, предварительно сохранив в скрипте ID исходной Таблицы:


const fatherId = '1ZGpm56aWV52x85lOTBI34BZVV-aU0-mXnkL-qC8t7AU';

function onOpen() {
const ss = SpreadsheetApp.getActive();

if (ss.getId() != fatherId) {
ss.getSheets().forEach(sheet => {
sheet.clearContents();
sheet.getRange("a1").setValue('=SEQUENCE(9^9;9)');
});
};
};


Попробуйте скопировать Таблицу так, чтобы onOpen не успел ничего сделать.

Спасибо нашим прекрасным подписчикам за идеи🏄
Курс по сводным таблицам Google Spreadsheets

Записал для вас курсец по сводным таблицам: от основ (зачем вообще сводные нужны и как построить сводную) до нюансов и деталей (как работают рассчитываемые поля, как правильно извлекать данные из сводной, как подготовить данные для сводной таблицы, в том числе сделать «анпивот» формулами, и многое другое).

Говорим и про визуализацию, и форматирование. Так что у вас будет все необходимое для создания отчетов (в том числе для предварительной подготовки данных).

Курс — это 20 видео с нормальным качеством и звуком, исходными и готовыми таблицами со всеми примерами, которые можно копировать и забирать себе для разбора или в качестве шаблонов.

Доступ к курсу сразу после покупки.
Доступ вечный.

Первые три дня продаж со скидкой курс будет стоить 2 900 ₽ до 16 апреля включительно. Далее цена вырастет.

Если вам не понравятся уроки, вы поймете, что не узнали вообще ничего нового и/или скажете, что качество видео/звука плохое — я верну вам 100% стоимости курса без вопросов в течение 2 недель после покупки.

Один из уроков мы выкладывали тут.

Подробная программа, скриншоты с примерами и покупка — все по ссылке:
https://shagabutdinov.ru/pivot_google
Функции баз данных позволяют суммировать/усреднять/дисперсировать/минимизировать и т.д. по большому количеству условий, заданных в ячейках

В примере: суммируем все виды Ipad Pro и Ipad Air — в Москве только на основном складе, а во всех остальных городах на любых складах, кроме "Брака"

Первый аргумент функции DSUM — диапазон с данными, второй — заголовок столбца, в котором суммируемые числа, третий — диапазон (массив) с условиями.

И вот сегодня про второй аргумент. Как его можно задать?
1. Как текст — ссылаемся на ячейку с заголовком или вводим прямо в формуле в кавычках
2. Как порядковый номер. Тогда либо указываем его в аргументе (но такая формула слетит при изменении порядка столбцов), либо можем искать номер по слову функцией XMATCH, например, если нас интересует слово "остаток" в заголовке (третий аргумент, равный двойке, включает работу символов подстановки в XMATCH — в старой MATCH они работали по умолчанию, но там нужно явно включить точный поиск, так что там третий аргумент был бы равен нулю):

=DSUM(данные; XMATCH("*Остаток*"; 1:1;2); условия)


Последний вариант будет работать и при изменении заголовка (если там останется искомое слово, конечно), и при изменении порядка столбцов.

Все четыре варианта по ссылке:
Таблица с примером


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Запись экрана 2025-04-18 в 13.46.34.mov
169.5 MB
Выпадающие списки нескольких уровней (скрипт, таблица и видео с с пояснениями)

Друзья, поднимаем тему выпадающих список в Google Таблицах

Для меня самая большая загадка, почему в Таблицах не сделали списки как в Excel, через формулу в проверки данных, ну да ладно

Мы показали в этом посте как сделать списки скриптами и кратенько рассказали про достаточно просто скрипт

🏄 (скоро анонсируем обучение) – мы уже 6 лет занимаемся программированием на Google Apps Script и решением бизнес-задач, поэтому нам пришла мысль не держать все в себе и jмы объявляем свой курс на тему программирования, также немножко затроненм телеграм ботов
Запись экрана 2025-04-20 в 12.52.35.mov
148.9 MB
Какую проблему решаем:  нерадивые (или слишком нетерпеливые сотрудники) вставляют данные в таблицы так, что ломают форматирование, то есть, формат ячеек, заливку.

Окей, пусть делают что хотят, мы ж напишем просто скрипт, который при открытии Таблицы будет восстановливать форматирование


Использовать будем Sheets Api, да, с помощью него можно не только загружать и вставлять данные в Таблицы, а еще делать с ним все, что угодно

А еще мы можем использовать batch update - это когда мы не идем в цикле по каждому листу, чтобы вставить форматирование, а вставляем его сразу и везде, этот способ покажем вам в другой раз :)

Таблица со скриптом

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Запись экрана 2025-04-21 в 09.37.38.mov
164.9 MB
onOpen - Ликвидатор


Используем простой скрипт onOpen (не треюущий авторизации!) удаляем все лишние листы, которые засоряют Таблицу и которые создали нерадивые сотрудники :)


Таблица с простым простым скриптом
всеформатирующий onEdit.mov
641.6 MB
onEdit(), который поправит косяки за другими

Друзья, бывало ли у вас такое, что вы делали Таблицу, старались, а потом набегают коллеги и быстренько ломают все форматы, выравнивания и тому подобное?

Мы продолжаем тему простых триггеров и показываем, как автоматически это можно решить с помощью скрипта onEdit().

🍉 А еще, в конце видео задание, первые трое верно ответивших получат +15 кармы в нашем чудесном чатике, который почти приблизился к 7000 учатников

Таблица с примером и скриптом


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Бот глупых шуток – видео, в котором показываю, как разверуть бота с нуля

Друзья, сделали с помощью chatgpt телеграм бота, который выводит случайную глупую шутку из 200 предварительно созданных.

Угадайте, какую важную роль выполнял chatgpt? Ну, конечно же, создавал список шуток, с остальным удалось справиться самостоятельно.

В видео я подробно рассказал про
— создание и редактирование бота в @botFather
— как развернуть бота как веб-приложение
– как создать вебхук, в котором мы соединяем токен бота и ссылку на наше веб-приложение;
– и коротко пробежался по небольшому коду


🍉 В который раз показываю телеграм бота развернутого на Таблицах (или как говорят наши заказчики "на эксельке") и каждый раз заново удивляюсь той мощи, которую заложили гугловцы в свои Google Docs.

Создать бесплатный сервер на базе бесплатного аккаунта gmail, развернуть его в Таблице или Документе, чтобы сервер 24/7 смотрел в сеть? ЛЕГКО! :)


🍉🍉 Наш платный курс по телеграм ботам подошел к концу и поэтому в мае запускаю личное обучение по прграммированию, следите за анонсами. Попозже расскажу про темы и формат.

Ну и код бота

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Собираем данные в виде ФИО+телефон по сотрудникам компании в одной ячейке

У вас есть база клиентов и данные о сотрудниках и их контактах. И вы хотите видеть всех сотрудников одной компании в одной ячейке.

Многие в такой ситуации вводят всю информацию в одну ячейку руками, благо можно переходить на следующую строку в ячейке с помощью Alt+Enter.

Но лучший путь - это создать отдельно реестр контактных лиц, где выбирать компанию из выпадающего списка (чтобы не было возможности ошибиться) и вводить в каждой отдельной строке одного человека с его контактами и другими нужными вам полями.
Тогда будет возможность фильтровать такой список, форматировать телефоны, создавать ссылки на адреса эл. почты и иначе взаимодействовать с этими данными.
А собрать и подтянуть данные по всем сотрудникам одной компании всегда можно с помощью QUERY или FILTER. Если нужно отформатировать при этом данные - например, номера телефонов - пригодится функция ТЕКСТ / TEXT.

Файл с примерами


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Удаляем лишние проекты из нашей Таблицы

Друзья, был у нас клиент, который старался под каждый скрипт в Таблице создать новый проект.

Именно новый проект, а не лист в проекте.

Показываем как избавиться от лишних проектов внутри одной Таблицы / Документы / где вы их еще сможете создать с помощью веб-интерфейса.

В следуюших уроках коснемся работы со скриптами используя script api, удалять / изменять скрипт с помощью скрипта - что может быть прекраснее :)