2013-01-09 55 views
1

sample excel計數實例

要求是一段代碼,其可以指望的字符串的情況下,即(ABC,DEF,GHK)的基礎上,如果它們存在於有色單元格和否,並將結果放在下面的單元格中,如圖所示。

任何人都可以請指教?

我嘗試了示例代碼

Sub Color() 

Dim varCounter As String 
Dim color As Integer 
Dim nocolor As Integer 

Range("E5").Select 
color= 0 
nocolor= 0 

     Do Until Selection.Value = "" 
        If Selection.Font.Color = RGB(255, 0, 0) Then 
        color= color+ 1 
        Else 
        nocolor= nocolor+ 1 
        End If 
        Selection.Offset(1, 0).Select 
     Loop 
    Range("E47").Select 
    Selection.Value = no 


    Range("E48").Select 
Selection.Value = color 

End Sub 

這是一個非常簡單的代碼檢查文本字體是彩色或沒有,buut我找不到任何事情檢查單元格的背景顏色。

我也嘗試過excel公式,但是我只能搜索文本和計數,它不會基於單元格的背景顏色進行計數。

回答

3

這裏有一個簡單的用戶定義函數。你可以把它放在一個普通的模塊中。

Public Function CountByColorAndText(rng As Excel.Range, SearchText As String, CountColored As Boolean) As Long 
Dim cell As Excel.Range 
Dim CellCount As Long 

For Each cell In rng 
    If cell.Value = SearchText Then 
     If (cell.Interior.ColorIndex = -4142 And Not CountColored) Or _ 
      (cell.Interior.ColorIndex <> -4142 And CountColored) Then 
      CellCount = CellCount + 1 
     End If 
    End If 
Next cell 
CountByColorAndText = CellCount 
End Function 

它採用三個參數:範圍評估,字符串搜索以及您是否計數有色(或無色)細胞:然後,您可以從任何工作表,在它的工作簿中調用它

enter image description here

所以,上面列E的公式爲:

=CountByColorAndText($A$2:$A$13,$D3,FALSE) 

列F,它是除了最後一個參數是相同的, CountColoredTRUE

我不寫許多用戶定義的函數,所以有人可能會來指出問題或改進。

+0

伴侶我收到以下錯誤#NAME? ,當我應用相同的公式。 ANY建議? – misguided

+0

該錯誤意味着它不能識別該功能。您是否將其粘貼到模塊中並完全按照我的答案中的描述進行調用? –

+0

現在運行,謝謝。我接受你的回答:)。但邏輯可能有一些問題,顏色計數顯示正確的幾個搜索文本:( – misguided

2

代替Font.Color使用Interior.Color

+0

伴侶我不確定我使用的顏色的RGB值,所以不知道如何比較使用Interior.Color的顏色。例如,紅色的RGB值爲255,0,0 – misguided

+0

此站點具有所有標準Excel調色板顏色及其顏色編號的列表。 –

0

再次編寫代碼會很棒。但我有一個修改後的代碼這裏一個,如果你有興趣去看看..我只是想知道,如果這是一些commmon項目雖然,怎麼昨天OP問同樣的問題....

VBA, COUNTIF, Exclude based on cell color

BTW INTERIOR.COLOR會告訴你一個很大的數字,是RGB,在那裏,你可能想使用INTERIOR.COLORINDEX

既然你正在檢查RGB格式的表示,可以嘗試以下。不過,我建議你不要使用select,它會減慢你的代碼。根據您的需要,您可以更改sheetsranges

例如

Dim rng as Range 
Dim cell as Range 

'-- name column 
Set rng = Sheets(2).Cells(Sheets(2).Rows.Count, "C").End(xlUp).Row 

color= 0 
nocolor= 0 

For Each Cell In rng 
    If Cell.InteriorColor = RGB(256,0,0) then 
     color= color+ 1 
    Else 
     nocolor= nocolor+ 1 
    End If 
    Next Cell 

'--output 
Sheets(2).Range("E47").Value = nocolor 
Sheets(2).Range("E48").Value = color 
+0

@misguided請看看帖子和評論。請讓我們知道:) – bonCodigo

+0

對不起,我是新手。事實上,我不知道顏色的RBG值來比較它。基本上,如果代碼本來就不是通用的,即它可以統計顏色,而不考慮哪種顏色會使它更容易。 PS:不,我沒有和其他人一起工作(誰發佈了其他問題)。可能是巧合:) – misguided

+0

@misguided此代碼是通用事實,有一個小的變化。使用'UDF'有一些缺點,因爲當一個單元格發生火災時,其他人也會觸發...所以想象一下,如果您有10個單元格,並且每個單元格中添加了UDF ... [這裏有一些UDF表現和行爲](http://www.mrexcel.com/forum/excel-questions/271165-udf-volatile-vs-not.html)。我添加了一個編輯版本來獲得你需要的***表***!在任何程序中,性能和可維護性都非常重要。例如。你想改變10個地方還是你想改變一個地方? ;) – bonCodigo