如何过滤每周最后记录的数据

时间:2019-05-16 03:15:23

标签: excel vba excel-formula

我有一个特定项目的每日销售价值的大数据集。我想知道每周最后一天ITEM的价格是多少。通常,最后一个工作日是星期五,但是如果您没有星期五的数据,那么我们需要获取前一个工作日的数据(星期四)。

星期一被认为是一周的第一天。

我的数据如下所示: DATA SET

数据在单元格A2:C13中。

我的预期输出如下所示: Expected Output

请帮助VB宏甚至简单的excel公式。

2 个答案:

答案 0 :(得分:0)

您可能想尝试使用使用LOOKUP函数的公式来search the list from bottom to top.

然后,将INDEX和MATCH结合使用也可以使您走上正确的道路。

编辑:我现在意识到我正误导您,因为我以为您在问其他问题!我能看到的最直接的方法如下:

  • 使用WEEKDAY()提取工作日值(如您所做的那样),不同的是将值保留为数字(1表示星期日,7表示星期六)。
  • 检查这些日子中的每一天,看看是否比其前一天更早(即,值更小)。如果不是,我们知道一周开始了,那个单元格是一周的最后一天。因此,显示其值。

Example code

当然,这是假设您的数据中没有星期六-否则,星期六将被列为一周的结束时间。如果您很狡猾,则可以解决这个难题!

答案 1 :(得分:0)

谢谢,泰勒。

您的建议对我朝正确方向做出努力提供了很大帮助。

我的方法如下:

  1. 首先,我以降序对数据进行排序,以便可以将所有最新数据放在顶部。
Range("AW4:BE999999").Sort Key1:=Range("BC4:BC999999"), order1:=xlDescending, Header:=xlYes
  1. 从日期创建一个字符串“ YEAR”和“ WEEKNUM”。这样,我就可以将特定星期中的所有天分组。使用的公式是:
    =(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宏和公式,因此感到高兴。

请评论其他更好的方法。不断改进我们的工作总是好事。