#google-sheets
#google-таблицы
Вопрос:
У меня есть таблица турнирных мест для группы игроков и таблица турнирных выплат за место, и я хочу добавить все выигрыши без необходимости создавать какие-либо дополнительные таблицы или массивную формулу.
Это то, что я предполагал, может сработать:
=SUM(ARRAYFORMULA(INDEX(Tournaments!$1:$1000,MATCH($H$1:$Q$1,Tournaments!$A:$A,0),MATCH($H4:$Q4,Tournaments!$1:$1,1))))
В основном ожидается, что arrayformula превратит индекс во множество различных совпадений, чтобы иметь возможность суммировать их, но вместо этого он приносит только первое попадание. Небольшая вещь, на которую следует обратить внимание: места размещения не обязательно являются точными, если игрок занял 3-4-е место, таблица имеет 3,5, поэтому в приведенной выше формуле соответствия было 1 (то же самое делает -1) вместо 0 при типе поиска.
Вот ссылка на файл, если вы хотите поиграть с ним. Формула идет в столбце G: https://docs.google.com/spreadsheets/d/1Ft_E5bRzlqbAvo3yD54VC2hBWS6eaYrLQg5Q9sP859g/edit?usp=sharing
Комментарии:
1. Можете ли вы подробнее рассказать о примере для одного игрока?
2. ДА. Например, игрок сыграл в 6 турнирах. Я хочу, чтобы формула добавила все деньги, которые он выиграл на этих шести турнирах, т. Е. 2-е место в Red Bull Wololo I = 3263 2-е место в Battle of Africa = 4000 и т.д.
Ответ №1:
Я, наконец, понял. (Спасибо за предоставление таблицы!)
Вы не можете использовать INDEX()
и ArrayFormula()
, к сожалению, но вы можете использовать VLOOKUP()
, чтобы заставить его работать. Я также решил создать Tournaments
именованный диапазон для удобства чтения.
Плоская форма:
=SUM(ArrayFormula(IFERROR(VLOOKUP(H$1:Q$1,Tournaments,IF(H4:Q4,H4:Q4 3),0))))
Помечено:
=SUM(
ArrayFormula(
IFERROR( # If we don't find a value, we get an error,
# meaning a valid placement was not given.
# No 2nd arg -> blank -> `0` for `SUM()`.
VLOOKUP(
H$1:Q$1, # Lookup value (Tournament names)
Tournaments, # Lookup range (Named range)
IF( # Lookup index (Placement)
# No need to worry about floating points.
# This value is floored by VLOOKUP().
H4:Q4, # If non-blank...
H4:Q4 3 # Add 3 to index into proper column
),
0 # Exact match on tourney name, since
# they're unsorted
)
)
)
)
Пояснения в помощь:
VLOOKUP()
сначала ищет вертикально значение поиска (название турнира), извлекая строку. Затем он индексирует эту строку, используя индекс (размещение). Вот почему нам нужна вся таблица целиком и включающая все столбцы.- Вот почему там 3.
- Автоматическое напольное покрытие превращает 3,5 в 3.
- Именованные диапазоны могут быть созданы в
Data
>Named Ranges
меню. - Я сделал формулу перетаскиваемой, так что строки будут правильно увеличиваться.
Комментарии:
1. Да! Это имеет смысл. Я действительно думал об этом и подумал: «почему VLOOKUP будет работать, а не индексировать», но теперь, когда я думаю об этом, это имеет смысл. Я не проверял, работает ли это, но единственная проблема в том, что вы на самом деле не хотите получать только точные совпадения, поскольку игроки, занявшие 3-4 места, имеют 3,5 места, и поэтому мы хотим, чтобы он соответствовал либо 3, либо 4 (поэтому четвертый аргумент должен быть равен 1 или TRUE).). Спасибо!
2. @MarianoMolina Извините. Было неясно. Четвертый аргумент предназначен для
is_sorted
, который нам нужен, потому что список турниров не отсортирован. Точное совпадение заключается в поиске названия турнира, а не места размещения, поэтому необходим 0. Аргумент 3 — это наш индексатор для размещения, который автоматически «заполняется»VLOOOKUP
в третьем аргументе. Я обновлю.3. Это имеет смысл. Да, название турнира должно быть точно подобрано, я неправильно истолковал формулу. Я проверил, и это отлично работает. Спасибо, чувак, отличная работа!
4. @MarianoMolina Понятно. У меня было точно такое же замешательство, когда я исследовал это.