Вложенный оператор IF для чтения и вывода пользовательских групп дат - PullRequest
0 голосов
/ 03 марта 2019

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

Пока я пробовал:

=IF(D2 <= DATEVALUE("28/07/2017"),DATEVALUE("Jul-2017"), 
 IF(D2 <= DATEVALUE("26/08/2017"),DATEVALUE("Aug-2017"), 
    IF(D2 <= DATEVALUE("29/09/2017"), DATEVALUE("Sep-2017"), 
       IF(D2 <= DATEVALUE("27/10/2017"), DATEVALUE("Oct-2017"), 0)))) +
          IF(D2 <= DATEVALUE("24/11/2017"), DATEVALUE("Nov-2017"),
             IF(D2 <= DATEVALUE("29/12/2017"), DATEVALUE("Dec-2017"),
                IF(D2 <= DATEVALUE("26/01/2018"), DATEVALUE("Jan-2018"),
                   IF(D2 <= DATEVALUE("23/02/2018"), DATEVALUE("Feb-2018"), 0)))) +
                      IF(D2 <= DATEVALUE("20/03/2018"), DATEVALUE("Mar-2018"),
                         IF(D2 <= DATEVALUE("27/04/2018"), DATEVALUE("Apr-2018"),
                            IF(D2 <= DATEVALUE("25/05/2018"), DATEVALUE("May-2018"),
                               IF(D2 <= DATEVALUE("29/06/2018"), DATEVALUE("Jun-2018"),
                                  IF(D2 <= DATEVALUE("27/07/2018"), DATEVALUE("Jul-2018"),
                                     IF(D2 <= DATEVALUE("24/08/2018"), DATEVALUE("Aug-2018"), 0)))))) +
                                        IF(D2 <= DATEVALUE("28/09/2018"), DATEVALUE("Sep-2018"),
                                           IF(D2 <= DATEVALUE("26/10/2018"), DATEVALUE("Oct-2018"),
                                              IF(D2 <= DATEVALUE("23/11/2018"), DATEVALUE("Nov-2018"),
                                                 IF(D2 <= DATEVALUE("28/12/2018"), DATEVALUE("Dec-2018"),
                                                    IF(D2 <= DATEVALUE("25/01/2019"), DATEVALUE("Jan-2019"),
                                                       IF(D2 <= DATEVALUE("22/02/2019"), DATEVALUE("Feb-2019"),
                                                          IF(D2 <= DATEVALUE("29/03/2019"), DATEVALUE("Mar-2019"), 0))))))) +
                                                             IF(D2 <= DATEVALUE("26/04/2019"), DATEVALUE("Apr-2019"), 
                                                                IF(D2 <= DATEVALUE("24/05/2019"), DATEVALUE("May-2019"), 
                                                                   IF(D2 <= DATEVALUE("28/06/2019"), DATEVALUE("Jun-2019"), D2)))

Не работает - я получаю числовой вывод вместо даты.

Должно быть лучше / эффективнееспособ сделать это.

Кто-нибудь может порекомендовать другой подход?Возможно через UDF в VBA?

Редактировать - опубликовать таблицу диапазонов и требуемый вывод

Start date  End date    Month
12/30/2017  1/26/2018   Jan-18
1/27/2018   2/23/2018   Feb-18
2/24/2018   3/30/2018   Mar-18
3/31/2018   4/27/2018   Apr-18
4/28/2018   5/25/2018   May-18
5/26/2018   6/29/2018   Jun-18
6/30/2018   7/27/2018   Jul-18
7/28/2018   8/24/2018   Aug-18
8/25/2018   9/28/2018   Sep-18
9/29/2018   10/26/2018  Oct-18
10/27/2018  11/23/2018  Nov-18
11/24/2018  12/28/2018  Dec-18
12/29/2018  1/25/2019   Jan-19
1/26/2019   2/22/2019   Feb-19
2/23/2019   3/29/2019   Mar-19
3/30/2019   4/26/2019   Apr-19
4/27/2019   5/24/2019   May-19
5/25/2019   6/28/2019   Jun-19

Ответы [ 3 ]

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

Я не уверен насчет осложнений, с которыми вы сталкиваетесь, но для получения желаемых результатов по вашей таблице вы также можете использовать более простую формулу, такую ​​как

=TEXT(EOMONTH(A2,1),"YY-MMM")

ИЛИ

=EOMONTH(A2,1) и отформатируйте ячейку в формате yy-mmm.

, где A2 содержит дату начала.

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

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

Предполагая, что таблица с датами начала периода расположена на B2:D25, а даты на F2:F25и J2:J25

Введите эту формулу, чтобы получить финансовый период в виде серийного номера в G2, затем скопируйте его в G3:G25 и K2:K25:

=VLOOKUP(F3,$B$2:$D$25,3,1)

Введите эту формулу дляполучите финансовый период в виде текста в H2, затем скопируйте его в H3:H25 и L2:L25:

=TEXT(VLOOKUP(F3,$B$2:$D$25,3,1),"mmm-yyyy")

enter image description here

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

Шаблон в вашей таблице:

  1. Последняя пятница каждого месяца является отрезанным месяцем, что означает ....
  2. Последняя суббота каждого месяцаначало следующего месяца

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

  1. Если раньше, CSTMonth = Inputs Month
  2. Если равно, CSTMonth = Inputs Month
  3. Если после, CSTMonth = Month after Inputs Month

Option Explicit

Public Function CSTMonth(Target As Range)

If IsDate(Target) Then

  Dim LastDay As Date: LastDay = WorksheetFunction.EoMonth(Target, 0)
  Dim LastFri As Date: LastFri = LastDay - (Weekday(LastDay + 1) Mod 7)

    If Target <= LastFri Then
        CSTMonth = Format(Target, "MMM-YY")
    Else
        CSTMonth = Format(LastDay + 1, "MMM-YY")
    End If

End If

End Function

Преимущество поиска шаблона в вашей таблице состоит в том, что его никогда не нужно будет обновлять с помощью brute force.Использование вашего подхода будет означать жесткое кодирование дат начала и окончания каждого месяца.

...