如何转换WeekNum如果年份不是在特定的工作日开始(如星期五)

问题描述 投票:0回答:1

我目前正在使用Excel宏,该宏可生成每周数据。我必须准备多个报告,其中我的周开始日期不同,例如如果对于一个报告,我的星期开始日是“星期五”,而对于其他报告,我的星期开始日是“星期一”

目前,我正在分多个步骤进行此操作:

  1. 首先,我要从excel来源获取所有数据,并添加一个公式以获取特定一周内的所有记录。我已将“星期五”视为一周的第一天。

  2. 我按降序排列记录,并获得每个AZ列的唯一值。这样,我得到了每周的最新记录,这就是我一直在寻找的内容。

我为此使用的代码如下:

    Range("Data").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Range("$A$1:$A$2"), _
    CopyToRange:=Range("$BB$4:$BD$4")

    FilterDataLastRow = Cells.Find(What:="*", _
    After:=Range("BA999999"), _
    LookAt:=xlPart, _
    LookIn:=xlFormulas, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious, _
    MatchCase:=False).Row

    ' Sort data in descending order of date
     ' Range("WeeklyFilteredData").Sort Key1:=Range("$BB$4:$BB$999999"), Order1:=xlDescending, Header:=xlYes
       Range("AW4:BE999999").Sort Key1:=Range("BC4:BC999999"), order1:=xlDescending, Header:=xlYes

    ' Assign Unique Key for each record row. We are using RowNum for same
        Range("BA5:BA" & FilterDataLastRow).Formula = "=ROW(RC[-2])"

    ' Assign SearchKey to filter Out all the data belonging to same week
        Range("AZ5:AZ" & FilterDataLastRow).Formula = "=(TEXT(RC[3],""yyyy""))&(TEXT(WEEKNUM(RC[3],15),""00""))"

    ' Get all data in User View
         Range("A5:A" & FilterDataLastRow).Formula = "=VLOOKUP(RC[51],C[51]:C[55],2,FALSE)"
         Range("B5:B" & FilterDataLastRow).Formula = "=VLOOKUP(RC[50],C[50]:C[54],3,FALSE)"
         Range("C5:C" & FilterDataLastRow).Formula = "=VLOOKUP(RC[49],C[49]:C[53],4,FALSE)"
         Range("E5:E" & FilterDataLastRow).Formula = "=VLOOKUP(RC[47],C[47]:C[51],5,FALSE)"

         Cells.RemoveDuplicates Columns:=Array(1)

enter image description here

直到WEEKNUM 53都运行良好。2020年1月从星期三开始,这被认为是WEEKNUM“ 1”,对我的报告不正确。

当前,我得到的输出如下所示:

This is how my current data looks like

我需要修改我的代码以跳过2019年12月31日的数据(以红色突出显示,因为该数据将作为截至2019年2月1日的一周的一部分进行计算。

[请提出一种更好的方法将我的代码更新为enter code here

excel vba excel-formula
1个回答
0
投票

在给定的开始日期,您对的定义是什么?

如果是从该日期开始的一年中的第一周,那么您可以更容易地从VBA DatePart函数中得出它,例如

DatePart("ww", myDate, vbFriday, vbFirstFullWeek)

如果需要在工作表上将此功能用作函数或公式的一部分,请使用它代替工作表WEEEKNUM函数,后者不太灵活。

© www.soinside.com 2019 - 2024. All rights reserved.