Общее решение
Представьте меня есть вертикальный массив, начиная с ячейки B2, который я хочу разделить на N штабелированные столбцы. Я поставлю эти столбцы из ячейки E4, как показано на рисунке.
Код, который добивается того, чего я хочу:
+OFFSET($B$2,(ROW()-ROW($E$4))*N+(COLUMN()-COLUMN($E$4)),0)
Заменить N с нужным номером (и происхождения и назначения ячейки с вашими конкретными значениями, В2 и Е4 в этом пример) и разверните формулу по вертикали и по горизонтали, чтобы сформировать желаемую матрицу из столбцов N. Для случая N = 3, вы получите:
(PS: если массив находится в горизонтальном положении, использование транспонированного преобразовать в вертикальный, то можно перенести полученную матрицу, чтобы получить конечный результат..)
Пояснение
логика проста. Функция OFFSET
имеет три обязательных входа. Первая - это первая точка вашего массива, которую вы хотите преобразовать (в приведенном выше примере, $B$2
. Выбранный пункт имеет индекс 0, тот, который ниже индекса 1 и т. Д. Итак, вы хотите поставить они заказали индекс в матричной форме, как показано ниже (для случая N = 3):.
The правило, чтобы переместить эти индексы задается во второй записи функции OFFSET
Это в основном формулу, которая вычисляет последовательность 0, 1, 2, 3 ... с использованием некоторых фиксированных значений (номер строки и столбцов первой ячейки, в которую вы помещаете результат, ROW($E$4)
и COLUMN($E$4)
, которые равны 4 и 5 соответственно), а переменные значения ячейку, в которой вы размещаете номер (ROW()
и COLUMN()
). Формула вычисляет разницу между фактическим номером строки и ссылочной строки, масштабирует ее по N и добавляет любую разницу между фактическим и ссылочным столбцом. Эта формула дает желаемые ряды 0, 1, 2, 3 ... для нашей искомой выходной матрицы.
Наконец, последний элемент OFFSET
равен нулю, поскольку мы преобразуем вертикальный столбец данных, поэтому никакого горизонтального смещения не требуется.