Excel: формулы для преобразования данных между столбцом / строкой / матрицей

существуют ли формулы для преобразования данных в столбце в матрицу или в строку? И конвертировать из/в другие комбинации?

как насчет еще более сложного случая: измените матрицу ширины W на ширину N * W?

есть несколько подобных или связанных с ними вопросов. Я ответил на некоторые из них, отмеченные *. Я продолжаю обновлять этот список, поскольку добавляются новые аналогичные (или равные) вопросы:

форматирование данных: столбцы в строки *

переместить содержимое из 1 столбца в 3 столбца *

как разделить один столбец на два столбца базы на условиях в EXCEL *

запись макроса для транспонирования 3 столбцов в 1 строку

Excel VBA транспонировать с символами

математическая транспонировать в excel

как преобразовать "матрицу" - таблицу в одну строку для каждой записи в excel

преобразование столбцов с несколькими строками данных в строки с несколькими столбцами в Excel.

как использовать VBA для изменения данных в excel *

сортировка трех столбцов на шесть, сортировка по горизонтали по фамилии с помощью excel *

разделить данные в одном столбце на несколько столбцов в excel

переместить данные из нескольких столбцов в одну строку *

некоторые из ответов, по-видимому," обновляемы " до чего-то более всеобъемлющего. Это возможно?

примеры форматов для преобразования из / в:

колонки

1
2
3
4
5
6
7
...

строка

1   2   3   4   5   6   7   ...

матрица (с промежутком в 4 столбца здесь)

1   2   3   4
5   6   7   8
...

1 ответов


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

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

enter image description here

1. Столбец в матрицу

на span (в C1) дает количество столбцов. Тогда matrix_data_top_left (здесь D1) содержит

=INDEX(col_data,(ROW()-ROW(matrix_data_top_left))*span+(COLUMN()-COLUMN(matrix_data_top_left)+1),1)

который затем копируется в остальную часть matrix_data. Обратите внимание, что копирование также в D5 дает ошибку, так как полученная формула ссылается на ячейку снаружи col_data (A1:A16). Тот же результат получается в matrix_data2_top_left (I1) с

=OFFSET(col_data_top,(ROW()-ROW(matrix_data2_top_left))*span+(COLUMN()-COLUMN(matrix_data2_top_left)),0)

и копирование аналогично в matrix_data2. Обратите внимание, что копирование также В I5 возвращает 0, а не ошибка.

OFFSET имеет то преимущество, что требуется использовать только одну ячейку в качестве базовой ссылки (col_data_top), поэтому расширение диапазона исходных данных с дальнейшими данными не требует переопределения источника диапазон данных в Формуле нужно только скопировать-вставить в расширенный целевой диапазон. С другой стороны, расширение диапазона исходных данных с помощью INDEX требуется сначала обновить его в Формуле (изменение диапазона, если используется явно), а затем скопировать-вставить в расширенный целевой диапазон. Использование определенного имени более универсально для этой цели, так как переопределение col_data здесь достаточно (и это можно сделать после расширения целевого диапазона). Благодаря этому же свойству,INDEX обеспечивает вид автоматической проверки границ исходного диапазона, который OFFSET нет.

2. Матрица к столбцу

col_data2_top содержит

=INDEX(matrix_data2,INT((ROW()-ROW(col_data2_top))/span)+1,MOD(ROW()-ROW(col_data2_top),span)+1)

и col_data3_top

=OFFSET(matrix_data2_top_left,INT((ROW()-ROW(col_data3_top))/span),MOD(ROW()-ROW(col_data3_top),span))

обе формулы копируются вниз. Те же различия между INDEX и .

3. Матрица к строке

С OFFSET не дает ошибки, остальные формулы будут использовать его. Адаптация для INDEX по линиям, показанным выше, легко. row_data_left содержит

=OFFSET(matrix_data_top_left,INT((COLUMN()-COLUMN(row_data_left))/span),MOD(COLUMN()-COLUMN(row_data_left),span))

затем скопировано вправо.

4. Столбец в строку

row_data2_left содержит

=OFFSET(col_data_top,COLUMN()-COLUMN(row_data2_left),0)

снова скопировано направо.

PS: формула =TRANSPOSE(... работает для этого случая, и он должен быть введен как формула массива (с ctrl+ shift+ enter). Однако, желательно избегать формул массива.

5/6. Строка в столбец / матрицу

это очень легко получить вдоль этих линий. Е. Г., col_data_top содержит

=OFFSET(row_data_left,0,ROW()-ROW(col_data_top))

и скопировать вниз.

7. Матрица транспонировать

получить в matrix_data3 (не показано на рис.) транспонирование matrix_data2, нужно только использовать matrix_data3_top_left, с формулой

=OFFSET(matrix_data2_top_left,COLUMN()-COLUMN(matrix_data3_top_left),ROW()-ROW(matrix_data3_top_left))

и скопирован в подходящий целевой диапазон.

8. Матрица перекроить

мы хотим преобразовать матрицу в более широкую: matrix_data4 С N4 строк и M4 столбцы (width4), в matrix_data5, С N5=N4 / R строк и M5=M4xR столбцы (width5), С R (rep5) количество повторов (матрицы не показаны на рис.) Тогда используйте

=OFFSET(matrix_data4_top_left,(ROW()-ROW(matrix_data5_top_left))*rep5+INT((COLUMN()-COLUMN(matrix_data5_top_left))/width4),MOD((COLUMN()-COLUMN(matrix_data5_top_left)),width4))

теперь мы хотим преобразовать матрицу в более узкую: matrix_data4 С N4 строк и M4 столбцы (width4), в matrix_data6, С N6=N4xS строк и M6=M4 / S столбцы (width6), С S ( split6) число разбиений (матрицы не показаны на рис.) Тогда используйте

=OFFSET(matrix_data4_top_left,INT((ROW()-ROW(matrix_data6_top_left))/split6),MOD((ROW()-ROW(matrix_data6_top_left)),split6)*width4+(COLUMN()-COLUMN(matrix_data6_top_left)))