Как установить содержимое ячейки на основе выбора из раскрывающегося списка?

У меня есть небольшая таблица, которую я создаю для отслеживания своего прогресса в игре. В игре есть цепочки квестов, которые приносят вам очки в событии. Они суммируются при попытке определить ваш общий балл в событии. Чтобы упростить ввод данных, у меня есть раздел со столбцами различных уровней для каждой цепочки квестов. Здесь они выглядят как первые пять столбцов:

Квест 1-й уровень Уровень 2 Уровень 3 Уровень 4 Уровень
достигнут
(выпадающий список) Очки
достигнуто Яблоко 25 50 150 Банан 25 50 150 Мускусная дыня 25 50 150 Дуриан 25 100 200 Баклажан 200 инжир 25 50 150 Виноград 25 40 100 150 Уровень 3 165 Нектар 20 60 150

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

Меня интересуют два других столбца. У меня есть столбец Points achieved, в котором я вручную добавляю очки, которые я заработал до сих пор, но это раздражает, потому что мне приходится постоянно возвращаться к игре, чтобы увидеть, что каждый уровень стоит, так как они несовместимы для каждой цепочки квестов.

Что я хотел бы сделать, так это иметь раскрывающийся список для Level achieved с вариантами для Уровня 1-4 (я уже сделал это), и когда я играю в игру, когда я завершаю другой уровень в цепочке, я могу изменить раскрывающийся список Level achieved для этого квеста на текущий уровень. Когда я это сделаю, это должно автоматически обновить Points achieved, чтобы оно стало суммой очков с текущего и любых предыдущих уровней.

Пример:

Я только что прошел третий уровень квеста "Виноград". Таким образом, я обновляю раскрывающийся список Level achieved до «Уровня 3», а ячейка Points achieved для винограда теперь должна автоматически обновляться до 165, что является суммой уровней 1-3 (25 + 40 + 100). (Этот пример можно увидеть на диаграмме выше.)

Моя проблема:

Итак, я не уверен, что мне нужно делать в этот момент. Я могу представить несколько возможностей.

  1. Возможно, я смогу упростить вычисления, создав лист, в котором суммируются итоги, поэтому мне не нужно устанавливать Level 2 как эквивалент значения уровня 1 + уровня 2.
  2. Возможно ли иметь какое-то волшебство, которое говорит, что уровень n = сумма уровня 1 + ... уровень n без создания нового листа?

Конечный результат, который я хочу, — это иметь возможность выбирать уровень в раскрывающемся списке и автоматически заполнять ячейку Points achieved значением суммированных уровней. В любом случае, суть моего вопроса заключается в том, как использовать значение раскрывающегося меню для определения значения другой ячейки? Я рад обновить любое из моих раскрывающихся списков или имен столбцов по мере необходимости, чтобы заставить его работать, но я бы предпочел, чтобы все было на одном листе, если это возможно, поскольку на самом деле я не отслеживаю тонну контента.


Некоторые примечания:

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

Я покопался здесь, в SO и в Google, и, хотя я нашел некоторые возможные источники информации, я думаю, что изо всех сил пытаюсь определить, действительно ли рекомендуемые ими решения действительно достаточно подходят для моей конкретной ситуации, чтобы я мог сам решить проблему.

Этот пост выделяется среди всех постов о Google Таблицах, которые я видел за очень долгое время. Является ли этот пост частью какого-то теста? Однажды сказал, что...

Rubén 11.01.2023 00:49

@ Рубен Нах. Мне просто очень нравятся электронные таблицы, но я совершенно невежественен. Кроме того, я надеюсь, что знаю, как правильно задать вопрос, поэтому я надеюсь, что он выделяется по правильным причинам: D

Catija 11.01.2023 00:50

Одна из вещей, которая выделяет его, это то, что он очень хорошо написан, очень описателен ... ChatGPT не может написать лучше :D.

Rubén 11.01.2023 00:52

Кстати, другие вещи, которые выделяют ваш пост, заключаются в том, что это хороший вопрос Google Sheets / электронной таблицы, в котором не используются типичные ключевые слова, такие как formula / function, и либо часто используемые, такие как range, reference, lookup, data validation среди другие, и, что лучше всего, он автономный / не включает ссылку на электронную таблицу.

Rubén 11.01.2023 17:19
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
4
4
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

... в то время как вы сохраняете свою электронную таблицу простой.

Простая формула Используя данные, указанные в вопросе

=SUM(OFFSET(B8:E8, 0, 0, 1, MATCH(F8,{"Level 1","Level 2","Level 3","Level 4"})))

Объяснение

  • {"Level 1","Level 2","Level 3","Level 4"} — это массив, в котором значения раскрывающегося списка расположены в порядке, соответствующем столбцам слева направо.
  • MATCH — это функция, которая находит позицию значения, выбранного в раскрывающемся списке, F8, в приведенном выше массиве.
  • OFFSET захватывает ячейки из столбца B справа на основе числа, возвращаемого MATCH
  • SUM суммирует значения ячеек, захваченных OFFSET.

Скопируйте формулу из G8 в G2:G9.

Чтобы адаптировать это к вашему листу, добавьте следующую формулу к D2:

=SUM(OFFSET(I2:L2, 0, 0, 1, MATCH(C2,{"Level 1","Level 2","Level 3","Level 4"})))

Затем заполнить.

ПРИМЕЧАНИЯ:

  • Формула вернет #N/A Error Did not find value '' in MATCH evaluation., если достигнутый уровень (раскрывающийся список) пуст. Чтобы избежать этого, вы можете добавить IFNA установку второго аргумента в качестве «значения по умолчанию». Если вы хотите показать ячейку пустой (пустой), оставьте второй аргумент пустым:

    =IFNA(SUM(OFFSET(I2:L2, 0, 0, 1, MATCH(C2,{"Level 1","Level 2","Level 3","Level 4"}))), )
    
  • Если в вашей электронной таблице в качестве десятичного разделителя используются , (запятые), замените , на ; (точки с запятой).

  • Если ваша электронная таблица становится сложной, т. е. ваш лист становится очень большим или вы добавляете много листов и много формул, вам может потребоваться другое решение. Если это так, нам потребуются дополнительные подробности.

Рекомендации

Спасибо! :D Единственное, что мне пришлось изменить, это то, что я добавил столбец уровня 0 с суммой 0, потому что в противном случае я получил бы ошибки в любых ячейках, где я не сделал выбор в раскрывающемся списке. Есть ли способ избежать этого, например, добавить оператор if?

Catija 11.01.2023 15:39

@Catija Ответ отредактирован. Tl;Dr поместил функцию SUM внутрь IFNA , то есть =IFNA(SUM(...),)

Rubén 11.01.2023 16:56

Ты можешь сделать:

=SUM(FILTER(B8:E8, B1:E1<=F8))

И весь столбец за один раз:

=BYROW(F2:INDEX(F:F, MAX(ROW(F:F)*(F:F<>""))), 
 LAMBDA(x, IFNA(SUM(FILTER(OFFSET(x,,-4,,4), B1:E1<=x)))))

F2:INDEX(F:F, MAX(ROW(F:F)*(F:F<>""))) переводится на F2:F8 на основе: https://stackoverflow.com/a/74281216/5632629

LAMBDA объяснение использования можно найти здесь: https://stackoverflow.com/a/74393500/5632629 в разделе "WHY LAMBDA ?"

Другие вопросы по теме