Google Таблицы
58.3K subscribers
425 photos
118 videos
4 files
770 links
Работа в Google Таблицах. Кейсы, решения и угар. № 4778354843.

контакты:
@namokonov
@r_shagabutdinov
@IT_sAdmin

оглавление: goo.gl/HdS2qn
заказ работы: teletype.in/@google_sheets/sheet_happens
чат: @google_spreadsheets_chat
Download Telegram
Убираем пустые ячейки из столбца / диапазона элегантно

Друзья, а у нас ведь не только сложные формулы, но и простые.

Нужно убрать пустые ячейки из диапазона и превратить его в строку или в столбец?

На помощь придут новые функции:


=torow(диапазон; 1)
=tocol(диапазон; 1)

Поэтому теперь вам необязательно использовать конструкцию вида
=filter(диапазон; один столбец из диапазона <>""), всё можно сделать проще.

Привыкайте к новым функциям и используйте!

---

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

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

Друзья, а мы обновили модель, которая рисует картинки в нашем ИИ-боте, теперь там dall-e-3.

Пользуйтесь, напоминаю, что в боте 10 бесплатных запросов каждый месяц, нужно больше – 500 рублей, их можно также оплатить через бота.

Про бота / Пишем ботом простые скрипты / Отвечаем ботом на отзывы / Работа с текстом / Как писать промпты!
Давайте продолжим тему ПРОСМОТРов. И поговорим о старой функции LOOKUP / ПРОСМОТР.

Функция по синтаксису похожа на новую XLOOKUP / ПРОСМОТРX, о которой мы писали выше. Но она как раз была давно — в Excel даже есть примечание, что функция LOOKUP / ПРОСМОТР остается для совместимости. И у нее есть минусы :она требует постоянной сортировки данных, не особо подходит для поиска текста.

Поэтому лучше использовать VLOOKUP, XLOOKUP или INDEX+MATCH. Во всяком случае, для объединения таблиц по текстовому ключу.
Но все же в некоторых экзотических случаях LOOKUP используют до сих пор. Например, для нечеткого текстового поиска, когда нужно находить в названиях какое-то слово и заменять все значения с этим слово на одно и то же типовое (исправлять разные наименования компаний или товаров, например) — такой пример есть в статье.

https://teletype.in/@renat_shagabutdinov/wFymDX7fAN4
Немного формульно-датового многоэтажного ада под конец года. Выдаем одной формулой все недели года в формате "30 янв-5 фев"

В деле почти все функции Google Таблиц 🤠LET, LAMBDA, QUERY, SEQUENCE, NETWORKDAY.INTL, MIN, DATE, MONTH, YEAR, DAYS, WEEKNUM, WEEKDAY, BYROW, TRANSPOSE, CHOOSECOLS, TEXT, LEFT, REGEXREPLACE, IF, ARRAYFORMULA в тех или иных лютых комбинациях

Друзья, наверняка у вас есть отчеты и планы, где в заголовках идут недели. Если для вас привычен формат с первым и последним днем недели, забирайте формулы от нас и маэстро нашего чата (Михаил и Игорь, спасибо!) — они выдадут все недели года одной строкой в таком формате.

Три варианта в таблице по ссылке.

— в первом случае недели идут с первого понедельника, последняя неделя будет с первыми днями следующего года ("30 дек - 5 янв"). Выдаются недели за текущий год (можете поменять YEAR(TODAY()) на фиксированный год, если нужно)
— во втором случае недели тоже с первого понедельника, последняя неделя до 31 декабря ("30-31 дек"), год выбирается в ячейке
— в третьем случае все недели (включая ту, что до первого понедельника), последняя до 31 декабря, год в ячейке

С наступающим Новым годом! Пусть в этих самых отчетах у вас все будет хорошо в следующем году 🤠Спасибо, что читаете нас!
This media is not supported in your browser
VIEW IN TELEGRAM
Автоматизация елки

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

В ветках у неё формула, обеспечивающая для каждой ячейки свой цвет:
=INDEX({"🟠";"🟡";"🟢";"🔵";"🟣";"🟤"};RANDBETWEEN(1;6
);1)

А зажжет ёлку скрипт, он при каждом открытии Таблицы, сто раз, в цикле, вставит в ячейку A1 число, тем самым запуская пересчёт формул, в частности RANDBETWEEN:




function onOpen() {
for (var i = 0; i < 100; i++) {
SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue(i);
SpreadsheetApp.flush();
};
};


Таблица с ёлкой

Друзья, с наступающим новым годом, берегите себя, встречаемся здесь же в 2024! Счастья и мира!

PS А еще у старожила нашего сообщества Каната сегодня день рождения, поздравляем! 🌟

---
🌲 Оглавление канала: ты-дыц
🌲 Самый табличный чат на свете: бадабум
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Табличное, мощное, лучшее за 2023 год

То, про что мы хотим вам напомнить из репертуара прошедшего года.

Оглавление Таблицы скриптами
t.me/google_sheets/1074

Достаем изображения из Google и Яндекса формулой
t.me/google_sheets/1091
И из Рамблера
t.me/google_sheets/1296

Новые функции в Google Sheets - статья Михаила Смирнова
telegra.ph/Novye-funkcii-v-Google-Sheets-2023-02-02-02-07

Собираем данные с разных листов в Excel и Google Таблицах (список листов - динамический)
teletype.in/@renat_shagabutdinov/lambdasheets

Главная статья импорта. Руководство по функции IMPORTRANGE
https://teletype.in/@renat_shagabutdinov/importrange

Выводим все даты текущего месяца формулой
t.me/google_sheets/1113

Импорт данных из всех Google Таблиц в списке с помощью формул
teletype.in/@renat_shagabutdinov/IMPORT-LAMBDA

Телеграм + Google Таблицы, наши решения
t.me/google_sheets/1141

Запрашиваем из Таблиц ИНН и получаем название компании
t.me/google_sheets/1159

Вычисляемое поле в сводной: умножаем сумму на одно значение
t.me/google_sheets/1233

Случайная жеребьевка команд с условием
t.me/google_sheets/1250

Парсим Ютуб ⚡️
t.me/google_sheets/1285

ВПР-им с разных листов
t.me/google_sheets/1306

Схватка двух... ВПР / VLOOKUP vs ПРОСМОТРX / XLOOKUP
t.me/google_sheets/1315
Сегодня про то, как Google Таблицы нам строить и жить помогают

Личный чек-лист
: очень простая, но мощная штука.

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

Завести чек-лист в Google Таблице проще некуда. Просто флажки с теми пунктами, которые нужно выполнять ежедневно — полчаса на изучение той или иной темы, ежедневные шаги или тренировки, работа над проектами, отказ от сладкого. Да, каждый день отмечать все не получится. Но сам настрой на это и наглядное представление того, как вы идете, помогает сосредоточиться и делать больше важного.

То, что уже на автопилоте — ежедневный бег, например, а у вас может быть что-то другое — уже можно не заносить, смысла нет. Важно то, что можно забыть сделать.

Традиционно напоминаем, что флажки можно включать и выключать пробелом.
Создавайте личную копию шаблона, настраивайте для себя и используйте! В шаблоне зеленым горит текущая дата, серым — выходные (давайте немного расслабляться в эти дни!):
https://docs.google.com/spreadsheets/d/11pAWMxaQfoQcr1exqwsmCha_Xxm7BUE_ind6QVvispU/copy
Превращаем дату-как-текст в дату

Для этого есть целая функция — DATEVALUE / ДАТАЗНАЧ.

Любой текст она не осилит (и не только такой вольный текст, как "Позавчера" или "первый день года", но даже "17 октябрь 2022", увы — см 4 строку на скриншоте). Но текст, максимально похожий на стандартные даты, превратит в настоящие. Если года в текстовой строке нет — будет использован текущий (см строку 6). Если есть время — останется только дата (строка 8).

Альтернатива — умножить дату на единицу.
Суммируем каждую N-ую ячейку

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

Можно использовать такую формулу:
=SUMPRODUCT((MOD(COLUMN(диапазон);N)=0)*(диапазон))


Здесь мы проверяем, нулевой ли остаток при делении номера столбца на N — если нулевой, значит ,столбец нам нужен, и вся следующая конструкция:
(MOD(COLUMN(диапазон);N)=0)

будет в таком случае возвращать TRUE (1).
А для ненужных нам столбцов FALSE (0).
И получим мы на выходе массив {FALSE, TRUE, ...}
который умножим на наш диапазон. SUMPRODUCT потом все это дело просуммирует.

В нашем примере каждый четвертый столбец просуммируем так:
=SUMPRODUCT((MOD(COLUMN(C2:R2)-2;4)=0)*(C2:R2))


Вычитаем двойку мы здесь потому, что наш диапазон начинается в C, а не в A — отступаем два этих столбца, чтобы первый столбец диапазона был первым и по порядку в наших расчетах.
This media is not supported in your browser
VIEW IN TELEGRAM
Создаём QR-код в Таблице и Документе

Друзья, привет! В Таблицах QR-код создаётся формулой, которую нужно ввести в ячейку, как это сделать, мы рассказывали вот здесь: https://tttttt.me/google_sheets/912

А чтобы добавить QR в Google Документ нужен скрипт, например тот, который будет ниже.

Что скрипт делает:
1) ищет в тексте документа "###"
2) находит и вставляет вместо "###" QR-код, созданный из ссылки t.me/google_sheets
3) изменяет размеры изображения на 75 и 75 пикселей
4) и добавляет к самой картинке исходную ссылку


function createQRCode() {
var Doc = DocumentApp.getActiveDocument();
var totalElements = Doc.getNumChildren();

for (var j = 0; j < totalElements; ++j) {
var element = Doc.getChild(j);
el = element.getText();

if (el == '###') {
element.removeFromParent();

var url = 't.me/google_sheets';
var blob = UrlFetchApp.fetch("https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=" + encodeURIComponent(url)).getBlob();

Doc.insertImage(j, blob)
.setHeight(75).setWidth(75)
.setLinkUrl(url)
};
};


PS Конечно, вы можете собрать ссылку из того, что есть в документе, например, искать с помощью регулярного выражения номер договора, соединять его с "ссылкой/" в коде и из этого формировать QR-код.

Документ со скриптом
Достаём курс евро из Московской Биржи.

Друзья, привет, Михаил поделился ссылкой, по которой можно вытянуть текущий курс евро к рублю из MOEX:

https://iss.moex.com/iss/engines/currency/markets/selt/boards/CETS/securities/EUR_RUB__TOM.json?iss.only=securities,marketdata&securities.columns=PREVDATE,PREVPRICE&marketdata.columns=TIME,LAST

Что с этой ссылкой делать дальше? Доставать данные скриптом в Таблицу, например:

function eurRub() {
const url = 'https://iss.moex.com/iss/engines/currency/markets/selt/boards/CETS/securities/EUR_RUB__TOM.json?iss.only=securities,marketdata&securities.columns=PREVDATE,PREVPRICE&marketdata.columns=TIME,LAST'

const r = JSON.parse(UrlFetchApp.fetch(url));
const curr = r.marketdata.data[0][1] || r.securities.data[0][1];
SpreadsheetApp.getActive()
.getRange("лист5!a1")
.setValue(curr);
};
Наш скрипт достанет либо цену последней сделки, либо, если её нет, например, не было торгов - последнюю актуальную цену.

А еще у нас есть большая статья от все того же кудесника Михаила, о том, как достать в Таблицу разные курсы формулами и скриптами.
Вытаскиваем utm из ссылки (а точнее — все, что после знака вопроса)

Для этого можно воспользоваться следующим регулярным выражением:
\?(\S+)

Извлекаем выражение (круглые скобки) из не-пробелов, идущее после знака вопроса (\? = знак вопроса, а без слеша это был бы квантификатор (ноль или один символ)

Вся функция будет такая:
=REGEXEXTRACT(A2;"\?(\S+)")

Хорошее про регулярные выражения:
Компактная памятка про регулярки от Vitalich
Извлекаем числа, едим пончики
Волшебство "найти и заменить". Приводим mm-dd к dd-mm
Google Таблицы
Вытаскиваем utm из ссылки (а точнее — все, что после знака вопроса) Для этого можно воспользоваться следующим регулярным выражением: \?(\S+) Извлекаем выражение (круглые скобки) из не-пробелов, идущее после знака вопроса (\? = знак вопроса, а без слеша это…
UTM-метки. Извлекаем все параметры и их значения формулой

Справедливый комментарий к прошлому посту: удобнее получать отдельные параметры (source, medium, etc.), а не все метки разом.

Можно так:
1. Взять все из ссылки после знака вопроса (с помощью комбинации текстовых функций или INDEX+SPLIT или REGEXEXTRACT — в примере последний вариант). Получится хвост ссылки с метками, где параметры и их значения разделены знаком "равно" (=), а пары разделены амперсандом (&).

2. Разделить их на пары по амперсанду с помощью SPLIT .

3. Транспонировать, чтобы в итоговом результате было два столбца — с параметрами и значениями. Функция TRANSPOSE.

4. Разделить по знаку "равно" с помощью SPLIT. Засунуть ее в ArrayFormula, ибо иначе получим результат только для первой пары.

Есть идеи по сокращению и оптимизации формулы? Добро пожаловать в комменты!

=ArrayFormula(SPLIT(TRANSPOSE(SPLIT(REGEXEXTRACT(A2;"\?(\S+)");"&"));"="))
Эх, дороги..

Друзья, к нам недавно пришел наш клиент, с такой задачей:

Задача от классной гитарной школы Guitardo

1) есть первая точка (долгота и широта)
2) есть еще сто точек, также с долготой и широтой

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

Как решили

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

Таблица со скриптом
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, нам осталось всего 17 голосов, поднажмём?
Определяем первую и последнюю даты квартала по его номеру.

Ловите формулы для определения первой и последней даты квартала по номеру года и номеру квартала. Может пригодиться, если у вас отчеты с функциями SUMIFS, QUERY и другими, куда вы отправляете даты в качестве условий, а пользователю предлагаете выбирать только номер года/квартала в ячейках.

Начало квартала:
DATE(год; квартал * 3 - 2 ;1)


Конец квартала:
EOMONTH(DATE(год; квартал * 3 ;1);0)


Для QUERY, напоминаем, даты в запросе нужно будет засунуть в date'...' и получить нужный формат YYYY-MM-DD с помощью функции TEXT. Например, для начала квартала:
TEXT(DATE(год; квартал * 3 - 2 ;1) ; "yyyy-mm-dd")
Не таблицами едиными! Сегодня про Google Диск (Drive).
Вы знали, что там можно использовать операторы, позволяющие сделать поиск более точным?
Вот некоторые из них.

title:название файла

Поиск только по названиям файлов, а не по содержимому.

"Поиск фразы из нескольких слов"

Возьмите несколько слов в кавычки, чтобы найти определенную фразу целиком, а не одно из слов.

-Исключение Другие слова

Поставьте минус перед словом, чтобы исключить его из поиска. Этот оператор сработает, если в запросе есть другие слова помимо исключаемого. Так, в нашем примере мы будем искать «Другие слова», а слово «Исключение» будет исключено из поиска.

Минус можно применять не только к словам, но и к операторам. Например, следующее сочетание позволит исключить из поиска файлы, владельцем которых являетесь вы:
-owner:me


to:ivanova@company.com

Документы, доступ к которым вы открыли определенному пользователю.

from:ivanova@company.com

Документы, доступ к которым вам открыл определенный пользователь.

Слово Around(n) Другое_слово

Оператор Around(n) позволяет искать слова (фразы), которые находятся на расстоянии в n (или менее) слов друг от друга. То есть с его помощью можно искать слова, которые находятся рядом, например, в одном предложении.
Например: запрос — поиск слов «формула» и «таблица» не дальше, чем на расстоянии 3 слов друг от друга:
формула around(3) таблица
Граждане, внимание!

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

Мы это заметили в таблице, где давно использовалась и работала функция IMPORTXML(). До нажатия кнопки "Allow access" импорт висел поломанный, после нажатия - всё ок, всё импортится, как раньше.

Из-за такой штуки у вас могут сломаться или уже сломались зависимые таблицы. Имейте в виду - надо сходить в источник и дать разрешение.