有了计划日期,利用条件格式就很轻松的就能作出带单元格填充的线表计划,如果要划线,也可以用VBA快速生成线条计划,前面有讲,大家可以翻一番前面的文章.
今天讲的是反向操作,如上图所示,计划员偷懒只在单元格填充了颜色,没有给出计划日期,并且这样的计划弄了几百条,我只想要我的计划日期,如何去做?
当然我们还是先用肉眼观察一下,看看有什么发现:
这个表中,一个单元格代表一周
计划日期所在单元格的填充颜色为黄色,其它为非黄色
有着两条就够了,这就是规律,有了规律就好办事
打开vba
调出立即窗口:视图-立即窗口
首先选择一个黄色的单元格,我们来看看这个颜色在VBA中的颜色代码是什么?
在立即窗口中输入
? SELECTION.INTERIOR.COLORINDEX 回车
返回值为6
意思是单元格填充的颜色代码为6
因此我们可以这样认为:
每一条任务所在的行第一次出现黄色,则这个单元格对应的同一列的第一行的日期即为开始日期
每一条任务所在的行最后一次出现黄色,则这个单元格对应的同一列的第一行的日期+6,即为结束日期
如:
任务A的开始日期为1月1日,结束日期为1月7日(1月1日+6)
任务B的开始日期为1月8日,结束日期为1月28日(1月22日+6)
我们先插入两列,命名为开始和结束,以便存放我们的日期信息,如下图所示
新建模块,写入下列代码:
Sub writedate()
'行的循环范围
For i = 2 To 6
'列的循环范围
For j = 4 To Range("l1"). Column
'获取开始日期
'判断该单元格的左边单元格的颜色值不为6,并且该单元格的颜色值为6,则说明为第一次出现黄色的单元格
If Cells(i, j).Offset(0, -1).Interior.ColorIndex <> 6And Cells(i, j).Interior.ColorIndex = 6 Then
'将该单元对应列的第一行的单元格日期写入第二列
Cells(i, 2) = Cells(1, j)
End If
'获取结束日期
'判断该单元格的颜色值为6,并且该单元格右边单元格的颜色值不为6,则说明为最后一次出现黄色的单元格
If Cells(i, j).Interior.ColorIndex = 6 And Cells(i,j).Offset(0, 1).Interior.ColorIndex <> 6 Then
'将该单元格对应列的第一行的单元格日期+6写入第三列
Cells(i, 3) = Cells(1, j) + 6
End If
'循环结束
Next
'循环结束
Next
End Sub
运行该程序,如下图所示:
有同学说,不对啊,为什么是数字乱码,那你就是没有好好听课,快点去复习一下前面关于日期的内容吧,会的同学请略过.
把B\C列的数据格式改成日期格式,或自定义格式,我习惯上用自定义格式,”YYYY-MM-DD”,这样比较工整,看起来比较爽.
设置如下:
选择开始和结束两列,按CTRL+1,设置单元格格式
最后,结果如下:
学会这个方法,纵使有千万行,也是瞬间完成,不信就试一下吧!
联系客服