2012-11-02 19 views
1

我有一個應用程序生成一個(非常大)的電子表格,其中包含需要進行顏色編碼的用戶輸出。當我生成數據時,我發現需要着色的塊,但是如果我一次只做一塊,着色它們就很費時間。我想要做的是保持一個大的不連續的單元格組,並使用一個Excel Interop調用對其進行着色。快速着色不連續的單元格塊

現在我正在爲每種顏色保留一個範圍,並且每當我找到一個需要該顏色的新塊時,我將現有範圍和新塊的聯合。然後在最後我爲這個範圍着色。不幸的是,這對於大型案件來說確實很慢並且有點兒缺陷。有沒有更好的方法來做到這一點?我覺得着色幾千個細胞不應該花這麼長時間。 :)

編輯 下面的代碼使用條件格式解決了這個問題(假設的話正確和不正確的B列中存在)

With newSheet.Range("B:B") 
    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "CORRECT") 
    .FormatConditions(1).Interior.ColorIndex = 4 

    .FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue, Excel.XlFormatConditionOperator.xlEqual, "INCORRECT") 
    .FormatConditions(2).Interior.ColorIndex = 3 
End With 

我還是喜歡做的唯一的事情就是顏色不僅僅是包含「正確」的單元格。相反,我想爲圖表中的整行着色(例如,如果B42包含「正確」,我希望A42:H42(包含它的行)爲綠色)。有什麼建議嗎?

+1

你可以在你的情況下使用條件格式嗎? – ApplePie

+1

我可以理解爲什麼逐個設置單元格很慢,但爲什麼設置聯合/多範圍的顏色會很慢?您是否將每個着色操作的一部分重新組合爲多重範圍? (當然有助於在這裏看到一些代碼)。 – RBarryYoung

+0

很抱歉,我在工作時只能訪問代碼。我認爲條件格式化可以解決問題,我會在測試完成後立即報告。否則我會發布一些代碼來解釋更多的問題 - 基本上它不是緩慢的設置顏色,它正在構建聯合(對於每個新的非連續塊,它需要調用像newRange = Union(oldRange,newBlock )) – Keilan

回答

0

您可以使用條件格式。

至於同一行中的着色單元格,您需要使用公式條件格式。例如,如果您希望將列A,C和D有條件地格式化爲E中的值,您可以執行類似下面的操作(僞代碼):

對於當前行的列A,C和D集 集條件格式公式:謂語基於列的$ E和當前行

這將極有可能轉化爲類似:

=IF($Erow=something, 1, 0) 

http://msdn.microsoft.com/en-us/library/office/ff822801.aspx

另外,原本這表明當c傳統的格式我正在談論手動做它。爲什麼你需要使用VBA來完成這個任務是否有原因?

+0

再次感謝您的幫助。我在VBA中做這件事的原因是這個應用程序會被除我以外的人使用(並且使用的數據集不是我使用的),並且如果我告訴我的用戶他們必須手動進行操作,對電子表格進行着色以使其易於閱讀。 :) – Keilan