【问题标题】:Dynamic week number in respect to year相对于年份的动态周数
【发布时间】:2019-05-21 18:13:45
【问题描述】:

我正在尝试每月检索一年中的第几周,这听起来像是一个愚蠢的问题,但这就是我想要的样子:

对于单元格C1,我创建了一个基于B1 => =TEXT(TODAY();"[$-0809]mmmm") 的下拉列表,并且HLookup 函数检索了周(C2:C6)。

想法是我只需要一个动态的Week格式,比如C1:C6,但是除了我用过的之外我没有找到另一种方式,我还需要在VBA中转置它强>。有没有更简单的方法?我可以使用你的提示/想法。 在每月导出的新工作表上,我需要显示每个月的 4/5 周,每个月都不同。

【问题讨论】:

  • 使用WEEKNUM function 返回特定日期的周数。
  • 这个想法是每个月我都需要在我的新工作表上显示当月的 4 或 5 周(我还编辑了问题,抱歉造成误解)。
  • 是的,正如@Pᴇʜ 提到的:使用WorksheetFunction.WeekNum 来实现您的目标。
  • 是的,目前这只是暂时的,但我每月都需要它,并且有 4 或 5 周的时间,就像这样imgur.com/T8qeX08,它必须放在单元格中的位置是一个包含所有月份的下拉列表。

标签: excel vba excel-formula


【解决方案1】:

使用Weeknum 函数:=WEEKNUM(DATE(2019,3,1),2) 将返回该月的第一周,=WEEKNUM(EOMONTH(DATE(2019,3,1),0),2) 将返回该月的最后一周。

这么说吧……

  • 在B2=WEEKNUM(DATE(YEAR(TODAY()),$B$1,1),2 )
  • 在B3=IFERROR(IF(B2+1<=WEEKNUM(EOMONTH(DATE(YEAR(TODAY()),$B$1,1),0),2 ),B2+1,""),"")下拉,得到如下结果:

如果您现在更改 B1 中的月份数,它会自动计算其余的:

请注意,有不同的官方周编号系统,而最常见的是ISO week date。这意味着 1 月 1 日并不总是第 1 周!

【讨论】:

  • 还有一件事我想问我是否可以,在将其转换为 VBA 时,我遇到了一个错误,是关于我不能像那样向单元格添加 1 的事实吗? Range("AQ4").Formula = "=""Total Week "" & IFERROR(IF(AQ1+1<=WEEKNUM(EOMONTH(DATE(YEAR(TODAY());AW1;1);0);2);AW1+1;"");"")"
  • 不,您需要将; 更改为,,因为.Formula 只接受分隔符为, 的原始英文公式。如果您打算使用本地化版本,则必须改用.FormulaLocal。但我建议将.Formula 与英文公式一起使用,这样它就独立于任何本地化并且适用于世界各地。
  • 非常感谢!我会记下这个观察结果。
  • 我已将所有 ; 替换为 , 并且仍然出现 1004 错误,当我直接在 Excel 中尝试公式时,它确实有效 =IFERROR(IF(AQ1+1<=WEEKNUM(EOMONTH(DATE(YEAR(TODAY());$AW$1;1);0);2);AQ1+1;"");""),但是当我把它放在编辑器中,像这样 ` Range("AQ4").Formula = "=IFERROR(IF(AQ1+1
  • 所有外引号内的引号都需要加倍:Range("AQ4").Formula = "=IFERROR(IF(AQ1+1<=WEEKNUM(EOMONTH(DATE(YEAR(TODAY()),AW1,1),0),2),AQ1+1,""""),"""")"
猜你喜欢
  • 2016-06-25
  • 2018-03-05
  • 1970-01-01
  • 2018-06-24
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
相关资源
最近更新 更多