Спасибо, @empenoso
Вы хотите научиться решать реальные задачи с помощью Таблиц Гугл? Тогда канал googlesheets_ru - это именно то, что вам нужно! Здесь вы найдете кейсы, хитрости, приемы и практическое применение инструментов Гугл для вашего бизнеса и анализа данных. Новичкам также доступен учебник по Гугл Таблицам, который поможет вам быстро освоить основы и начать использовать их в своей работе. Ссылка на учебник: https://t.me/GoogleSheets_ru/120 Кроме того, если у вас возникли вопросы или вы хотите заказать проект или консультацию, вы всегда можете обратиться к администратору канала @GoogleSheets_ru_cm. Присоединяйтесь к нашему каналу и станьте экспертом в использовании Таблиц и Скриптов Гугл для вашего бизнеса и анализа данных! 🤘🏻
25 Dec, 09:28
23 Dec, 05:42
22 Dec, 12:18
Период
01.12.2024 - 31.12.2024
Недели
01.12.2024 - 01.12.2024
02.12.2024 - 08.12.2024
09.12.2024 - 15.12.2024
16.12.2024 - 22.12.2024
30.12.2024 - 31.12.2024
19 Dec, 06:16
A
, оператор вводит в C
, решения, если будут, вводить в D1:Z1
TRUE
или FALSE
172
- подстрока 172_1
18 Dec, 06:12
=Table2[[#ALL]; [Столбец 1]]
), так и в нескольких столбцах (например, =Table2[[#ALL]; [Столбец 1]:[Столбец 2]]
):#ALL
)#HEADERS
)#TOTALS
)#DATA
)16 Dec, 06:43
13 Dec, 07:12
30,51р
($0.3
)11,62р
($0.1
)500р/мес
($5/month
)12 Dec, 06:32
4.2 Gb
(по версии Google)46425
15m
6
1.566 GiB
26.822 MiB/s
ETA 1m44s
(первая цифра - сколько осталось данных, вторая - скорость передачи, третья - оставшееся время)3.475 KiB
3.852 KiB/s
ETA 3h52m49s
(🥶 там лежит пару папок с node_modules)1h30m
15m
20:50
2024/12/11 18:38:14 ERROR : /~/my-super-site.com - СЯ: Failed to copy: failed to open source object: can't read dangling shortcut
Этот ярлык я вижу только через API, в интерфейсе Диска он не отображается.2024/12/11 18:38:11 ERROR : /Архивирование склада/Архивирование склада.docx: Failed to copy: failed to open source object: open file failed: forbidden to download - check sharing permission
Это файл другого пользователя, который закрыл доступ на скачивание11 Dec, 08:27
Session.getActiveUser().getEmail()
. В ответе на вопрос я разъясняю словами справки, почему получить такие данные трудно, практически невозможно https://qna.habr.com/answer?answer_id=2471864#answers_list_answer11 Dec, 04:49
02 Dec, 11:00
Таблица чата t.me/google_sheets_pro #29 [12/2024]
пример!
или правила
, и Катюха пришлет инструкцию с актуальной ссылкойURLFetchApp
результаты вызовов cgi
(тут вообще не понятно, решается это как-то или нет)JOIN(FILTER)
как условие для колонок строки29 Nov, 13:15
26 Nov, 06:59
25 Nov, 05:02
VLOOKUP
на примере расчета премий. Сегодня сделаем наше решение ещё элегантнее с помощью функции LET
!LET
приходится:LET
решает эти проблемы! Она позволяет:=СУММ(A1:A10)/СЧЁТ(A1:A10)
=LET(
сумма; СУММ(A1:A10);
количество; СЧЁТ(A1:A10);
сумма/количество
)
=LET(
имя1; значение1; // первая переменная
имя2; значение2; // вторая переменная
... // сколько нужно пар
результат // финальное выражение
)
=ArrayFormula(LET(
_суммы_продаж;
QUERY(Продажи;
"select Col1, sum(Col2)
where Col1 is not null
group by Col1
order by sum(Col2)
label Col1 '', sum(Col2) '' ";
1);
_имя; CHOOSECOLS(_суммы_продаж;1);
_сумма; CHOOSECOLS(_суммы_продаж;2);
_прем_кэфф; VLOOKUP(_сумма;Премии;2;1);
_должность; VLOOKUP(_имя;Должности;2;0);
_оклад; VLOOKUP(_должность;Оклады;2;0);
_премия; _оклад*_прем_кэфф;
_зарплата; _оклад+_премия;
{
{
"Должность"\
"Имя"\
"Сумма продаж"\
"Оклад"\
"Премия %"\
"Премия"\
"Итого ЗП"
};
{
_должность\
_суммы_продаж\
_оклад\
_прем_кэфф\
_премия\
_зарплата
}
}
))
_суммы_продаж
- получаем базовые данные с помощью QUERY
_имя и _сумма
- разделяем результат на колонки_прем_кэфф
- находим % премии через неточный поиск_должность
и _оклад
- получаем данные из справочников_премия
и _зарплата
- считаем итоговые суммы24 Nov, 12:04
function onEdit(e) {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SS.getSheetByName('учет остатков');
var range = e.range;
var accum = sheet.getRange(range.getRow(), range.getColumn() - 2);
if (e.value >= 0 && range.getRow() >= 3 && (range.getColumn() == 12 || range.getColumn() == 6)){
accum.setFormula('='+accum.getValue()+'+'+e.value);
}
}
21 Nov, 10:57
18 Nov, 10:08
15 Nov, 12:11
08 Nov, 11:21
07 Nov, 06:48
[TAB]
. Затем вы увидите, как смарт-чип преобразуется в самой ячейке, предлагая важную информацию из приложения прямо в процессе работы.05 Nov, 06:31
01 Nov, 15:25
A:D
). Требуется скомбинировать все комбинации свойств дважды (на картинке G4:N7
как должно быть)G15
01 Nov, 10:54
01 Nov, 08:59
29 Oct, 07:00
28 Oct, 11:49
27 Oct, 09:56
25 Oct, 17:43
11 Oct, 07:08
03 Oct, 13:13
01 Oct, 14:16
01 Oct, 03:14
Таблица чата t.me/google_sheets_pro #27 [10/2024]
Таблица чата t.me/google_sheets_pro
#27
[10/2024]
30 Sep, 17:02
30 Sep, 08:08
27 Sep, 04:21
26 Sep, 16:50
=LET( ...
MAP(input_country; LAMBDA(_input_country;
TRANSPOSE(UNIQUE(
FILTER(data_region;
data_country = _input_country ))))))
=LET( ...
MAP(input_country; input_region;
LAMBDA(_input_country; _input_region;
TRANSPOSE(UNIQUE(
FILTER(data_city;
data_country = _input_country;
data_region = _input_region ))))))
24 Sep, 07:19
=ARRAYFORMULA(
IF(A2:A="";
;
XLOOKUP(
A2:A&B2:B;
'Реклама'!B2:B&'Реклама'!A2:A;
'Реклама'!D2:D;
"Не найдено"
)
)
)
A2:A&B2:B
- создает уникальный ключ из артикула и даты на листе "Воронка"'Реклама'!B2:B&'Реклама'!A2:A
- делает то же самое на листе "Реклама"XLOOKUP
ищет соответствие этих ключей и возвращает значение из столбца D
листа "Реклама"=ARRAYFORMULA(
IFNA(
VLOOKUP(
B2:B&" "&A2:A;
{'Реклама'!A2:A&" "&'Реклама'!B2:B\ 'Реклама'!D2:D};
2;
0
);
)
)
B2:B&" "&A2:A
- создает ключ поиска из даты и артикула{'Реклама'!A2:A&" "&'Реклама'!B2:B\ 'Реклама'!D2:D}
- создает временный массив для поискаVLOOKUP
ищет соответствие в этом массиве=ARRAYFORMULA(
IFNA(
VLOOKUP(
B2:B&" "&A2:A;
QUERY(
{'Реклама'!A2:A&" "&'Реклама'!B2:B\ 'Реклама'!D2:D};
"Select Col1, SUM(Col2) group by Col1"
);
2;
0
);
)
)
QUERY
- суммирует все расходы для каждой уникальной комбинации даты и артикулаVLOOKUP
- затем ищет соответствие в этом предобработанном массиве=ArrayFormula(
MAP(
A2:A;
B2:B;
LAMBDA(
a;b;
SUMIF(
'Реклама'!B2:B&'Реклама'!A2:A;
a&b;
'Реклама'!D2:D
)
)
)
)
MAP
- применяет функцию к каждой паре значений из A2:A
и B2:B
LAMBDA
- создает временную функцию, которая использует SUMIF
SUMIF
суммирует все соответствующие расходы для каждой комбинации артикула и даты23 Sep, 05:47
IMPORTRANGE
. Например, если у вас есть таблица с именем "Таблица1" и заголовками "Столбец 1", "Столбец 2", "Столбец 3" и т. д.:=IMPORTRANGE(spreadsheet_url; "Таблица1[#ALL]")
=IMPORTRANGE(spreadsheet_url; "Таблица1[#TOTALS]")
=IMPORTRANGE(spreadsheet_url; "Таблица1[#DATA]")
=IMPORTRANGE(spreadsheet_url; "Таблица1[[Column 1]:[Column 2];[#ALL]]")
Cmd+Opt+T
для Mac Ctrl+Alt+T
для Linux и Windows18 Sep, 03:59
Страна | Город | Область
=LET(
data_country; A2:A;
data_region; B2:B;
input_country; F3;
IFNA(FILTER(data_region; data_country=input_country)))
=LET(
data_country; A2:A;
data_region; B2:B;
data_city; C2:C;
input_country; F3;
input_region; F5;
IFNA(FILTER(data_city; data_country=input_country; data_region=input_region)))
12 Sep, 06:12
11 Sep, 10:42
11 Sep, 04:37
06 Sep, 16:46
NOT
(НЕ
), AND
(И
), OR
(ИЛИ
) и другие. Их довольно легко интегрировать их с функцией IF
(ЕСЛИ
) и операторами сравнения.NOT
(НЕ
), оператор OR
(ИЛИ
) и оператор AND
(И
). Благодаря использованию этих функций можно эффективно оценить выполнение или невыполнение условий.AND()
проверяет несколько значений, чтобы определить, верны ли все. Если да, то результат истина; в противном случае это ложь.NOT()
меняет значение с истинного на ложное или наоборот.OR()
проверяет несколько значений, если хотя бы одно из них истина результат будет истинным. Если все аргументы ложь, то результат будет ложным.50
, можно сделать это так:=IF(A2>50,IF(B2>50,TRUE,FALSE),FALSE)
=IF(AND(A2>50,B2>50),TRUE,FALSE)
30 Aug, 10:01