Как получить матрицу с номерами строк для каждой ячейки исходной матрицы? - PullRequest
1 голос
/ 17 июня 2020

Наткнулся на странное поведение. Эта формула:

=ARRAYFORMULA(ROW($A$1:$E$5))

Возвращает столбец из 5 элементов с номерами строк от 1 до 5. Я думал, что ARRAYFORMULA будет перебирать каждую ячейку в указанном диапазоне и выполнять на ней ROW() - в результате получается новый диапазон того же размера (5 столбцов, 5 строк), но с номерами строк в ячейках.

Например, =ARRAYFORMULA(ISBLANK($A$1:$E$5)) возвращает диапазон 5 на 5.

enter image description here

Я нашел способ добиться желаемого поведения (см. Ответ ниже), но есть ли способ лучше? Я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Здесь особо нечего сказать, просто ROW и COLUMN являются только одномерными. другими словами, ROW будет работать только с одним единственным столбцом, а COLUMN будет работать только с одной единственной строкой - независимо от того, что вы вводите с диапазоном A1: Z или A1: A

как уже упоминалось, вы можете использовать MattKing SEQUENCE для создания матрицы

или короче:

=ARRAYFORMULA(ROW(A1:A5)*COLUMN(A:E)^0)

enter image description here

или короче:

=INDEX(ROW(A1:A5)*COLUMN(A:E)^0)

или короче:

=INDEX(ROW(A1:A5)*{1,1,1,1,1})
1 голос
/ 17 июня 2020

Думаю, многие люди используют:

=ARRAYFORMULA(IF(COLUMN(A1:E5),ROW(A1:E5)))

Есть много способов сделать это, но почти все потребуют использования двух ссылок.

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

=ARRAYFORMULA(SEQUENCE(1,5,0,0)+SEQUENCE(5))
1 голос
/ 17 июня 2020

Вот обходной путь для вас, чувак:

=ARRAYFORMULA(ROW($A$1:$E$5) + 0 * ISBLANK(A1:E5))

0 * ISBLANK(A1:E5) часть существует только для того, чтобы заставить желаемое поведение без изменения (см. Это умножение на 0?) Необходимых вам значений.

enter image description here

...