2015-07-01 4 views
2

Я использую формулу массива, чтобы возвращать суммы и рассчитывать на большой набор данных.Игнорировать пустые параметры в формуле массива Excel

Формула массива может содержать до 3 аргументов, но формула должна быть размещена, если любые или все аргументы равны <blank>, БЕЗ использования VBA.

Например

A1 = "Australia" 
B1 = "Finance" 
C1 = "Female" 

D1 содержит формулу

D1 = {count(if((region=A1)*(sector=B1)*(gender=C1),population))} 

Иногда один из критериев будет пустым

A1 = "Australia" 
B1 = <blank> 
C1 = "Male" 

В этом случае я хотел бы формулу, чтобы вернуться эквивалент:

D1 = {count(if((region=A1)*(gender=C1),population))} 

В крайнем случае, A1, B1 и C1 может быть все пустым, в этом случае формула D1 должен возвратить эквивалент Count(population)

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

E1 = "(region=A1)*(sector=B1)*(gender=C1)" 

, а затем использовать строку в качестве аргумента в формуле массива

D1 = {count(if(E1,population))} 

, но я мог бы найти способ, чтобы получить эту работу.

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

Любые идеи приветствуются.

Спасибо.

ответ

0

Вы пробовали Nz()? Инкапсулируйте свой текущий код и попробуйте. У меня были проблемы с пробелами/нулями здесь и там.

Другим вариантом может быть заявление IIF(). Но это может не сделать то, что вы хотите. Вот ссылки на ссылки:

Nz: http://www.techonthenet.com/access/functions/advanced/nz.php

IIF: http://www.techonthenet.com/access/functions/advanced/iif.php

+0

PS - Вы можете использовать оба из них в без необходимости открывать модуль VBA. – JuniperSquared

+1

Довольно уверен, что OP использует Excel, а не Access, и ни одна из этих формул не является допустимой формулой Excel. – nicholas79171

+0

А, я виноват! Я читал это как Access. Извиняюсь. – JuniperSquared

0

Вам не нужно VBA и вы даже не нужна формула массива. Вы можете использовать SUMPRODUCT() с подстановочными знаками.

Скажем, у нас есть:

enter image description here

В A2 входят:

=IF(A1="","*",A1) 

и скопировать в поперечнике. Это отобразит звездочку или значение выше.

Затем используйте:

=SUMPRODUCT(ISNUMBER(SEARCH(A2,G1:G10,1))*ISNUMBER(SEARCH(B2,H1:H10,1))*ISNUMBER(SEARCH(C2,I1:I10,1))) 

Это способ получить SUMPRODUCT() принять звездочку в качестве шаблона:

enter image description here

+0

, который выглядит гораздо более элегантным решением, чем то, что я наконец придумал. Мне придется поиграть с ним еще немного, так как я не совсем понял, как это работает, и мне интересно, будет ли он работать с числовыми значениями. Если столбец J был числовым, и я хотел выполнить SUM, AVERAGE, MAX и MIN на них на основе значений в G, H и я бы это работало? Это то, что я в итоге придумал: = SUM (IF (IF (ISBLANK ($ A3), region <> "x", region = $ A3) * IF (ISBLANK ($ C3), сектор <> "x ", sector = $ C3) * IF (ISBLANK ($ D3), gender <>" x ", gender = $ D3), население)) где" x "- это фиктивная переменная, возвращаемая с 'TRUE' значениями –

+0

You ** может ** быть в состоянии получить этот тип функциональности с помощью * AutoFilter * и проанализировать результаты с помощью функции ** SUBTOTAL() **. –

+0

См. Также http://stackoverflow.com/questions/31159748/create-a-dynamic-if-statement-in-excel-without-vba, который появляется на тот же вопрос, заданный несколькими часами ранее. – DMM