2015-08-18 3 views
-1

У меня есть формула Excel, которую я написал, у которой есть ошибка. = IFERROR (INDEX ([Testbook2.xlsx] Sheet1! $ A $ 2: $ B $ 6, SMALL (IF ([Testbook2.xlsx] Sheet1! $ B $ 2: $ B $ 6 = "A", ROW ([Testbook2.xlsx ] Sheet1! $ A $ 2: $ A $ 6) -ROW ([Testbook2.xlsx] Sheet1! $ A $ 2) +1), ROW ([Testbook2.xlsx] Sheet1! 1: 1)), 1), «Нет активных Волонтеры ")INDEX и SMALL возвращают только один результат

Код должен выглядеть в другой книге (Testbook2) в столбце, где введенный текст должен быть A или I. Затем предполагается, что все имена будут заменены A рядом с их. Однако он возвращает только первое имя.

Любые идеи о том, почему это могло произойти?

+0

Вы можете нам сообщить, как выглядят ваши данные? Трудно понять, что происходит без дополнительной информации. –

+3

Почему вы думаете, что это sql? –

ответ

1

Я не очень большой поклонник создания формул, более сложных, чем они должны быть. Целью ROW function является создание серии последовательных чисел. Он используется, чтобы отметить позицию в пределах диапазон, а не фактическую строку на листе. Неважно, где ссылается строка; он не должен ссылаться на рабочую книгу/рабочий лист, где вы собираете данные.

Это,

ROW([Testbook2.xlsx]Sheet1!$A$2:$A$6) - ROW([Testbook2.xlsx]Sheet1!$A$2) + 1 
ROW([Testbook2.xlsx]Sheet1!1:1) 

... может быть сокращен до,

ROW($1:$5) 
ROW(1:1) 

Есть 5 клеток в [Testbook2.xlsx] Лист1 $ A $ 2: $ A $ 6, так что все вас require - это число от 1 до 5. ROW(1:1) - это 1, который станет 2, затем 3 и т. д., когда он будет заполнен. Он предоставляет параметр kSMALL function. Неважно, откуда оно взялось.

Как только я получил все, что было на самом деле необходимо, стало очевидно, что ваши формулы работают в текущем состоянии. Тем не менее, это формула массива, а не формула SQL.

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, SMALL(IF([Testbook2.xlsx]Sheet1!$B$2:$B$6="A", ROW($1:$5)), ROW(1:1))), "No Active Volunteers") 

Формулы массива должны быть завершены с Ctrl + Сдвиг + Enter↵. После правильного ввода в первую ячейку они могут быть заполнены или скопированы или правы точно так же, как и любая другая формула. Без специального завершения CSE вы получите только первое значение, а затем ошибки.

Если вы ищете стандартную формулу, которая не требует CSE, то функция AGGREGATE¹ function может обеспечить обработку с псевдо-массивом, не используя CSE.

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, AGGREGATE(15, 6, ROW($1:$5)/([Testbook2.xlsx]Sheet1!$B$2:$B$6="A"), ROW(1:1))),"No Active Volunteers") 

¹ AGGREGATE function была введена с Excel 2010. Он не доступен в более ранних версиях.

Для версий Excel в версии до 2010 года эта стандартная формула также не требует CSE.

=IFERROR(INDEX([Testbook2.xlsx]Sheet1!$A$2:$A$6, SMALL(INDEX(ROW($1:$5)+([Testbook2.xlsx]Sheet1!$B$2:$B$6<>"A")*1E+99, ,), ROW(1:1))),"No Active Volunteers") 

Теперь, когда вы решили передать реальное имя книги, имя листа и диапазоны, которые будут использоваться, здесь работают формулы,

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

=IFERROR(INDEX('[Volunteer Contact list July 2015.xlsm]Volunteers'!$A$2:$A$65, SMALL(IF('[Volunteer Contact list July 2015.xlsm]Volunteers'!$Q$2:$Q$65="A",ROW($1:$64)),ROW(1:1))),"No Active Volunteers") 

в качестве стандартной формуле (со всех диапазонов и того же размера),

=IFERROR(INDEX('[Volunteer Contact list July 2015.xlsm]Volunteers'!$A$2:$A$65, SMALL(INDEX(ROW($1:$64)+('[Volunteer Contact list July 2015.xlsm]Volunteers'!$Q$2:$Q$65<>"A")*1E+99, ,), ROW(1:1))),"No Active Volunteers") 

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

+0

Я пробовал использовать формулу массива и используя требуемые Ctrl, Shift, Enter, однако он всегда возвращает ошибку «Нет активных волонтеров», даже когда я вижу, что некоторые из добровольцев активны. (Когда A было написано в столбце Q). Когда это не формула массива, и я просто попал в нее, он возвращает первый результат из списка. Я немного изменил вашу функцию при ее тестировании в реальной таблице. Любые идеи о том, почему это может происходить. – JOsh

+0

= IFERROR (ИНДЕКС («[Список контактов волонтеров июль 2015.xlsm] Волонтеры! $ A $ 2: $ O $ 65, SMALL (IF ('[Волонтерский список контактов июль 2015.xlsm] Добровольцы! $ Q $ 3: $ Q $ 65 = «A», ROW ($ 1: $ 65)), ROW (1: 1))), «Нет активных волонтеров») – JOsh

+0

Вернитесь назад и перечитайте то, что я нашел время, чтобы напечатать выше. Решение должно быть немедленно очевидным. – Jeeped

Смежные вопросы