Матричная формула в Excel для подсчета последовательного появления между указанным диапазоном - PullRequest
0 голосов
/ 20 марта 2019

Я знаю немного о матричной формуле, но не могу найти, как решить эту проблему. Можете ли вы помочь мне с формулой, чтобы решить эту проблему? В приведенной ниже таблице пользователь вводит значение против From и To. Ниже приведены данные. Есть ли формула, которая будет выбрасывать значения в результате? Шаги для вычисления до результата

  1. Идет к столбцу со значением to (в данном примере 6)
  2. Идет к первой строке данных.
  3. Поиск значения ниже 6 (в первом ряду он оранжевый)
  4. Подсчитывает количество последовательных вхождений от 6 до 4 (оранжевый, оранжевый, яблочный)
  5. Возвращает 2

    From    4   To  6           

1         2         3       4       5       6       7       8   Result

Apple   Orange  Mango   Apple   Orange  Orange  Lemon   Lemon   2

Mango   Apple   Lemon   Lemon   Lemon   Lemon   Lemon   Mango   3

Mango   Apple   Lemon   Lemon   Orange  Lemon   Lemon   Mango   1

Большое спасибо, что заглянули в это.

1 Ответ

0 голосов
/ 20 марта 2019

Это довольно сложно, но:

enter image description here

{=COUNTA(INDIRECT(ADDRESS(ROW(),$B$1,4)&":"&ADDRESS(ROW(),$D$1,4)))-IFERROR(MAX(IF(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))<>INDIRECT(ADDRESS(CELL("row",A4),$D$1,4)),COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4)))-MIN(COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))))+1)),0)}

Обратите внимание, что это формула массива, и ее нужно вводить через: Ctrl Shift Enter

Небольшая разбивка (в этом примере мы будем использовать ячейку I4):

Первый бит формулы: {=COUNTA(INDIRECT(ADDRESS(ROW(),$B$1,4)&":"&ADDRESS(ROW(),$D$1,4)))-

  • ROW() используется для возврата строки текущей ячейки, например: Row() вернет значение 4.
  • ADDRESS() используется для возврата адреса ячейки, например: ADDRESS(ROW(),$B$1,4) вернет относительный адрес;D4.Та же логика для ADDRESS(ROW(),$D$1,4), которая возвращает F4.
  • INDIRECT(), затем используется для объединения двух адресов в рабочий диапазон.
  • COUNTA() используется для подсчетааргументы в этом конкретном диапазоне, в нашем примере он вернет 3.

Второй бит формулы: IFERROR(MAX(IF(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))<>INDIRECT(ADDRESS(CELL("row",A4),$D$1,4)),COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4)))-MIN(COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))))+1)),0)}

  • Для некоторыхПричина, по которой ROW() не будет работать с INDIRECT() при извлечении / сравнении данных, поэтому обратите внимание на использование CELL(), в этом случае оно заменяет ROW(), но возвращает то же значение!
  • ADDRESS()снова используется для объединения двух диапазонов таким же образом, как указано выше.
  • INDIRECT() снова используется, чтобы иметь возможность работать со значениями в этом диапазоне.
  • IF() используетсячтобы проверить, отличаются ли наши значения в этом диапазоне, обратите внимание на <>, чем наше значение в столбце 6, значение, выбранное в ячейке D1.
  • В этом случае, и потому что это формула массиварезультат будет выглядеть как {TRUE,FALSE,FALSE}.Для тех случаев, когда это на самом деле TRUE, он затем перейдет к выражению TRUE нашего IF().
  • . В этом утверждении мы хотим знать COLUMN() минус столбец MIN(),настолько минимальный, что вернет ({4,5,6}-{4,5,6})+1 результаты в {1,2,3}
  • Этот последний результат против более раннего {TRUE,FALSE,FALSE} или, скорее, {1,0,0} приведет к {1,FALSE,FALSE} и, очевидно, MAX() этого будет1.
  • IFERROR() вернет 0, если приведенный выше оператор возвращает ошибку (если никакое значение не отличается от значения для поиска).
  • Например, это приведет к 3-1=2

Для лучшего понимания вы должны изменить значения в ячейке B1 и ячейке D1 и использовать оценку, чтобы увидеть, что происходит!

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