#google-sheets #array-formulas
Вопрос:
У меня есть некоторые «сложные» вычисления, которые я в настоящее время выполняю по строкам и сохраняю во вспомогательном столбце. В конце концов я просто запускаю sum
вспомогательный столбец, чтобы вычислить общее значение этого вычисления.
Я хотел бы просто иметь одно поле, в котором я выполняю расчет общего значения — без необходимости в вспомогательном столбце.
Чтобы быть конкретным, я рассчитываю нагрузку (XL): http://www.strongur.io/monitoring-training-stress-with-exertion-load/
В качестве входных данных я получаю тяжелоатлета, выполненные повторения и количество повторений, которые были в резервуаре до тех пор, пока не будет достигнут сбой (RIR). Я вычисляю XL набора, расширяя повторения, выполненные в диапазоне => 3 повторения, становится [1,2,3], а затем запускаю > ArrayFormula
в этом диапазоне, чтобы рассчитать расстояние до отказа с точки зрения этого повторения (повторение 1 дальше от отказа, чем повторение 3) и, следовательно, XL этого одного повторения. Затем я использую a sum
для расчета общей нагрузки на данный набор.
К сожалению, этот подход не масштабируется до «единого поля»-решения, поскольку я не могу добавить еще ArrayFormula
одно вокруг него. Я не уверен, куда идти дальше — мой опыт работы с электронными таблицами ограничен.
Я думаю, что мне здесь чего — то не хватает с концептуальной точки зрения-я немного погуглил и увидел упомянутые матрицы, было бы это правильным направлением для такого рода вещей? Я хотел бы избежать необходимости писать функцию JavaScript только для этого случая использования.
Заранее спасибо за любые советы / указания! 🙂
С наилучшими пожеланиями, Саймон
Образец Электронной таблицы: https://docs.google.com/spreadsheets/d/1CNYxsQKo_CUIsstCDbcjoojL6WK46rg9ONybviFxAGs/edit?usp=sharing
Комментарии:
1. формула ur
SEQUENCE(C2) D2 SEQUENCE(C2)-1
не совпадает сRIRj Repsj-i
(как предполагается..) не могли бы вы поделиться y.. ?2. Одна простая причина: острая нехватка кофе — вы правы, это неправильно. Я все исправил, спасибо, что указали на это!
Ответ №1:
использовать:
=ARRAYFORMULA(SUM(IF(B2:B="";;IF(COLUMN(1:1)>C2:C;;
B2:B*EXP(-0,215*(D2:D C2:C-COLUMN(1:1)))))))
Комментарии:
1. Привет @player0 большое тебе спасибо! Не могли бы вы объяснить, как это
COLUMN(1:1)
работает? Я действительно не могу обмозговать это — у меня такое чувство, что вы используете это, чтобы сделать то, что я пытался сделать сSEQUENCE
этим . Было бы здорово, если бы вы могли это объяснить 🙂2. @SimonOswald да, последовательность выводит только одну последовательность,поэтому, как в вашем случае, нам нужна одна последовательность на каждую строку… столбец выводит номер столбца, поэтому столбец(B10) = 2-й столбец…. столбец(C5:F100) выведет массив 3,4,5,6, а столбец(2:2) выведет все столбцы, присутствующие в строке, поэтому 1,2,3,4,5,6,7,8 и т. Д. Итак, что мы здесь делаем, мы используем простой, если номер столбца больше значения в столбце B, больше ничего не делайте, используйте этот номер столбца для создания (имитации) последовательности на каждая строка
3. Очень аккуратно! Большое вам спасибо за то, что нашли время разобраться в этом 🙂
4. Я запрыгну сюда и добавлю одну вещь. Если количество повторений в наборе когда-либо будет больше, чем количество столбцов в настоящее время на листе,
COLUMN(1:1)
это не сработает. Например, если количество повторений равно 30, а количество столбцов всего 26, вы получите неточный результат для этой строки и, следовательно, для общего числа. Вы можете обменять оба экземпляраCOLUMS(1:1)
наSEQUENCE
число, превышающее максимальное количество повторений за набор, которое у вас когда-либо будет, например,SEQUENCE(1;50)
.5. Должно быть, я пропустил «галочку» — я добавил ее сейчас 🙂 Я думаю, что a
SEQUENCE(1;50)
— это то, что я собираюсь использовать-даже сейчас у меня есть A-AL, так что места для большего количества повторений, чем я когда-либо хотел бы сделать. 50 повторений определенно достаточно! Спасибо всем вам за то, что изучили это 🙂