Excel, Как использовать «СМЕЩ» для результата «MAKEARRAY»

Я создаю матрицу с помощью «MAKEARRAY» и хотел бы восстановить подматрицу этой матрицы. Я думал об использовании «СМЕЩА», но, видимо, он работает только в диапазоне или ячейке.

Я попробовал это:

=LET(data;MAKEARRAY(2;2;LAMBDA(row;col;row+col));OFFSET(data;;;1;1))

Но в результате я получаю «#value» (это вполне нормально, потому что мы не можем использовать OFFSET с матрицей) Офсетная документация

Вы могли бы что-нибудь сделать с CHOOSECOLS(CHOOSEROWS()) и SEQUENCE(), но это немного некрасиво.

DS_London 05.05.2024 12:47

Если вы хотите контролировать ширину и высоту, как вы используете в OFFSET(), вы можете обернуть TAKE() вокруг своей data переменной.

JvdV 05.05.2024 12:49

Вы также можете использовать неявную логику пересечения для вашего вывода, как кажется: =LET(data,MAKEARRAY(2,2,LAMBDA(row,col,row+col)),@data)

Mayukh Bhattacharya 05.05.2024 12:58

Я согласен, даже если вы просто лениво замените offset на index(data, 1, 1), ваша формула будет работать. но близнец OFFSET 365 - это просто двойник. например DROP(TAKE(data, offset_row+height, offset_col+width), offset_row, offset_col) эквивалентно OFFSET(range,offset_row,offset_col,height,width)

rachel 05.05.2024 13:32

Я не знал об этих функциях, они очень полезны, спасибо! Кстати, я заметил, что если мы поменяем местами «ВЗЯТЬ» и «БРОСИТЬ», нам нужно будет меньше вычислений =LET(array;B24:F32;x;1;y;1;width;3;height;3;TAKE(DROP(array;‌​x;y);width;height))

Seb 05.05.2024 15:22

Да. Спасибо! Обратное падение и взятие намного чище.

rachel 06.05.2024 00:27
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
6
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать комбинацию CHOOSEROWS и CHOOSECOLS с SEQUENCE, чтобы определить общий срез, используя верхний левый и нижний правый:

=LAMBDA(m,tlr,tlc,brr,brc,CHOOSECOLS(CHOOSEROWS(m,SEQUENCE(1+brr-tlr,,tlr)),SEQUENCE(1+brc-tlc,,tlc)))
  • м = входная матрица
  • tlr = верхний левый ряд
  • tlc = верхний левый столбец
  • брр = нижний правый ряд
  • brc = нижний правый столбец
Ответ принят как подходящий

Другое решение с использованием функции ИНДЕКС:

Соглашение о точке с запятой:

=LET(
   array; A1:B4; row_offset; 1; col_offset; 1; 
   IFERROR(
     INDEX(
       array; 
       row_offset + SEQUENCE(ROWS(array)); 
       col_offset + SEQUENCE(1; COLUMNS(array))
     );""
   )
 )

Соглашение о запятой:

=LET(
   array, A1:B4, row_offset, 1, col_offset, 1, 
   IFERROR(
     INDEX(
       array, 
       row_offset + SEQUENCE(ROWS(array)), 
       col_offset + SEQUENCE(1, COLUMNS(array))
     ),""
   )
 )

Спасибо за второй пример, который тоже работает очень хорошо. Знаете ли вы, какой из них самый быстрый (уровень производительности)? (между вашим и DS_London)

Seb 05.05.2024 14:48
do you know which one is the fastest (performance level) ? (between your's and DS_London)Я не уверен.
z.. 05.05.2024 21:36

Другие вопросы по теме