Excelmacros从天数find周末

我有一个Excelmacros计算不。 一个月内每天花在一个任务上的时间。

第一行包含从1到31的date编号,并且相应地使用macros为一个月的每个date编号填充数据。 工作表名称包含月份名称。

现在,问题是macros观空白的数据不可用的日子。 那一天可能是星期六,星期天,或者那天那个人不在。

我希望macros指定周末,并用灰色突出显示那些只有缺席的日子显示为空白的。

使用单元格公式和条件格式 (下面的VBA)

您可以使用内置的WEEKDAY格公式以及DATE公式轻松完成此操作。

通过在工作表中设置年份和月份值,可以创build一个额外的列,以星期几作为1到7之间的数字:

 =WEEKDAY(DATE($A$2, $B$2,C2)) 

周日计算公式


然后,您可以设置条件格式,使第7天和第1天(分别为星期六和星期天)为灰色

条件格式


使用VBA

你可以应用与上面相同的逻辑,但从一个子。 这不要求月份和年份值存储在工作表中,并从工作表名称中获取月份。 然后,如果在周末,则直接将日数灰色。

 Sub weekdayhighlight() Dim days As Range Set days = ActiveSheet.Range("C2:C8") ' Range where date numbers are stored, 1,2,...,31 Dim month As String month = ActiveSheet.Name ' Active sheet name is "May" Dim day As Range Dim daynum As Long ' Loop over days to test for weekday For Each day In days ' Get day number, from date in format "1 May, 2017" daynum = Weekday(DateValue(day.Value & " " & month & ", 2017"), firstdayofweek:=vbSunday) If daynum = 7 Or daynum = 1 Then day.Interior.Color = RGB(200, 200, 200) ' Grey for saturdays or sundays End If Next day End Sub 

注意:如果您尝试计算不存在date的工作日(例如2月31日),则此macros将引发错误。您说每个工作表的date数从1到31,应将其限制为实际的现有date或将error handling添加到代码中。

尝试将您的工作表名称和列标题结合到一个循环中的date(大约一年?),然后使用DatePart()函数来确定是否是周末的一天。 如果列标题是真实的date(可能被格式化为仅显示date),那将会更容易。