Я случайно столкнулся с этим вопросом, потому что пытался найти ответ на этот вопрос вопрос, в частности решение, которое будет использоваться с SUMPRODUCT.
Предыдущее сообщение со ссылкой было полезно, и было разработано следующее. Пожалуйста, обратите внимание, что для простоты и ясности исходные ссылки были изменены, чтобы упростить понимание формул электронных таблиц. Необходимые изменения могут быть достигнуты с использованием ссылочного стиля INDIRECT и R1C1, если обращение к столбцам должно быть применено к обращению (может быть полезной документация по функции INDIRECT, COLUMN и COLUMNS).
В Excel (проверено в Excel 2010), формула, которая SUMPRODUCTs массив в A6: A8 с разворота массива в B6: B8 (скажем, B8: B6) может быть
=SUMPRODUCT(A6:A8,N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)))
реверсивная часть для Excel равна N(OFFSET(B6:B8,ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0))
, ее также можно использовать как формулу с несколькими ячейками (ctrl-shift-enter) в любом месте - массив, подлежащий обратному, находится в B6: B8.
Краткое описание: N()
необходимо преобразовать ссылки, возвращаемые OFFSET, в массив значений, который может использоваться внутри SUMPRODUCT. (OFFSET без N() делает формулу недействительной в SUMPRODUCT и преобразует большинство не чисел в 0, как и ожидалось, она преобразует TRUE в 1.)
OFFSET берет массив в таблице и помещает значения в обратном порядке. (В этом случае смещение оригинала при 3-1 = 2 переходит в новую позицию массива 0, 3-2 = 1 переходит в 1 и, наконец, 3-3 = 0 переходит в 2.) Функция ROW() создает массив последовательных чисел который можно вычесть из длины полного массива [обратите внимание, что окончательные S и A1: A3 не были использованы для получения {1,2, ...}, до количества строк в исходном массиве/диапазоне .]
Эта формула НЕ работает в приложении электронной таблицы OpenOffice/LibreOffice. Но INDEX может с аналоговым подходом стать еще более гибким.
OpenOffice/LibreOffice может использовать тот же подход, но с функцией INDEX. Решение OpenOffice/LibreOffice не работает в Excel, поскольку Excel не принимает массивы в row_num/col_num INDEX (любой массив как аргумент становится единственным верхним элементом массива).
В OpenOffice/LibreOffice (проверено в Apache OpenOffice 4), формулы, SUMPRODUCTs массива в A6: A8 с разворотом массива в B6: В8 может быть
=SUMPRODUCT(A6:A8,INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0))
Реверсивной часть для OpenOffice INDEX(B6:B8,1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),0)
, он также может использоваться как формула массива с несколькими ячейками (ctrl-shift-enter) в любом месте - массив, подлежащий обратному, находится в B6: B8.
версия Excel с таким подходом (спасибо, XOR LX: see here), которые могут быть очень полезны в качестве индекса может принимать массивы, тогда как OFFSET может принимать только ссылки на таблицу:
=SUMPRODUCT(A6:A8,INDEX(B6:B8,N(INDEX(1+ROWS(B6:B8)-ROW(INDIRECT("A1:A"& ROWS(B6:B8))),,)),0))
[Как это происходит с Excel-х OFFSET выше, формула с модификацией N (INDEX ([...] ,,)) не работает в OpenOffice, функция обертывания должна быть снята при использовании этого приложения.]
Этот подход является аналогом тот, который используется в Excel для OFFSET. Учтите, что INDEX использует индексы, начинающиеся с 1, тогда как OFFSET начинается с 0. Как и в предыдущем случае, массив динамически создается из номеров строк в A1: A3, которые будут использоваться как для шаблона для массива, так и для индекса изменения позиции ,
Этот очень поздний ответ вряд ли поможет оригинальному плакату, но это может сэкономить время для будущих пользователей с похожим вопросом.
Вы должны принять ответы на другие вопросы. – SLaks