我有含有大量代表一個時間線(每分鐘一個小區,非常小的寬度)的細胞的表,我想可視化操作,包含三個階段,在此表中。 (可以有多個操作在一行,代表一個手術室)Excel中的變化的條件格式式
例如,如果準備開始於10:00和實際操作,在10:23開始,這些時間之間的所有23個細胞應該得到紅,和下一個55,代表10時23分和11:18之間的實際操作中,應爲綠色,等等,例如:
17 18 19 20 21 22 23 00 01 02 03 04
| | | | | | | | | | | |
OR1______________++++=================****______________++=========***____________
OR2______________________+++++======================*****_________________________
細胞中的每一個,如果採取它的時間值(被格式化來自額外的行)在兩個開始/結束值之間,對於午夜左右的數字有特殊情況。
爲了實現這一功能(有很多操作),我編寫了一個宏,它貫穿時間表(四個時間列用於三個階段的開始和結束,一個代表手術室),並分配每個在大表(有顏色的單元格)三大條件格式,它應該正常工作列(我手動檢查了):
T = time.Address(RowAbsolute:=True, ColumnAbsolute:=False)
Z1 = t1.Address
Z2 = t2.Address
Z3 = t3.Address
Z4 = t4.Address
fnc1 = "=OR(AND(" & Z1 & "<=" & T & ";" & T & "<" & Z2 & ");AND(" & Z2 & "<" & Z1 & ";" & Z1 & "<=" & T & ");AND(" & T & "<" & Z2 & ";" & Z2 & "<" & Z1 & "))"
fnc2 = "=OR(AND(" & Z2 & "<=" & T & ";" & T & "<" & Z3 & ");AND(" & Z3 & "<" & Z2 & ";" & Z2 & "<=" & T & ");AND(" & T & "<" & Z3 & ";" & Z3 & "<" & Z2 & "))"
fnc3 = "=OR(AND(" & Z3 & "<=" & T & ";" & T & "<" & Z4 & ");AND(" & Z4 & "<" & Z3 & ";" & Z3 & "<=" & T & ");AND(" & T & "<" & Z4 & ";" & Z4 & "<" & Z3 & "))"
Dim currentLine As Range
Set currentLine = Range(Cells(dline, data.Column), Cells(dline, data.Column).Offset(0, width))
Set frmt1 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc1)
Set frmt2 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc2)
Set frmt3 = currentLine.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1:=fnc3)
frmt1.Interior.Color = RGB(255, 0, 0)
frmt2.Interior.Color = RGB(0, 255, 0)
frmt3.Interior.Color = RGB(0, 0, 255)
「T1」 ..「T4」是表與啓動/細胞結束時間,'time'是可視化表中每列的文字時間(10:01,10:02,...,與'data'寬度相同)的額外行,'data'是可視化table和'dline'是當前格式化的行的計數,calcul視手術室而定。 '寬度'現在通常是300,但通常是60 *顯示的小時數(所以只是當時的分鐘數)。
這整個事情的作品沒有錯誤,而且它產生正確的格式字符串(我檢查調試模式fnc1..fnc3)。他們這個樣子,這是他們應該做的:
=OR(AND($KR$10<=C$13;C$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=C$13);AND(C$13<$KS$10;$KS$10<$KR$10))
C13是時間的第一個單元格,和KR10和KS10是「T1」和「T2」進行此項操作(準備開始,開始的實際操作/準備結束)。
不過:只要格式字符串保存到Excel(宏完成),他們是不一樣的了。通常像
=OR(AND($KR$10<=XCS$13;XCS$13<$KS$10);AND($KS$10<$KR$10;$KR$10<=XCS$13);AND(XCS$13<$KS$10;$KS$10<$KR$10))
出來 - 在「時間」細胞,這是唯一一個相對的,變化詭異,高值(「XCS」的價值,「世貿中心」,「X波段雷達」 ...... )。如果我也是相對的,那麼它也是相對的(我得到了163552這樣的數字)。
這似乎是獨立的宏,因爲我第一次嘗試了IronPython中的所有東西,其工作方式相同(我實際上是從該代碼翻譯宏)併產生了相同的錯誤。
我有時甚至得到了相同類型的,當我分配用手測試公式錯誤的,所以我強烈懷疑Excel中是真正的錯誤...
現在,因爲我無法找到anyhing關於類似的錯誤,可能需要與內存?就像太多的細胞一樣?或者特定於我的電腦/安裝/代碼/ ...的東西?
我使用Excel 2007.「數據」表的單元格沒有專門格式化,時間都是hh:mm:ss。
我希望我已經足夠清楚整個東西是如何工作的;否則,只需索取更多代碼或需要的任何信息。感謝您的任何提示,我一直停留在此的一個星期,現在,我運行的想法......
這裏的寬度值是多少?偏移量(0,寬度)。現在還是一大早,但我認爲如果將公式放入單元格中,與在調試器中檢查公式時出現ColumnAbsolute:= False for T可能會產生意外的結果。 – deusxmach1na 2012-04-20 14:29:12
+ 1花費時間來解釋您的問題:) – 2012-04-20 18:21:23
根據當時活動單元格的位置,您可能發現使用VBA應用條件格式時會得到不同/奇怪的結果:請嘗試選擇範圍內的第一個單元格在添加條件之前,應用cf。 http://stackoverflow.com/questions/8316662/conditional-formatting-in-vba-based-on-functions/8318151#8318151 – 2012-04-20 20:54:05