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
. Плюсы и минусы каждого из них будет дана после явных примеров, со ссылкой на фиг. Он показывает несколько диапазонов с их определенными именами (в курсив в следующем).
Все определенные имена могут быть заменить абсолютные ссылки на соответствующие ячейки.
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)))