Как СУММИРОВАТЬ результаты нескольких ИНДЕКСОВ совпадений

#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 Понятно. У меня было точно такое же замешательство, когда я исследовал это.