Вопрос или проблема
У меня есть множество информации, выглядящей следующим образом:
0 1 2 3 4 ...
'0 'C1 '81 '40 '1 ...
(К вашему сведению: вторая строка содержит шестнадцатеричные числа, и я использую '
, чтобы Excel не конвертировал значения вроде '12
(что является 18, восемнадцать) в 12 (двенадцать).
Я знаю о функциях, таких как =ToRow()
и =ToCol()
для преобразования данных в одну строку или столбец. Я также знаю, что функции вроде =Sequence()
способны создавать двумерную матрицу, но я не нахожу функцию ToMatrix()
или ToArray()
.
Кто-нибудь знает простой способ сделать это в Excel-365?
Заранее благодарю
На основе этого ответа на техносообществе, хотя, вероятно, возможно что-то более простое:
=LET(
array, TRANSPOSE(A1:SR2),
wrapcount, 32,
totalRows, ROWS(array),
groups, SEQUENCE(ROUNDUP(totalRows / wrapcount, 0), , 0),
first, CHOOSEROWS(array, SEQUENCE(wrapcount)),
TRANSPOSE(REDUCE(
first,
DROP(groups, 1),
LAMBDA(a, b,
HSTACK(
a,
CHOOSEROWS(
array,
SEQUENCE(
MIN(wrapcount, totalRows - b * wrapcount),
,
b * wrapcount + 1
)))))))
Единственное, что я изменил, это добавил TRANSPOSE()
в параметр массива, так как они начали с 2 столбцов вместо 2 строк. И изменил wrapcount на 32, в соответствии с вашим вопросом. И ещё один transpose вокруг всего.
Вы можете сделать это с помощью функции лямбда:
перейдите в формулы / диспетчер имен / создать и введите:
- имя
v_stack
- ссылается на:
=LAMBDA(rng,cols,rows,IF(COLUMNS(rng)>cols,VSTACK(TAKE(rng,rows,cols),v_stack(DROP(rng,0,cols),cols,rows)),rng))
Теперь у вас есть функция “v_stack”, принимающая три аргумента
- адрес диапазона, который вы хотите преобразовать
- количество столбцов, на которые нужно разбить
- количество строк в исходном диапазоне
разбор формулы:
=LAMBDA(rng,cols,rows,
IF(
COLUMNS(rng)>cols,
VSTACK(
TAKE(rng,rows,cols),
v_stack(DROP(rng,0,cols),cols,rows)),
rng))
Не уверен, что это тот порядок, который вы ожидаете:
=WRAPROWS(TOCOL(A1:SR2,,1),32)
Нидерландский:
=OMLOOP.RIJEN(NAAR.KOLOM(A1:SR2;;1);32)
Ответ или решение
В Excel 365 существует множество методов для манипуляции данными, и преобразование двумерных массивов в различные форматы — это часто встречающаяся задача. В вашем случае вам нужно преобразовать массив размером 2×512 в матрицу 32×32. Ваша исходная информация представлена в виде двух строк, где вторая строка содержит шестнадцатеричные числа, которые записываются с апострофом, чтобы избежать ненужного форматирования Excel.
Теория
Проблема
Изначально вы имеете массив данных размером 2×512, где каждый элемент второй строки представляется в виде шестнадцатеричного числа. Ваша задача — упорядочить эти данные в матрицу размером 32×32 таким образом, чтобы данные были правильно распределены.
Решение
Одним из методов решения этой задачи является использование функций массива, встроенных в Excel 365. В частности, сочетание LET
, SEQUENCE
, TRANSPOSE
, и прочих современных функций позволит вам автоматизировать процесс и упростить данные манипуляции. Пример использования данных функций позволяет пользователю эффективно манипулировать массивами без необходимости их копирования вручную.
Пример
Пример использования функций Excel для решения вашей задачи может быть следующим:
=LET(
array, TOCOL(A1:SR2, ,1),
result, WRAPROWS(array, 32),
result
)
Пояснение
- LET: Используется для определения промежуточных значений и упрощения формулы.
- TOCOL: Эта функция используется для преобразования массива в одну колонку. Это позволяет легко манипулировать данными последовательным образом.
- WRAPROWS: Функция, заворачивающая одномерный массив в двумерный матрицу, где каждая строка будет иметь 32 элемента.
Применение
В Excel 365, с помощью этих функций вы добьетесь желаемого результата. Вам нужно лишь скопировать и вставить формулу в нужную ячейку вашего рабочего листа, заменяя A1:SR2
на диапазон ваших реальных данных. После этого ваша задача будет решена за счет автоматического распределения данных в желаемой форме.
Мы также можем рассмотреть альтернативное решение с использованием пользовательских функций LAMBDA
, доступных в Excel 365. Это позволяет не только решить текущую задачу, но и открывает возможность использования таких решений для других задач в будущем.
Создание пользовательских функций:
-
Определите пользовательскую функцию „v_stack“:
- Перейдите в Менеджер имен (Formulas -> Name Manager).
- Создайте новую запись с именем „v_stack“.
- Используйте следующую формулу:
=LAMBDA(rng, cols, rows, IF(COLUMNS(rng) > cols, VSTACK(TAKE(rng, rows, cols), v_stack(DROP(rng, 0, cols), cols, rows)), rng))
-
Применение функции:
- Используйте функцию „v_stack“ в нужной ячейке, передавая необходимые параметры. Например:
=v_stack(A1:SR2, 32, 2)
Пользовательская функция будет рекурсивно разбирать массив на столбцы указанной ширины и складывать их в вертикальном порядке, чтобы в итоге получить требуемую форму. Этот способ упрощает использование функций для повторяющихся задач манипуляции с массивами в будущем.
Заключение
Использование встроенных функций Excel 365, таких как LET
, TOCOL
, WRAPROWS
, и создание пользовательских LAMBDA
функций открывает большие возможности для автоматизации задач с массивами данных. Эти методы позволяют более эффективно использовать Excel в повседневной работе и предоставить пользователям возможность гибко решать задачи без ручного вмешательства. Применяя описанные методы, вы сможете без труда трансформировать ваши данные в нужные форматы, сократив время и повысив производительность работы.