Является ли это формулой массива, IF (ISNUMBER (A1: A100), A1: A100, "") - PullRequest
1 голос
/ 21 января 2020

Является ли IF(ISNUMBER(A1:A100),A1:A100,"") формулой массива? Если нет, что это?

Я скопировал список праздников с веб-сайта и вставил его в Excel. Исходные данные имели четыре столбца (дата, название праздника, день недели, примечание). После вставки в Excel все появилось в столбце A, например:

date
name of the holiday
weekday
note

date
name of the holiday
.....
.....

Я попробовал несколько способов проверить, можно ли вставить данные в столбцы безрезультатно. Итак, мне нужно было извлечь даты в другой столбец. В столбец B я ввел эту формулу =IF(ISNUMBER(A1:A100),A1:A100,""). Он работал для извлечения дат из столбца A в столбец B.

Я не уверен, является ли это формулой массива, поскольку, в отличие от других формул массива, ей не требуется Ctrl-Shift-Enter. Тем не менее, ISNUMBER обычно принимает в качестве аргумента ячейку, а не массив, и если IF обычно не возвращает массив.

Ответы [ 2 ]

1 голос
/ 21 января 2020

IF и ISNUMBER не являются функциями массива, но их можно использовать в формулах массива.

Вне формулы массива они принимают только одиночные входные значения и возвращают одиночные выходные значения.

В формуле массива они могут принимать массив входных значений и будут возвращать массив выходных данных. значения.

Без нажатия клавиши CTRL-SHIFT-ENTER указанная вами формула не является функцией массива.

То, что вы видите, - это поведение, когда функция ожидает одного значение имеет диапазон и вводится без нажатия клавиши CTRL-SHIFT-ENTER, но диапазон ввода перекрывается со строкой, в которой находится формула.

Ввод диапазона, когда ожидается одно значение, вернет значение из диапазона в той же строке, в которую вводится формула, если она перекрывается, в противном случае она выдаст ошибку.

Вы получаете выходные данные только потому, что размещаете формулу рядом со ссылками на строки; и он дает тот же результат, как если бы вы ввели формулу в обычном режиме, а затем заполнили ее: то есть, поместив =IF(ISNUMBER(A1),A1,"") в ячейку B1 и заполнив ее.

Обратите внимание, что если вы ввели =IF(ISNUMBER(A1:A100),A1:A100,"") в ячейку B2 вместо ячейки B1 и затем заполнены, тогда значения все еще появляются в той же строке и не сдвигаются вниз на строку, как вы могли ожидать. Опять же, это потому, что он смотрит на значение в той же строке только потому, что диапазон перекрывается с текущей строкой.

Сравните с помещением =IF(ISNUMBER(A1),A1,"") в ячейку B2 и заполнением вниз, где вы затем получите смещенные значения вниз на строку, как и ожидалось.

Если вы снова ввели исходную формулу в ячейку B101 (ниже диапазона ввода) и заполнили ее, вы вообще не получите значений (даже если рядом с ячейкой есть данные) потому что диапазон ввода больше не перекрывает текущую ячейку. Фактически, если вы использовали инструмент «Оценить формулу» на вкладке «Формулы», вы увидите, что диапазон A1: A100 немедленно возвращает ошибку #VALUE.

Такое поведение сбивает с толку и его следует избегать любой ценой. Вводите диапазоны только тогда, когда функция ожидает диапазон или когда преднамеренно создается формула массива с помощью CTRL-SHIFT-ENTER.

0 голосов
/ 21 января 2020

Если после вставки ваших данных в Excel лист выглядит следующим образом, вы можете использовать следующую формулу.

enter image description here

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

=INDIRECT("A"&(ROW()-1)*4+COLUMNS($A$1:A$1))

Эта формула будет производить 0 (zero) для пустых ячеек. Чтобы скрыть ноль (0), используйте условие IF(), как показано ниже.

=IF(INDIRECT("A"&(ROW()-1)*4+COLUMNS($A$1:A$1))=0,"",INDIRECT("A"&(ROW()-1)*4+COLUMNS($A$1:A$1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...