1

Основной ответ на мой вопрос представлен здесь: Как найти значение в списке и вернуть несколько соответствующих значений. Однако, как только формула введена, мне нужно перетащить или скопировать / вставить формулу, чтобы получить остальные соответствующие значения. Цитировать статью:

Когда вы вводите или заполняете эту формулу в последующих ячейках, формула возвращает последующие соответствующие значения

Однако у меня нет возможности узнать, сколько значений ожидать, и, следовательно, нет способа узнать, как далеко скопировать / вставить формулу. Копирование и вставка полностью завершает работу Excel.

РЕДАКТИРОВАТЬ Если мои данные выглядят так:

Tag | Loc | Time
---|---|----
NN | IN | 7
CD | OUT | 4
VB | OUT | 12
NN | OUT | 4
NN | IN | 2
NN | OUT | 6
VB | OUT | 23
VB | OUT | 4
VB | IN | 6

Я хотел бы выполнить t-тесты для каждого тега, сравнивая времена IN и OUT. Используя формулу INDEX, я мог бы, гипотетически, подтянуть все времена, например, NN & OUT.

2 ответа2

2

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

Однако эта настройка крайне неэффективна, особенно если рассматриваемый набор данных является динамическим, потенциально расширяемым.

Дело в том, что если у вас есть такие настройки, как:

= IFERROR([ some_large_array_formula ], "")

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

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

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

Очевидно, что этот второй метод предпочтительнее на практике. Проблема со структурой IFERROR (еще хуже, если вы используете 2003 или более раннюю версию и должны использовать повторяющийся IF (предложение ISERROR)) в том, что в строках, в которые формула копируется сверх того, что эффективно необходимо, нет ничего для предотвращать ненужные вычисления формулы большого массива ресурсов.

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

Гораздо, намного лучше, чем этот неработающий подход IFERROR, который, к сожалению, почти повсеместно рекомендуется для этой установки вокруг различных источников в Интернете, - это, как указывает Джеймс, использовать одну "вспомогательную" ячейку, чтобы сначала определить число строки, которые мы ожидаем, будут возвращены, а затем ссылаются на это в формуле

Так, например, если опубликованные данные были в A1:C10 (с заголовками в строке 1) и мы добавили, например, NN в E1 и OUT в F1, мы сначала должны ввести одну формулу, не являющуюся массивом, например, в G1:

= SUMPRODUCT(0+(А2: А10 = Е1), 0+(В2: В10 = F1))

Формула массива ** ** в нашей первой ячейке выбора будет:

= IF(ЧСТРОК ($ 1:1)> $ G $ 1, "", ИНДЕКС ($ C $ 2:$ C $ 10, МАЛЫЙ (ЕСЛИ ($ A $ 2:$ A $ 10 = $ E $ 1, ЕСЛИ ($ B $ 2:$ В $ 10 = $ F $ 1, СТРОКА ($ C $ 2:$ C $ 10)-MIN (СТРОКА ($ C $ 2:$ C $ 10))+1)), ЧСТРОК ($ 1:1))))

и скопировать по мере необходимости.

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

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

= IF(РЯДЫ ($ 1:1)> $ G $ 1 ""

означает, что в строках, превышающих ожидаемое количество возвратов, предложение IF возвращает TRUE, поэтому возвращается пустое значение. Хорошая часть функции IF состоит в том, что если переданное ей предложение имеет значение TRUE, то часть FALSE - здесь формула массива с большими ресурсами - даже не учитывается при расчете.

Это совсем не так с версией IFERROR, которая продолжает отрабатывать, не обращая внимания на тот факт, что его вычисления бесполезны и обременительны для ресурса.

С уважением

** Формулы массива вводятся не так, как «стандартные» формулы. Вместо того, чтобы просто нажимать ENTER, вы сначала удерживаете CTRL и SHIFT, и только потом нажимаете ENTER. Если вы сделали это правильно, вы заметите, что Excel заключает в формулу фигурные скобки {} (хотя не пытайтесь вставить их вручную).

0

Я бы сказал, отформатируйте ваши данные в таблице (Home> Format as Table) или создайте динамический именованный диапазон для ваших данных. Это решает проблему незнания того, сколько данных у вас будет, поскольку диапазон / таблица будет увеличиваться по мере добавления новых данных, в то время как вы все еще можете ссылаться на диапазон / таблицу по имени.

tldr: отформатировать в виде таблицы, если это первая таблица в вашей книге, таблице будет присвоено имя "Таблица1"

Я бы предложил создать сводную таблицу в этой точке (используя имя вашей таблицы / диапазона в качестве источника) и поместить "Tag" в метки строк, "Loc" в метки столбцов и "Time" в значения. Вы получите данные, которые выглядят так:

. IN OUT CD 4 NN 9 10 VB 6 39

Затем вы можете добавить простую формулу справа и перетащить вниз, чтобы определить разницу между IN и OUT.

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