如何使用另一列

时间:2015-05-21 14:45:13

标签: excel excel-vba worksheet-function vba

我希望将工作表1上的员工姓名与工作表2中的员工姓名相匹配,然后运行特定列中所有黄色(已填充)单元格的计数。

我有一个VBA模块,可以在不进行名称匹配的情况下运行突出显示的单元格的数量,并且它可以完美地运行。现在我需要添加一个额外的度量标准,为每个员工运行所有突出显示的单元格的计数。

数据信息:

  

Sheet One B2:B50 - 员工姓氏列表。

     

Sheet Two D2:D1845 - 包含员工姓氏的列。注意:这是一个包含1845个客户数据记录行项目的工作表,因此可以在所述列中多次列出员工姓名。

     

第二张纸E2:E1845 - 带有黄色细胞的柱子。并非列中的所有细胞都是黄色的。这就是为什么我需要计算每个员工的彩色数量。

按颜色VBA计算:

Function CountByColor(InputRange As Range, ColorRange As Range) As Long

 Dim cl As Range, TmpCount As Long, ColorIndex As Integer

 Application.Volatile

 ColorIndex = ColorRange.Interior.ColorIndex

 TmpCount = 0

 On Error Resume Next

 For Each cl In InputRange.Cells
        If cl.Interior.ColorIndex = ColorIndex _
            Then TmpCount = TmpCount + 1

 Next cl

 CountByColor = TmpCount

End Function

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您想要实现的目标我还不能发布图像。 对于Sheet2 D2:D1845中的每个员工,此Sub在Sheet1 C2:C50范围内插入一个计数器,旁边的单元格为黄色。

Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant, CountA As Integer
    Set EmployeeRange = Worksheets("Sheet1").Range("B2:B50")
    Set CompareRange = Worksheets("Sheet2").Range("D2:D1845")
    For Each x In EmployeeRange
        For Each y In CompareRange
            If x = y And y.Offset(0, 1).Interior.ColorIndex = 6 Then CountA = CountA + 1
        Next y
        x.Offset(0, 1).Value = CountA
        CountA = 0
    Next x
End Sub

答案 1 :(得分:0)

根据您向我解释的内容,您希望在评论中找到您想做的事情:

Public Sub NameColorCount(NameToSearch As String, TargetCell As Range, _  
           SearchRange As Range, RangeToCountColor As Range, ColorRange As Range)

  If Not SearchRange.Find(NameToSearch) Is Nothing Then
    TargetCell.Value = CountByColor(RangeToCountColor, ColorRange)
  End If

End Sub

如果要在单元格中执行此操作,可以将CountByColor用作UDF并使用以下公式:

=IF(COUNTIF(D:D, B1)>0,CountByColor(E:E, B1),"")

假设您的ColorRange是' B'单元格,否则修改