Комплекс ИФ. формула в Excel - PullRequest
       22

Комплекс ИФ. формула в Excel

1 голос
/ 11 февраля 2020

Я проверил различные сообщения по формулам IF, но не могу найти способ получить правильный результат в своем отчете. Я управляю доставкой и хочу рассчитать дни задержки на основе данных из отчета о доставке. Хитрость в том, что задержка будет зависеть от состояния доставки, так как в каждом случае мне приходится учитывать разные даты и столбцы в Excel. Это данные:

Статус доставки:

  1. Подтверждено
  2. Разгружено
  3. Разгрузка
  4. Не подтверждено
  5. Начато
  6. На маршруте
  7. Ожидается получение
  8. Подготовлено

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

Ниже вы можете увидеть столбцы, которые содержат соответствующие даты для расчетов:

Reference columns for calculations

Статус поставки и контрольная дата:

  1. Подтверждено - D
  2. Не загружено - D
  3. Разгрузка - D
  4. Не подтверждено - S
  5. Запущено - D
  6. В пути - S
  7. Ожидание посадки - E
  8. Подготовлено - S

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

=IF(C2="Confirmed";(TODAY()-D2);IF(C2="Unloaded";(TODAY()-D2);IF(C2="Unloading";(TODAY()-D2);IF(C2="Not confirmed";(TODAY()-S2);IF(C2="Started";(TODAY()-D2);IF(C2="In route";(TODAY()-S2);IF(C2="Pick-up pending";(TODAY()-E2);IF(C2="Prepared";(TODAY()-S2);"null"))))))))

Вы случайно не представляли, где я делаю ошибку, которую не вижу? Буду благодарен за любую помощь. Если это также актуально, я использую Excel 2016.

1 Ответ

0 голосов
/ 11 февраля 2020

Разбив, чтобы длинная строка стала читабельной.

=IF(C2="Confirmed";
     (TODAY()-D2);
     IF(C2="Unloaded";
       (TODAY()-D2);
       IF(C2="Unloading";
         (TODAY()-D2);
         IF(C2="Not confirmed";
            (TODAY()-S2);
            IF(C2="Started";
              (TODAY()-D2);
              IF(C2="In route";
                (TODAY()-S2);
                IF(C2="Pick-up pending";
                  (TODAY()-E2);
                  IF(C2="Prepared";
                    (TODAY()-S2);
                    "null"
                  )
                )
              )
            )
          )
        )
      )
    )

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

Итак, я создал эти два столбца. Один - это текстовый статус, который мы ищем.
Другой - расчетная дата.

Одна дата VLOOKUp

Предполагая, что D2, S2 и E2 являются фиксированными полями, я сделал формулу =TODAY() - $D$2

vertical lookup

Тогда просто сделать VLOOKUP в правильном поле.
Поскольку мы работаем с полем типа даты, нам нужно преобразовать число в текст, чтобы получить полную дату. (Я использовал JJ на скриншоте в течение многих лет, потому что у меня есть голландский язык)
Затем мы должны обработать, когда VLOOKUP ничего не может найти, для этого мы используем IFERROR.

=IFERROR(TEXT(VLOOKUP(F6;$A$2:$B$9;2);"MM-DD-YY");"NULL")

vlookup

И теперь у вас есть простая таблица поиска, которую вы можете разместить где угодно, спрятать на вкладке работника и т. Д. c .. где вы можете вычислить ваши значения, где вы можете добавлять и удалять значения.

Много строк, много дат

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

Мы все еще можем использовать VLOOKUP, чтобы сделать нашу жизнь немного проще

Предполагая, что в столбцах есть даты D, E и S

=IFERROR(DATEDIF(TODAY();INDIRECT(ADDRESS(ROW();VLOOKUP(F2;$A$2:$B$9;2;FALSE)));"d");"NULL")

Мы используем VLOOKUP, чтобы увидеть, какой столбец нам нужно искать. Здесь мы используем номер для столбца, а не букву.
Затем используйте ADDRESS, чтобы получить ссылку на адрес Excel для текущего ROW(), и столбец, который мы нашли с помощью vlookup
Мы направляем его через INDIRECT, чтобы мы могли получить значение из этой целевой ячейки.
Затем мы получаем DATEDIFference в дней со смещения сегодня. Чтобы все было чистым, мы завертываем его в ИСПОЛЬЗОВАНИЕ.

vlookup power

  • Вы можете использовать INDEX($D2:$S2;0;VLOOKUP($F2;$A$2:$B$9;2;FALSE)), чтобы получить то же самое эффект, как указывает Dirk Reichel , но вам следует помнить, что индекс используется с начала диапазона матрицы. Здесь матрица начинается со строки D. Таким образом, D2 - это индекс 1, а не 4, как в моем исходном методе, поэтому вам необходимо соответствующим образом настроить таблицу поиска.
...