创建带有工作日和每月日期(取决于年份)的表

时间:2019-07-12 05:19:40

标签: excel vba

我想制作一个VBA以执行以下操作:

  • 在表格中填充两列:“天”为第一列,第二列为“ 日期,并且整个月只需要有工作日(周一至周五)
  • 这取决于两个单元格(年,月)中的两个输入
  • 当and单元格包含Fri作为一天并从星期一再次开始时,则两个单元格之间的框架必须加粗。

您能帮我写代码吗?

1 个答案:

答案 0 :(得分:0)

您不需要VBA,可以将公式和条件格式结合使用:

假设月份在A1中,月份在B1中,那么C1中的以下公式将为您提供月份和年份的第一天:

   =DATEVALUE("1/"&$A$1&"/"&$B$1)

这是针对设置为使用dd / mm / yyyy作为日期格式的系统,美国人需要更改顺序,以便使用DATEVALUE($ A $ 1&“ / 1 //&$ B $ 1)

函数WEEKDAY()返回与星期几相对应的1到7之间的数字,其中1 =星期日。因此,我们将其应用于单元格D1中的函数

 =WEEKDAY(C1)

现在,我们转到希望列表开始的位置(假设A2)并输入

  =IF(D1=1,C1+1,IF(D1=7,C1+2,C1))

这将是指定月份中第一个工作日的日期 现在在A3中输入

 =IF(WEEKDAY(A2)=6,A2+3,a2+1)

这表示,如果上面的行是星期五,则在下周一进行,否则在第二天进行。现在,我们唯一需要做的就是在月底停止显示它:因此,如果日期在该月的最后一天之后,我们用If语句包装它以显示“”。

=IF(A2="","",IF(DAY(A2)=DAY(DATEVALUE("1/"&$A$1+1&"/"&$B$1)-1),"",IF(WEEKDAY(A2)=6,A2+3,A2+1)))

现在将其复制到第25行。这是您的日期-现在将数字格式设置为自定义设置“ dddd”,以将其显示为工作日。如果cell =星期五,请使用条件格式添加边框