2015-07-09 68 views
1

如何獲得一個可以完成包含顏色標識標準的Excel 2010公式?我看到這個:https://support.microsoft.com/en-us/kb/2815384,但它只給我這種顏色的細胞數量。我需要在公式中提供額外的條件,或者我需要鏈接中提供的VBA只能在可見單元格上工作(在我的數據上使用過濾器)。有任何想法嗎?我很感激幫助。Excel Countifs公式以一種顏色標準和其餘的正常

Function CountCcolor(range_data As range, criteria As range) As Long 
    Dim datax As range 
    Dim xcolor As Long 
xcolor = criteria.Interior.ColorIndex 
For Each datax In range_data 
    If datax.Interior.ColorIndex = xcolor Then 
     CountCcolor = CountCcolor + 1 
    End If 
Next datax 
End Function 
+0

我給你加了一個答案。 – user1274820

回答

1

安德魯韋瑟利的答案就是關於你在找什麼。

我有自己的運行代碼時有問題,唯一的一點是這一行:

if datax.Hidden = false

這將成爲datax.EntireRow.Hidden = False這似乎解決的事情。

它也不喜歡更新它應該。

在做一些戳動操作時,我添加了Application.Volatile,但當顏色改變或過濾器更改時似乎沒有更新。

我不得不添加一個Worksheet SelectionChange事件,最終在它應該更新時(可能太頻繁)。

Excel沒有「顏色變化」事件,所以我們可以做的最好的是在選擇更改時更新(缺少添加運行Application.Calculate的計時器,但聽起來像是比它更值得付出) 。

最後的代碼:

Function CountColors(TheRange As Range, TheColor As Range) As Long 
Application.Volatile 
Dim c, color, cellcount 
color = TheColor.Interior.ColorIndex 
For Each c In TheRange 
    If c.EntireRow.Hidden = False And c.Interior.ColorIndex = color Then cellcount = cellcount + 1 
Next c 
CountColors = cellcount 
End Function 

Sheet 1中事件:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Application.Calculate 
End Sub 

第一塊的代碼變爲一個模塊(模塊1是默認值)。

第二段代碼放在工作表對象中(在我的示例中爲Sheet1(Sheet1))。

CountColors

+2

完美。像迄今爲止的魅力一樣工作。非常感激。 – user4584837

1

所以是你的問題,你當你申請自定義功能不想被發現的濾波的數據:

這裏由鏈路提供的代碼?因爲如果是這樣,下面應該修復它:

Function CountCcolor(range_data As range, criteria As range) As Long 
    Dim datax As range 
    Dim xcolor As Long 
xcolor = criteria.Interior.ColorIndex 
For Each datax In range_data 
    If datax.Interior.ColorIndex = xcolor And datax.EntireRow.Hidden = False Then 
     CountCcolor = CountCcolor + 1 
    End If 
Next datax 
End Function 
+0

嘿安德魯,作爲一個建議,以免影響你的聲望評分,你應該在原始問題下使用「添加評論」,而不是在底部的表單中放置評論。此響應將被標記爲無用,因爲它不是實際的答案。希望這可以幫助你在未來。 – nbayly

+0

我試着首先添加評論,但它不會讓我,因爲我沒有50聲望大聲笑 –

+0

哈哈,或者我應該給你多一點時間:)。 Regards – nbayly