Определите первую и последнюю дату финансового года из списка случайных дат - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно найти первую и последнюю дату финансового года из списка случайных дат.

Example:

Dates:
28-Mar-2015
01-Apr-2016
05-Apr-2016
.
.
.
30-Mar-2016
31-Mar-2016
03-Apr-2017
04-Apr-2017
.
.
.
26-Mar-2018
29-Mar-2018
05-Apr-2018
07-Apr-2018
.
.
10-May-2018
.
.
Till Date

Result:
FY 16-17       -> First date = 01-Apr-2016 & Last Date = 31-Mar-2017
FY 17-18       -> First date = 03-Apr-2017 & Last Date = 29-Mar-2018
FY 18-19 (Current) -> First date = 05-Apr-2018 & Last Date = Till date (Last possible date)

- Подход № 1: Для любого финансового годаполучить дату в жестком коде 16 апреля и 17 марта месяца, но она не действует

Set fystart = Worksheets("Data Sheet").Range("E:E").Find(CDate("Apr-2016"), Lookat:=xlWhole)
Set fyend = Worksheets("Data Sheet").Range("E:E").Find(CDate("Mar-2017"), searchdirection:=xlPrevious, Lookat:=xlWhole)

Но она обнаруживается только 01 апреля 2016 года или 01 марта 2017 года

- Подход № 2:

Попытка использовать функцию MIN & MAX, но возвращает Min & Max всего списка случайных дат

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 05 июня 2018

Подход не VBA: вы можете использовать IF и MIN или MAX для создания формулы массива, чтобы сделать это (вводится с помощью Ctrl + Shift + Введите ).

Поскольку ваш финансовый год начинается 01 апреля и заканчивается 31 марта следующего года, я добавил два вспомогательных столбца: «BEGINS» и «ENDS», ссоответствующие даты ниже.

table

Формула для «ПЕРВОЙ ДАТЫ»: {=MIN(IF($E$1:$E$13>=B16,$E$1:$E$13))}, где $E$1:$E$13 - ваш список дат, а B16 - это дата «Begins».

Аналогично, «LAST DATE» равен {=MAX(IF($E$1:$E$13<=C16,$E$1:$E$13))}, где C16 - это дата «Ends».

Это работает, потому что IF($E1:$E$13<=C16... возвращает«отфильтрованный» массив дат, который вы затем можете найти MAX или MIN из.

...