Работа в Google Таблицах. Кейсы, решения и угар. админы: @namokonov @r_shagabutdinov @IT_sAdmin оглавление: goo.gl/HdS2qn заказ работы: teletype.in/@google_sheets/sheet_happens купить рекламу: https://telega.in/c/google_sheets РКН: clck.ru/3F3u9M
Конкурсы? Конкурсы!
Друзья, кто выведет английский алфавит и кириллицу формулой (или пользовательской функцией) получит в нашем чате +10 кармы.
Давайте свои варианты в комментарии.
Наш чат: @google_spreadsheets_chat
🤖 Боты, деньги, n8n — канал, где на реальных кейсах показываем, как зарабатывать и экономить с помощью автоматизации.
Если вы используете Google Таблицы и Apps Script — значит, уже в теме автоматизации. А n8n поможет усилить этот подход: подключать CRM, платёжки, формы, Telegram, Notion и другие сервисы в одной цепочке — без кода и бесплатно.
Это как визуальный конструктор процессов, где без кода можно собирать связки из десятков сервисов.
📌 Автоматическая выгрузка платежей
📌 Обновление остатков и прайсов
📌 Уведомления, рассылки, отчёты
📌 И даже боты, которые приносят доход
В канале:
— адаптированные треды с Reddit
— рабочие схемы на русском
— фокус на деньги, время и простоту
👉 Подпишитесь на «Боты, деньги, n8n» — чтобы получить максимум пользы от данных и процессов.
Реклама. ООО "ЭР Софт". ИНН 7716509296. Erid:2VtzqvWZa6L
Книга "Магия таблиц" — третье издание в продаже!
— Более 100 функций с индексом (два языка, где работает — Excel/Google, на каких страницах встречается)
— 1 фотография кота
— Сотни скриншотов
— 50 файлов с примерами
— Издание №3
— Уже более 500 отзывов на разных площадках со средними оценками 4.8-5.0
— 528 страниц
Третье издание уже в продаже:
Озон
WB
Издательство
6 из 13 уроков второго потока позади!
Друзья, прошли уже 6 из 13 уроков второго потока обучения скриптам на Google Apps Script. Спасибо каждому участнику - именно ваша вовлечённость и интерес делают курс живым и насыщенным!
Покажем лучшие работы наших студентов на канале.
Пока что открыт приём заявок на:
– разработку скриптов (под Ozon, Wildberries, другие API),
– генерацию ответов с помощью скриптов,
– персональное сопровождение (обучение) по интересующим вас темам.
Пишите @namokonov
Ссылка на формулы из кода Таблицы, их 606
🎁 Если кто-то найдет, какая формула работает кроме известных и классических – начислим +10 кармы в нашем чате
На картинке формула =DUCKHUNT()
Наши ребята, коллеги, друзья — со многими мы общаемся ещё с тех времён, когда был жив мессенджер от Google (давно и благополучно закрывшийся).
Вместе осваивали Telegram, когда он ещё не был в мейнстриме, когда это казалось чем-то экспериментальным и новым.
А вот и каналы, которые выросли из этого опыта:
@gasru — про скрипты от Иванова и Митяйки
@GoogleSheets_ru — про Таблицы и скрипты
@STMSol — тоже про Таблицы и скрипты
@MaksymStoianov — авторский канал от Максима
@contributor_pw — разработка и автоматизация
@ZiGoomul, @ZiGoomul_GoogleApps, @ZiGoomul_GAS — Таблицы, боты и немножко магии
@GDS_chat — всё про Google Data Studio
@BigQuery — когда название говорит само за себя
@lemur_excel — канал нашего любимого соавтора Рената, который ведёт его вместе с котом редкой (и продуктивной!) породы
@WorkSmartPartyHard — пока Ренат отдыхает, мудрый Лемур делится лайфхаками продуктивности
👀 И, конечно же, наши:
@google_sheets — канал про Таблицы и скрипты, с вами с 2017 года
@google_spreadsheets_chat — наш уютный чат, велком!
Открыли подписчикам канала доступ к новой книге Системы Финансовый директор — сборнику «Мастер-классы по Ехсеl для финансиста: по задачам и должностям». В одной книге собрали самые популярные приемы — короткие и четкие видео помогут быстро освоить новые навыки и «прокачать» имеющиеся:
✅работа с формулами
✅преобразование данных
✅фильтры и сортировка
✅сводные таблицы
✅динамические и связанные списки
✅нестандартные способы визуализации отчетов, кастомные графики и диаграммы
✅приемы для прогнозирования
✅приемы план-факт и сценарного анализа в Excel.
Для удобства добавили приемы в Excel по должностям: для главного бухгалтера, руководителя ПЭО, финансового менеджера и контролера.
🔔 Чтобы получить сборник, оставьте заявку по ссылке: https://clck.ru/3MQEuz?erid=2W5zFHWBJdN
#реклама
О рекламодателе
Друзья, а вас больше!
А у нас в канале больше полезного контента :)
Пробусти, нас, пожалуйста t.me/google_sheets?boost
Формат личного обучения
Друзья, когда мы набирали последнюю группу, мне в личку пришло несколько вопросов вроде:
"А можно не в группе, а индивидуально, только с вами?"
"Заказчики" или история про Андрея Галетку
Есть особая категория людей, которые неделями и даже месяцами обсуждают потенциальный заказ: задают вопросы, уточняют детали, обещают "вот-вот прислать ТЗ" — и исчезают.
Не отказываются, но и не начинают. Это не клиенты, а вечные «на грани».
Работа с такими — бесконечное ожидание без результата.
На скриншоте — малая часть переписки с неким Андреем Галетко.
Таких за нашу практику было немало, и мы уже хорошо научились отличать тех, кому действительно нужно решение, от тех, кто просто тратит наше время.
Зачем они это делают — остаётся загадкой, но мы не будем её разгадывать. У нас и без того хватает настоящих, интересных задач.
🚀 Если вам нужно реальное вашей решение — пишите @namokonov.
PS В комментариях переписка с ним аж с 2020 года
СУММЕСЛИМН по выбранному товару (поиск строки с помощью ПОИСКПОЗ)
На прошедшем в выходные тренинге по формулам обсуждали вот такую задачку: нужно просуммировать данные за выбранный год и только по штукам или деньгам. А таблица устроена так (плохо, но это жизнь), что в ней есть столбцы со штуками и деньгами попарно. Она не плоская.
Как быть?
Использовать СУММЕСЛИМН / SUMIFS, благо в условиях функции можно использовать символ подстановки (* = любой текст). И благо диапазоны суммирования и условия могут быть горизонтальными, а не только вертикальными.
В нашем случае переменная часть нужных заголовков — это месяцы. Они меняются. А нужный показатель (штуки или деньги) — нет. Соответственно, если нам нужны все продажи в деньгах за 2024 год:
=СУММЕСЛИМН(2:2;1:1;"Деньги*2024")
=СУММЕСЛИМН(2:2;1:1;"Штуки*")
ПОИСКПОЗ(нужный товар;список товаров;0)
ПОИСКПОЗ(A11;A1:A7;0)
ПОИСКПОЗ(A11;A1:A7;0) & ":" & ПОИСКПОЗ(A11;A1:A7;0)
=СУММЕСЛИМН(ДВССЫЛ(ПОИСКПОЗ(A11;A1:A7;0) & ":" & ПОИСКПОЗ(A11;A1:A7;0));1:1;B10)
=LET(строка;ПОИСКПОЗX(A11;A1:A7);
СУММЕСЛИМН(ДВССЫЛ(строка&":"&строка); 1:1 ;B10))
Глубокие интеграции с озон / вб, к примеру - автозаказа товаров
Друзья, был у меня один из клиентов по вб (звали его Иван)
Мы для него сделали решение для автозаказа новых позиций (то есть, мы смотрели что было продано, сколько у нас оставалсь каждый день, хитро копили эти остатки и далее выводили ему сколько и чего ему нужно заказывать на следующей неделе
Таких решений мы сделали много и по заказам и по рекламе, поэтому помните, Таблицы - это не просто возможность загрузить конкретный отчет из ВБ, скажем, коммиссии, это возможность полностью сделать свой бизнес автоматическим и заказать столько товаров сколько их нужно заказать.
Пишите @namokonov, все расскажу
LAMBDA в квадрате: получаем одной формулой сводку по опросу с любым количеством столбцов.
Дано: есть много опросов из гуглоформ — нужно иметь возможность быстро посмотреть статистику ответов по каждому столбцу во многих таблицах, в идеале просто вставив формулу. Причем формулу хочется вставлять в любую ячейку, не меняя никаких ссылок.
Решение:
Начинаем с того, что получаем диапазон с помощью СМЕЩ / OFFSET: отталкиваемся от ячейки B2, считаем с помощью СЧЁТЗ / COUNTA, сколько в первой строке заголовков и в первом столбце значений, чтобы понять ширину и высоту диапазона.
Обращаемся к каждому столбцу диапазона через BYCOL. Столбец у нас будет скрываться под переменной col. Что мы делаем с каждым столбцом?
Мы производим манипуляции с каждым уникальным значением (ответом) из этого столбца — UNIQUE(col), отправляя это в функцию MAP. Каждое значение из столбца будет у нас в переменной ans.
Что мы с ней делаем? Возвращаем ее как есть, добавляем разделитель по вкусу и добавляем самое главное — сколько раз встречается этот ответ (СЧЁТЕСЛИ / COUNTIF)
= BYCOL (СМЕЩ($B$2;0;0; СЧЁТЗ($A$2:$A); СЧЁТЗ($1:$1)-1);
LAMBDA(col; MAP(UNIQUE(col); LAMBDA(ans; ans & ваш_разделитель & СЧЁТЕСЛИ(col;ans)))))
= BYCOL (OFFSET($B$2;0;0; COUNTA($A$2:$A); COUNTA($1:$1)-1);
LAMBDA(col; MAP(UNIQUE(col); LAMBDA(ans; ans & ваш_разделитель & COUNTIF(col;ans)))))
Друзья, мы постепенно завершаем набор на курс — завтра уже второй урок 📚
Ниже прикрепляю его план.
Если всё же решите присоединиться — это можно сделать сегодня или завтра.
Позже, увы, не получится: важно, чтобы все шли в одном темпе с группой 🚶♂️🚶♀️
План второго урока, друзья:
1. Вспоминаем, что было на первом уроке:
— переменные и их типы,
— присвоение значений,
— массивы и объекты.
2. Разбираем конструкции if и if...else:
— как проверять условия и выполнять код, если условие выполняется или нет.
3. Изучаем циклы for и for...of:
— учимся с их помощью изменять элементы исходного массива.
4. Познакомимся с методом .map():
— создаём новый массив, основываясь на старом.
5. Практика с циклами:
— находим номер последней заполненной строки,
— считаем сумму всех значений в массиве,
— собираем строку из элементов, подходящих под условие (if).
Ну что, целых четыре скрипта про группировки от подписчицы админа нашего чата Елизаветы
Не знаю как у вас, но у меня на работе обожают таблицы со структурой 🙈 (это когда строки можно свернуть, развернуть по нажатию кнопки ➕/➖).
Эти отчеты я получаю автоматически из 1С уже в нужной форме.
Но… 🦦 иногда разработчики не поспевают за всеми пожеланиями конечных пользователей отчета и тогда возникает необходимость из строк (подложка) собрать эту структуру.
Именно для себя я и написала этот скрипт, который может быть полезен и кому-нибудь из вас.
1) Для работы этого скрипта данные должны быть организованны определённым образом - отсортированы по первому и второму столбцу.
2) Скрипт группирует строки по уровню 1, в примере это
покупатель. А затем по уровню 2 – место покупки.
Как использовать множественный выбор в формулах Google Таблиц
Недавно в Google Таблицах появилась возможность множественного выбора значений из выпадающего списка. Рассказываем, как это можно применить в формулах.
Для примера возьмём список всех городов России, который мы выгрузили в предыдущем посте. На его основе покажем, как с помощью функции FILTER можно отобрать только те города, в названии которых встречаются выбранные буквы.
Мы добавили выпадающий список с буквами русского алфавита (от А до Я). При этом:
• если включён чекбокс, поиск идёт без учёта регистра (буквы в любом виде),
• если чекбокс выключен — ищем только заглавные буквы.
Таблица
А вот как выглядит формула:
=IFNA(
SORT(
FILTER(
'Россия'!A1:AF;
REGEXMATCH('Россия'!A1:A; IF(B2; "(?i)"; "") & JOIN("|"; SPLIT(B1; ", ")))
);
2;
FALSE
);
"—"
)
Собираем данные из нескольких листов сразу с помощью Sheets API Batch
бета-версия нового собиратора
Загружаем в Таблицу все города России
Друзья, подписчики — нашли мы на просторах интернета очень полезную штуку:
🔗 Открытая ссылка без авторизации
А там — весь список городов России! И не просто список, а с координатами, населением, округом и субъектом. Всё как мы любим:
Пример объекта:
{
"coords": {
"lat": "68.96667",
"lon": "33.08333"
},
"district": "Северо-Западный",
"name": "Мурманск",
"population": 270384,
"subject": "Мурманская область"
}
Решаем список формул!
У нас есть 606 названий — а значит, 606 потенциальных формул.
Что с ними делать?
Конечно же:
1. Добавить = и ()
2. Вставить всё это в Google Таблицу скриптами
3. Посмотреть, что эти формулы будут выводить на самом деле
Извлекаем все формулы из кода Таблицы! Формулы!
Друзья, Google Таблицы – это на самом деле полноценный веб-сайт, только большой и сложный.
Мы уже показывали, как извлекать из текста страницы все формулы. Давайте повторим:
Откройте любую таблицу Google.
Откройте консоль браузера (нажмите F12).
Вызовите поиск по консоли: на macOS – CMD + OPT + F, на Windows – CTRL + SHIFT + F.
Введите название нужной функции, чтобы найти её в коде.
В моём видео я подробно показывал, как дальше работать с найденным.
Параллельный запрос данных с помощью fetchALL в Google Apps Script
В этом примере мы будем одновременно запрашивать 10 стихотворений с сайта. Используем UrlFetchApp.fetchAll
, чтобы ускорить процесс за счёт параллельных запросов.
📹 В видео — подробный разбор скрипта, объяснение каждого шага и демонстрация результата.
💡 Также:
Продолжаю набор на личное обучение по программированию. Заинтересованные уже есть, мест немного, кто действительно хочет – пишите.
Спасибо огромное! Осталось буквально 8–10 бустов — дожмём чуть-чуть 💪
По контент-плану дальше такие идеи:
– Пишем бота, который отслеживает, сколько днем человек пьет, а сколько пропускает
– Продолжаем разбираться с ограничениями fetchAll в Google Apps Script:
цель — загрузить канал среднего размера за пару часов программно
Парсим сразу много постов из
@google_sheets и @runforhealth
Друзья, покоряем fetchAll (одновременный запрос многих ссылок) и парсим пару сотен постов из нашего канала и прекрасного канала о беге от Рената Шагабутдинова
Таблица со скриптом
Дробим слово (скриптами или формулами)
Друзья, берем слово "инновации"
Вытащите из него три последние буквы, пишите в комментарии варианты.
Можно скрипты, можно формулы, новые варианты награждаются +7 к карме.
ВБ / WB, устанавливаем честный знак телеграм ботом
Друзья, недавно наши дорогие ягоды заставили к каждому отправленному товару приклеивать честный знак и регистрировать его в системе.
Для этого нужно сделать ряд действий в WB API, достать nmID, по нему достать qrCode и к нему уже привязать честный знак. Но это всё не важно — вся эта кухня работает под капотом, вам об этом думать не нужно.
У нас есть для этого готовый бот и вся обвязка для ВБ API, поэтому кого интересует честные знаки и их отправка – пишите мне, обсудим, сможем сделать для вас подобное решение.
@namokonov
Устали самостоятельно тыкаться в Excel или мучительно изучать SQL и Python?
Это объявление для всех начинающих аналитиков и тех, кто пока смотрит в сторону метрик, цифр и анализа.
📌 2-6 июня пройдет бесплатный интенсив «Введение в аналитику данных» от школы Changellenge >> Education.
Там всё, что нужно, чтобы разобраться с азами в работе с данными:
🔹 Базовый функционал SQL, Excel и Python,
🔹 Практика на реальных базах данных,
🔹 3 практических кейса, подобные тем, что аналитики решают ежедневно в работе,
🔹 Работа с 3 экспертами-практиками из Wildberries, VK и банка Точка!
5 дней в специальном телеграм-канале вы будете смотреть видео от экспертов и получать задания. И всё это время рядом будет куратор, который подскажет, если возникнуть вопросы.
✅ Можно получить сертификат об обучении.
✅ Каждый участник получает набор бонусов, среди которых — грант до 60 000 рублей на курсы по аналитике.
Бонусы и программа интенсива указаны на сайте.
📌 Переходите, изучайте, регистрируйтесь до 2 июня: https://u.to/r4FHIg
Реклама. ООО «Высшая школа аналитики и стратегии». ИНН 7716917009. erid: 2VtzqvTodyX
Комиссии ВБ
Друзья, позвольте замолвить за комиссии пару слов. Портал ВБ недавно поднял комиссии на товары для продавцов и мы для вас написали простой скрипт, который эти комиссии загружает прямо в Таблицу.
Метод официального API: https://dev.wildberries.ru/openapi/wb-tariffs#tag/Komissii/paths/~1api~1v1~1tariffs~1commission/get
Чтобы получить токен:
1) Войдите на https://seller.wildberries.ru
2) В левом меню выберите: Настройки → Доступ к API
3) На вкладке "Доступ к API" найдите кнопку «Создать новый ключ».
4) Вставьте ключ в код в аргумент token вместо 1
const token = '1';
function paste() {
const ss = SpreadsheetApp.getActive(); // Получаем активную Google-таблицу
const sh = ss.getSheetByName('Комиссии'); // Получаем лист с названием "Комиссии"
const arr = commissions(); // Вызываем функцию, получающую данные по комиссиям
sh.clearContents(); // Очищаем содержимое листа перед вставкой новых данных
sh.getRange(1, 1, arr.length, arr[0].length) // Определяем диапазон, соответствующий размеру массива
.setValues(arr); // Вставляем данные в указанный диапазон
};
function commissions() {
const url = 'https://common-api.wildberries.ru/api/v1/tariffs/commission'; // URL API для получения комиссий Wildberries
const options = {
method: 'get', // Метод запроса — GET
headers: {
'Authorization': token // Авторизационный заголовок с токеном
},
muteHttpExceptions: true // Не выбрасывать исключения при ошибках HTTP (например, 404)
};
const response = UrlFetchApp.fetch(url, options); // Отправляем HTTP-запрос и сохраняем ответ как строку
let json = JSON.parse(response.getContentText()); // Преобразуем строку в JSON
console.log(json); // Выводим полученный JSON в консоль
json = json.report; // Извлекаем массив объектов из ключа "report"
const headers = Object.keys(json[0]); // Получаем список названий столбцов (ключи первого объекта)
console.log(headers); // Выводим полученный список в консоль
const arr = json.map(j => headers.map(h => j[h])); // Преобразуем массив объектов в массив массивов значений
return [headers, ...arr]; // Возвращаем итоговый массив: первая строка — заголовки, далее строки с данными
};
Краснодар
Завершился чемпионат России по футболу и произошло хорошее футбольное чудо – чемпионом РПЛ в этом сезоне стала команда Краснодар.
В коротком видео мы покажем, как с помощью одной Google Таблицы и простого скрипта можно выгрузить итоговую турнирную таблицу РПЛ прямо из веб-сайта.
Таблица со скриптом
🚀 Наш курс
📗 Канал и Чат
🏄 Заказ работы у нас
📚 План нашего курса по Google Apps Script (прошел только один урок, набор продолжается)
1. Сначала база — учимся думать как программист и использовать возможности языка:
🧱 Первый урок:
— Переменные
— Типы данных
— Массивы и объекты
— Функции
— Среда разработки
🔁 Второй урок:
— Условия: if, if...else
— Циклы: for, for...of
— Метод .map()
— Изменяем массивы и объекты через циклы
🧮 Третий урок:
— Методы .filter() и .reduce()
— Примеры реальных задач
— Пишем скрипт, который фильтрует и вставляет данные в Google Таблицу
📊 2. Работа с Google Таблицей через Apps Script
— Чтение и запись данных из разных Таблиц
— Форматирование ячеек, строк и столбцов (цвета, шрифты, выравнивание)
— Триггеры (onEdit) — запуск кода при изменении таблицы
— Запуск скриптов по расписанию (таймеры, time-driven triggers)
📁 3. Работа с Google Диском
— Создание в Таблице реестра файлов
— Управление папками и правами
📆 4. Работа с Google Календарём
— Выгрузка событий
📬 5. Работа с Gmail (Google Почтой)
— Выгрузка писем
— Отправка писем из скрипта
🌐 6. Работа с внешними API из скриптов
— Wildberries, остатки, заказы
— OZON, отчёты, карточки товаров
— ChatGPT API, подключаем прямо к Таблице
🧩 7. Реальные задачи от заказчиков (практика)
— Создание документов из таблиц
— Преобразование Таблиц и Документов в PDF и автоматическая отправка на почту
— Импорт Excel/XLSX файлов (остатки, продажи), сбор на один лист и получение сводной
💸 Стоимость курса — 100 000 ₽
📌 Бронь, оплата , вопросы — пишите @namokonov или @elizaveta_sh_komarova
🧔♂️ Для нашего древнейшего клиента — барбера Алексея из Казани (и всех, кто в теме):
В Google Таблице — два скрипта:
1️⃣ Вытаскиваем из Ozon все товары 🛒
2️⃣ Достаем список всех складов 📦
Работают чётко, как ножницы в руках опытного мастера 💇♂️
Код с комментами отдельно
function w() {
// URL для запроса списка складов с Ozon API
const url = 'https://api-seller.ozon.ru/v1/warehouse/list';
// Настройки для POST-запроса
let params = {
method: 'post', // Метод запроса
contentType: 'application/json', // Тип содержимого
'headers': {
'client-id': Client_Id, // Идентификатор клиента (ваш Ozon Client ID)
'Api-Key': Api_Key // Ключ API (ваш Ozon API Key)
}
};
// Выполняем запрос к API и получаем объект HTTPResponse
let r = UrlFetchApp.fetch(url, params);
// Преобразуем ответ из строки JSON в объект JavaScript
r = JSON.parse(r);
// Выводим результат в консоль (для отладки в Apps Script IDE)
console.log(r);
// Получаем заголовки из первого объекта результата (ключи объекта)
let headers = Object.keys(r.result[0]);
console.log(headers); // Выводим заголовки в консоль (для отладки)
// Преобразуем массив объектов в двумерный массив по заголовкам
let arr = r.result.map(row => headers.map(h => row[h]));
// Добавляем строку заголовков в начало массива
arr = [headers, ...arr];
// Логируем итоговый массив (для отладки)
Logger.log(arr);
// Получаем активную таблицу Google Sheets
const ss = SpreadsheetApp.getActive();
// Получаем лист с именем 'w'
const sh = ss.getSheetByName('w');
// Очищаем всё содержимое листа перед вставкой новых данных
sh.clearContents();
// Получаем диапазон по размеру массива и вставляем данные
sh.getRange(1, 1, arr.length, arr[0].length).setValues(arr);
};