2010-02-04 2 views
1

(A) SUMPRODUCT (A1: A3, B1: B3) == A1 * B1 + A2 * B2 + A3 * B3реверсивных строк в Excel формул

Вместо того, что я после

(B) SumProduct (A1: A3, реверс (B1: B3)) == A1 * B3 + A2 * B2 + A3 * B1

Есть ли чистый способ достичь этого в Excel 2003/Excel 2007? Естественным упорядочением этих величин является A1-> A3 и B1-> B3, поэтому изменение значений ячеек неудовлетворительно; но создание обратной копии B1: B3 в другом месте на листе кажется неуклюжим.

+3

Вы должны принять ответы на другие вопросы. – SLaks

ответ

1

Я не могу увидеть решение, которое не предполагает (а) пользовательские функции в VBA (или аналогичный) или (б) дополнительный столбец с частичной Результаты.

Если вам не нравится, что столбец C становится (скрытым) обратным списком, вы бы согласились с тем, что столбец C становится списком типа A1: B3, A2 * B2, A3 * B1, который затем можно было бы суммировать? Можно было бы использовать аналогичную формулу для той, которая упомянута в ответе @ e.tadeu, чтобы получить это (используя функции OFFET и ROW.)

+0

Я принимаю это, поскольку первый абзац - это вариант написания «нет, это невозможно». – VoiceOfUnreason

3

Проверьте тему «Транспонирование список данных» в http://www.cpearson.com/EXCEL/lists.htm

+0

Это решение создает обратную копию в другом месте в электронной таблице. – VoiceOfUnreason

+0

Просто скройте столбец с обратной копией в любом случае ... :) –

+1

Соответствующий раздел называется «Реверсирование порядка строки». Это хорошая находка. Он решил это, как я собирался предложить, но лучше. – Oddthinking

1

Я случайно столкнулся с этим вопросом, потому что пытался найти ответ на этот вопрос вопрос, в частности решение, которое будет использоваться с 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, которые будут использоваться как для шаблона для массива, так и для индекса изменения позиции ,

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

+0

Добро пожаловать! :-) –

Смежные вопросы