Формула Excel — Есть ли способ выполнить операторы if для одной и той же ячейки запроса для n-й ячейки перед переходом к следующей последовательной ячейке запроса

#excel #if-statement #excel-formula

#excel #if-statement #excel-формула

Вопрос:

У меня есть лист1, который содержит следующий набор данных A

 ColumnA:    ColumnB:      ColumnC:      ColumnD:

Row1:        June 1        June 2        June 3
Row2:
Row3: A      Apple         Apple         Orange
Row4: B      Orange        Orange        Orange
Row5: C      Orange        Apple         Orange
Row6: D      Pear          Apple         Pear
 

На этом листе у меня есть следующая таблица

        Consumed fruits
        **June 1**             **June 2**            **June 3**
     Apple Orange Pear      Apple Orange Pear     Apple Orange Pear

A    True                   True                        True
B          True                   True                  True
C          True             True                        True
D                 True      True                               True
 

Где для каждой ячейки я добавляю следующий код, относящийся к DataSet

Для 1 июня, A, Apple

 =IF(B3="Apple","True","")
 

1 июня, A, оранжевый

 =IF(B3="Orange","True","")
 

1 июня, A, Pear

 =IF(B3="Pear","True","")
 

Но когда я перетаскиваю формулу на следующую дату (2 июня, A, Apple), она меняется на

 =IF(B6="Apple","True","")
 

Вместо

 =IF(B4="Apple","True","")
 

Можно ли в любом случае сохранить ячейки запроса постоянными для 3 формул, прежде чем увеличивать только одну ячейку запроса в следующих 3 формулах?

Комментарии:

1. В небольшой базе данных вы можете использовать КОСВЕННЫЙ (ADDRESS()). Но это изменчивая функция, которая замедлит работу вашей книги. Следовательно, не рекомендуется для более крупной книги. Энергонезависимое решение будет включать использование INDEX() . Если ваши данные находятся в реальной таблице, диапазон, подлежащий индексации, уже существует. В противном случае вам пришлось бы ее настроить, и для этой цели вы бы использовали динамический именованный диапазон. Ваши данные в таблице? Знаете ли вы, как настроить динамический именованный диапазон?

2. Привет, Вариатус. Спасибо вам за ваш ответ. Да, мои данные находятся в таблице. Лист1 содержит dataA, и я надеялся создать таблицу в Листе2, которая содержала бы все данные в Листе1. Нет, я не знаю, как настроить динамический диапазон — я знаю только базовые формулы Excel — так что любой ввод очень ценится!

Ответ №1:

Вот формула. Это в B11 на скриншоте ниже и скопировано оттуда в B11: J14.

 =IF(INDEX(Table1,MATCH($A11,Table1[Column1],0),MATCH(TEXT(INDEX($9:$9,0,COLUMN()-MOD(COLUMN()-2,3)),"mmm-dd"),Table1[#Headers],0))=B$10,TRUE,"")
 

введите описание изображения здесь

Формулы в B16: B20 являются компонентами окончательной формулы. Я использовал их для тестирования. Они могут помочь вам понять, что делает формула. Вот еще одна помощь в этом направлении.

Основной синтаксис функции INDEX() таков INDEX([Range address], [Row number], [Column number]) . Диапазон может быть именованным диапазоном, например «Table1». Номера строк и столбцов могут быть жесткими числами, но предоставляются функциями MATCH() в моей формуле.

Excel хранит дату, например Jun-01 , в виде числа, считая дни с 30 декабря 1899 года. Однако в заголовках таблицы Excel преобразовал даты в строки. Поэтому значение ячейки B1 равно «Jun-01», именно то, что вы видите, но значение ячейки B9 равно 37043, что является числом для 01 июня 2001 года. Год был предоставлен Excel, потому что я не вводил ни одного года (я ожидал, что он предоставит текущий 2020 год, но здесь это не имеет значения). Чтобы найти дату в заголовках таблицы, реальная дата в B9 преобразуется в строку, в TEXT(B9,"mmm-dd") которой год не учитывается. Эта строка используется функцией СОПОСТАВЛЕНИЯ для поиска правильного столбца таблицы, используя значения в строке 9 для примеров. Конечно, если у вас нет реальных дат в вашем эквиваленте строки 9, но строки, моя формула не будет работать, потому что преобразование не требуется. Извлеките его.

Итак, строка 9 важна для моей формулы. Найдите $9:$9 и измените эту ссылку на строку, в которой у вас есть даты в вашей выходной таблице (A9: J14 на моем рисунке). Если ваша выходная таблица является реальной таблицей, ссылка на лист будет работать, но вы можете захотеть изменить ее на что-то вроде Table2[#Headers] . Если вы сделаете это, также может потребоваться некоторая корректировка столбцов.

Поместите формулу =MOD(COLUMN()-2,3) в пустую строку и скопируйте вправо. если вы вставили оригинал в столбец B, это приведет к серии повторений 0, 1 и 2. Они используются, чтобы всегда ссылаться на первый столбец набора из 3, например, COLUMN()-0, COLUMN()-1 и COLUMN() -2. В этой формуле COLUMN()-2 это относится к столбцу листа B. Формула выдает 0 в столбце B. Измените это число так, чтобы формула выдавала ноль в столбце, в котором у вас есть дата. Протестируйте этот компонент и внесите изменения в большую формулу после того, как узнаете, что она работает так, как должна. Обратите внимание, что если дата находится в объединенных ячейках, Excel сохраняет ее в первой ячейке объединенной области. Остальные ячейки пусты, насколько это касается Excel.

Я надеюсь, что вы сможете взять на себя управление этой formnula. Удачи.

Комментарии:

1. Привет, Вариатус, спасибо за подробное объяснение! Это действительно хорошо и удобно. Я поиграл с различными частями формулы, чтобы посмотреть, получится ли у меня. Я сталкиваюсь с проблемой, когда я пытаюсь перетащить ее, эта часть MATCH($A11,Table1[Column1],0) становится MATCH($A11,Table1[Jun-01],0) , и она создает # N / A в ячейке

Ответ №2:

Или,

В B11 скопировано справа налево J11 и все скопировано вниз :

 =IF(INDEX($B$3:$D$6,MATCH($A11,$A$3:$A$6,0),MATCH(LOOKUP(9^9,$B$9:B$9),$B$1:$D$1,0))=B$10,TRUE,"")
 

введите описание изображения здесь

Комментарии:

1. Привет, bosco_yip! Это тоже сработало отлично! Спасибо!