前言有了计划日期,利用条件格式就很轻松的就能作出带单元格填充的线表计划,如果要划线,也可以用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,设置单元格格式 最后,结果如下: 学会这个方法,纵使有千万行,也是瞬间完成,不信就试一下吧! |
|