Как отфильтровать данные последней записи каждой недели - PullRequest
0 голосов
/ 16 мая 2019

У меня большой набор данных о ежедневной продажной стоимости конкретного товара.Я хочу знать, какова была цена ПУНКТА в последний день каждой недели.Обычно последний рабочий день - пятница, но если у вас нет данных за пятницу, нам нужно получить данные за предыдущий рабочий день (четверг).

Понедельник считается первым днем ​​недели.

Мои данные выглядят примерно так: DATA SET

Данные находятся в ячейках A2: C13,

Мой ожидаемый результат показан ниже: Expected Output

Пожалуйста, помогите с макросом VB или даже простой формулой Excel.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Спасибо, Тайлер.

Ваше предложение очень помогло мне направить усилия в правильном направлении.

Я сделал так:

  1. Сначала я отсортировал данные в порядке убывания даты, чтобы у меня были все самые последние данные вверху.
Range("AW4:BE999999").Sort Key1:=Range("BC4:BC999999"), order1:=xlDescending, Header:=xlYes
  1. С даты создания строки «ГОД» и «НЕДЕЛЯ». Таким образом, я смог сгруппировать все дни в определенную неделю. Используемая формула:
    =(TEXT(BC5,"yyyy"))&(TEXT(WEEKNUM(BC5),"00"))
  1. Затем я дал уникальный номер каждой записи. Лучший способ, о котором я могу подумать, это дать номер строки, к которой относится запись.
    =ROW(AY5)
  1. Теперь, используя функцию VLOOKUP, я получил все записи, соответствующие строке, которую я создал на шаге 2
=VLOOKUP(AZ5,AZ:BD,5,FALSE)

Я применил приведенную выше формулу, чтобы получить все нужные мне столбцы.

  1. Теперь я удалил все повторяющиеся строки, используя следующую формулу:
Cells.RemoveDuplicates Columns:=Array(1)

Теперь оставшиеся строки являются ожидаемыми.

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

Пожалуйста, прокомментируйте другие лучшие способы сделать это. Всегда хорошо продолжать улучшать нашу работу.

0 голосов
/ 16 мая 2019

Вы можете попробовать использовать формулу с помощью функции LOOKUP, чтобы выполнить поиск по списку снизу вверх.

После этого комбинация INDEX и MATCH может помочь вамправильный путь.

Редактировать: Теперь я понимаю, что сбил вас с пути, потому что думал, что вы спрашиваете что-то еще!Самый простой способ, который я могу увидеть, заключается в следующем:

  • используйте WEEKDAY (), чтобы вытащить значения дня недели (как вы это сделали), за исключением того, что оставьте значения в виде чисел (1 - воскресенье, а 7 - воскресенье).Суббота).
  • Проверьте каждый из этих дней, чтобы увидеть, предшествует ли он (т. Е. Имеет меньшее значение), чем день над ним.Если нет, мы знаем, что неделя началась заново, и эта ячейка - последний день недели.Следовательно, отобразите его значение.

Example code

Конечно, это предполагает, что в ваших данных нет суббот, иначе суббота будет указана в списке.как конец недели.Если вы хитры, вы можете решить эту дилемму!

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