2

(Первоначально я спрашивал об этом на stackoverflow. Тем не менее, формулы Excel определенно пересекают грань между "программированием" и "супервизацией", поэтому я считаю, что этот кросс-пост уместен.)

Многие из встроенных функций Excel могут принимать аргументы массива. Иногда результат документируется в справке, а иногда нет. Так:

=IF({1,0,1}, 42, 99)

вернет {42, 99, 42}. Справка по 'IF' охватывает аргументы массива. Но:

=INDEX({2,3,5,7,11}, {2,4})

вернет {3, 7}. Это интуитивно понятно, но я не могу найти источник Microsoft, который документирует это. А также:

=INDEX({1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16}, {1,3},{2,4})

возвращает {2, 12}, что совсем не интуитивно понятно.

Есть ли какой-нибудь источник, который охватывает эти менее распространенные виды использования массивов? Кажется, что он должен быть, но я не нахожу его в веб-поиске, потому что он требует использования "Excel", "function" и "array" ...

(Кроме того, кто-то может пометить этот вопрос с помощью «формулы-массива», так как у меня нет возможности создавать теги?)

Я чувствую себя комфортно с использованием формул массива и использую их все время, но я ненавижу выяснять, что произойдет методом проб и ошибок. Этот конкретный вопрос возник, когда я делал (упрощенный эквивалент):

=IF(ISNA(udf()), {1,2,3,4}, {5,6,7,8})

где 'udf' возвращал, скажем, {1,2,3}, а формула оценивалась как {5,6,7, # N/A}. Это удивило меня, хотя я могу понять, что происходит, и обойти это. Меня просто беспокоит, что я не могу найти авторитетный источник, который все это излагает.

Ссылка на вопрос по stackoverflow (есть несколько ответов и несколько комментариев, но ничего, что удовлетворяет вопрос прямо сейчас) здесь: https://stackoverflow.com/questions/3998632/is-there-any-documentation-of-the-behavior -of-встроенный-Excel-функции называемых недоумки

РЕДАКТИРОВАТЬ: я сделал большое изменение в версии этого вопроса в stackoverflow и включил часть ответа Нила там. Тем не менее, добавление в значительной степени касается "программирования" формул Excel, поэтому я не буду повторять его здесь.

2 ответа2

2

Я также не знаю ничего полезного в том, что вы делаете: я не могу вспомнить пример использования формул массива (по крайней мере, с массивом, где можно было бы увидеть одну вещь. Вы увидите массивы, используемые в примерах функции INDEX).

Я думаю, что это относительно просто, если вы думаете о том, что произойдет, если вы расширили массив (Есть ли лучшая терминология для этого. Пожалуйста, измените, если вы можете думать об этом). Если вы используете аргумент массива, в котором функция ожидает нормальный аргумент, результатом является массив с тем же числом элементов, что и аргументом массива, причем каждый элемент результирующего массива является тем, чем будет результат с единственным аргументом.

Итак, в вашем первом примере

=IF({1,0,1}, 42, 99)

вы получаете массив

{ IF(1, 42, 99), IF(0, 42, 99), IF(1, 42, 99)}

который выходит как

{ 42, 99, 42 }

В вашем последнем примере

=IF(ISNA({1,2,3}), {1,2,3,4}, {5,6,7,8})

результат

{ IF(ISNA(1),1,5) , IF(ISNA(2),2,6) , IF(ISNA(3),3,7) ,IF(ISNA(),4,8) }

Первые три ISNA возвращают ложное значение, а четвертое дает сбой, так что результат - то, что вы получили. Я думаю, что единственная запутанная вещь здесь может быть, где значение ошибки.

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

0

Чарльз Уильямс опубликовал ссылку на свой веб-сайт Decision Models, на котором есть информация, которую я искал, в своем ответе на stackoverflow:

https://stackoverflow.com/questions/3998632/is-there-any-documentation-of-the-behavior-of-built-in-excel-functions-called-wit/4003413#4003413

Сама ссылка:

http://www.decisionmodels.com/optspeedj.htm

(Весь сайт - превосходный ресурс Excel, и его продукт FastExcel очень хорош, кстати.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .