前言有了計劃日期,利用條件格式就很輕松的就能作出帶單元格填充的線表計劃,如果要劃線,也可以用VBA快速生成線條計劃,前面有講,大家可以翻一番前面的文章. 今天講的是反向操作,如上圖所示,計劃員偷懶只在單元格填充了顏色,沒有給出計劃日期,并且這樣的計劃弄了幾百條,我只想要我的計劃日期,如何去做? 解題思路當(dāng)然我們還是先用肉眼觀察一下,看看有什么發(fā)現(xiàn): 這個表中,一個單元格代表一周 計劃日期所在單元格的填充顏色為黃色,其它為非黃色 有著兩條就夠了,這就是規(guī)律,有了規(guī)律就好辦事 打開vba 調(diào)出立即窗口:視圖-立即窗口 首先選擇一個黃色的單元格,我們來看看這個顏色在VBA中的顏色代碼是什么? 在立即窗口中輸入 ? SELECTION.INTERIOR.COLORINDEX 回車 返回值為6 意思是單元格填充的顏色代碼為6 因此我們可以這樣認(rèn)為: 每一條任務(wù)所在的行第一次出現(xiàn)黃色,則這個單元格對應(yīng)的同一列的第一行的日期即為開始日期 每一條任務(wù)所在的行最后一次出現(xiàn)黃色,則這個單元格對應(yīng)的同一列的第一行的日期+6,即為結(jié)束日期 如: 任務(wù)A的開始日期為1月1日,結(jié)束日期為1月7日(1月1日+6) 任務(wù)B的開始日期為1月8日,結(jié)束日期為1月28日(1月22日+6) 實操我們先插入兩列,命名為開始和結(jié)束,以便存放我們的日期信息,如下圖所示 新建模塊,寫入下列代碼: Sub writedate() '行的循環(huán)范圍 For i = 2 To 6 '列的循環(huán)范圍 For j = 4 To Range("l1"). Column '獲取開始日期 '判斷該單元格的左邊單元格的顏色值不為6,并且該單元格的顏色值為6,則說明為第一次出現(xiàn)黃色的單元格 If Cells(i, j).Offset(0, -1).Interior.ColorIndex <> 6And Cells(i, j).Interior.ColorIndex = 6 Then '將該單元對應(yīng)列的第一行的單元格日期寫入第二列 Cells(i, 2) = Cells(1, j) End If '獲取結(jié)束日期 '判斷該單元格的顏色值為6,并且該單元格右邊單元格的顏色值不為6,則說明為最后一次出現(xiàn)黃色的單元格 If Cells(i, j).Interior.ColorIndex = 6 And Cells(i,j).Offset(0, 1).Interior.ColorIndex <> 6 Then '將該單元格對應(yīng)列的第一行的單元格日期+6寫入第三列 Cells(i, 3) = Cells(1, j) + 6 End If '循環(huán)結(jié)束 Next '循環(huán)結(jié)束 Next End Sub 運行該程序,如下圖所示: 有同學(xué)說,不對啊,為什么是數(shù)字亂碼,那你就是沒有好好聽課,快點去復(fù)習(xí)一下前面關(guān)于日期的內(nèi)容吧,會的同學(xué)請略過. 把B\C列的數(shù)據(jù)格式改成日期格式,或自定義格式,我習(xí)慣上用自定義格式,”YYYY-MM-DD”,這樣比較工整,看起來比較爽. 設(shè)置如下: 選擇開始和結(jié)束兩列,按CTRL+1,設(shè)置單元格格式 最后,結(jié)果如下: 學(xué)會這個方法,縱使有千萬行,也是瞬間完成,不信就試一下吧! |
|