如何从CountIF获取与活动的值和颜色匹配的单元格数,并且循环代码等于从VBA Excel中的CountIF找到的单元格数?

时间:2016-07-30 17:37:46

标签: excel vba excel-vba

我还有另外一个与我的怨恨问题相似的问题。我在VBA中有一个函数,它找到与活动单元格的日期和单元格颜色匹配的单元格,在找到下一个匹配单元格后,它转到列H中的相应单元格,并将其突出显示为青色。这正是我想要的,但我每次都要点击运行宏。我希望该函数适用于所有匹配的单元格。我正在考虑使用Do Until循环,找到@ http://www.excel-easy.com/vba/examples/do-until-loop.html,但要做到这一点,我需要知道匹配单元的数量,以使循环停止。

我的工作代码:

Sub Test1()
'
' Test1 Macro
'
'
Dim CellColor As Variant
Dim SearchDate As String, FoundAt As String


CellColor = Range("B" & ActiveCell.Row).Interior.Color
SearchDate = Range("B" & ActiveCell.Row).NumberFormat

    Range("B" & ActiveCell.Row).Select
    Application.FindFormat.Clear
    Application.FindFormat.NumberFormat = SearchDate
    Application.FindFormat.Interior.Color = CellColor

    Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=True).Activate

End Sub

我正在考虑使用的循环代码在上面的链接中找到:

Dim i As Integer
i = 1

Do Until i > 6
    Cells(i, 1).Value = 20
    i = i + 1
Loop

我有这个CountIF代码:

Dim cellCount As Integer
cellCount = Application.WorksheetFunction.CountIf(Range("B1:B30"), "7/22/2016") ‘Count matching 

MsgBox cellCount ‘test to see if count works

但是有两个问题是错的。问题一,我必须在代码中手动输入日期“7/22/2016”而不是使用变量“SearchDate”。问题二是它只搜索日期,而不是搜索日期的单元格颜色我的电子表格。

所以我的问题就是这一切。如何获得满足活动单元格的日期和颜色值的日期数量,并将该数字转移到要在循环中使用的变量?

如果有更有效的方法来完成所有这些,请告诉我。非常感谢提前!!!

参考图片:

Screenshot showing the spreadsheet of dates and colors.

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,那么这就是你要找的东西

"

答案 1 :(得分:0)

下一个函数将计算B列中所有匹配的单元格。 它不会突出显示任何细胞。您必须自己添加此部分。

为了使用它,只需在代码中添加以下内容:

Dim x As Integer
x = countMatchingCells

功能:

Function countMatchingCells() As Integer

Dim CellColor As Variant
Dim SearchDate As String, FoundAt As String
Dim i As Integer
Dim counter As Integer

CellColor = Range("B" & ActiveCell.Row).Interior.Color
SearchDate = Range("B" & ActiveCell.Row).NumberFormat
counter = 0
'assuming we are working on sheet1:
For i = 1 To Sheets(1).Cells(Sheets(1).Rows.Count, 2).End(xlUp).Row
If Cells(i, 2).Interior.Color = CellColor And _
Cells(i, 2).NumberFormat = SearchDate Then
countMatchingCells = countMatchingCells + 1
'you can write more code here, for example if you want to highlight cells once you found a match
End If
Next i
End Function