Как преобразовать массив 2×512 в Excel в массив 32×32

Вопрос или проблема

У меня есть множество информации, выглядящей следующим образом:

 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
                    )))))))

Result

Единственное, что я изменил, это добавил 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))

new name form

Теперь у вас есть функция “v_stack”, принимающая три аргумента

  • адрес диапазона, который вы хотите преобразовать
  • количество столбцов, на которые нужно разбить
  • количество строк в исходном диапазоне

разбор формулы:

=LAMBDA(rng,cols,rows,
 IF(
   COLUMNS(rng)>cols,
   VSTACK(
     TAKE(rng,rows,cols),
     v_stack(DROP(rng,0,cols),cols,rows)),
   rng))

sample use of the function

Не уверен, что это тот порядок, который вы ожидаете:
=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
)

Пояснение

  1. LET: Используется для определения промежуточных значений и упрощения формулы.
  2. TOCOL: Эта функция используется для преобразования массива в одну колонку. Это позволяет легко манипулировать данными последовательным образом.
  3. WRAPROWS: Функция, заворачивающая одномерный массив в двумерный матрицу, где каждая строка будет иметь 32 элемента.

Применение

В Excel 365, с помощью этих функций вы добьетесь желаемого результата. Вам нужно лишь скопировать и вставить формулу в нужную ячейку вашего рабочего листа, заменяя A1:SR2 на диапазон ваших реальных данных. После этого ваша задача будет решена за счет автоматического распределения данных в желаемой форме.

Мы также можем рассмотреть альтернативное решение с использованием пользовательских функций LAMBDA, доступных в Excel 365. Это позволяет не только решить текущую задачу, но и открывает возможность использования таких решений для других задач в будущем.

Создание пользовательских функций:

  1. Определите пользовательскую функцию „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))
  2. Применение функции:

    • Используйте функцию „v_stack“ в нужной ячейке, передавая необходимые параметры. Например:
    =v_stack(A1:SR2, 32, 2)

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

Заключение

Использование встроенных функций Excel 365, таких как LET, TOCOL, WRAPROWS, и создание пользовательских LAMBDA функций открывает большие возможности для автоматизации задач с массивами данных. Эти методы позволяют более эффективно использовать Excel в повседневной работе и предоставить пользователям возможность гибко решать задачи без ручного вмешательства. Применяя описанные методы, вы сможете без труда трансформировать ваши данные в нужные форматы, сократив время и повысив производительность работы.

Оцените материал
Добавить комментарий

Капча загружается...