用EXCEL制作一份工作日历,涂颜色的单元格表示休息日(共有4种颜色,深红一种,浅红2种,橙色一种),白色表示工作日,现在需要统计每个月休息日的数量,如何实现?
在EXCEL中按条件选择数据,通常使用“筛选”功能,而且在EXCEL 2010中已经具备了按颜色筛选的功能,但是这种筛选只能在同一列数据中进行,对于不同列的数据就无能为力了。考虑用VBA实现,单元格的颜色信息对应哪个属性,经过一番查找,我终于找到了,该属性位于Sheet1.Cells(1, 1).Interior.Color,有了这个属性,后面的工作就很简单了,遍历整个区域,比对颜色信息,将每个月的休息日记录在一个数组中。
源代码如下:
Sub workday()
Dim wk(1 To 12)
'记录工作日的数组
Dim w1
w1 = 0
For n = 1 To 12
wk(n) = 0
Next
For i = 4 To 10
For k = 2 To 54
With Sheet1.Cells(i, k).Interior
If .Color = 10066431 Or .Color = 255 Or .Color = 10198015 Or .Color = 26367 Then
'读取颜色值,并进行判断
m = Month(Sheet1.Cells(i, k).Value)
'表中的日历实际是日期格式,可以用Month()函数读取该日期属于哪一个月,计入对应的wk()数组中
wk(m) = wk(m) + 1
End If
End With
Next
Next
For t = 1 To 12
Debug.Print t, wk(t)
Next
'输出
End Sub