首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VBA代码根据行和列中的计数突出显示单元格?

VBA代码根据行和列中的计数突出显示单元格?
EN

Stack Overflow用户
提问于 2018-09-10 00:48:15
回答 1查看 0关注 0票数 0

我正在为我的组织制作一张rota表,我需要VBA代码,根据员工的假期计数来突出显示单元格。

  1. 如果员工一个月内休假3次,则应为蓝色。
  2. 当他进入第4和第5个假期或那个月时,它变成了琥珀
  3. 当他在5点之后进入任何进一步的假期时,它变成了红色

如果超过5名员工在同一日期(列)申请休假,则日期列应以红色突出显示。

有人可以建议相同的VBA代码吗?

附上示例屏幕截图

P - 员工在场V - 员工在度假

截图
截图
EN

回答 1

Stack Overflow用户

发布于 2018-09-10 10:03:56

你很幸运我今天真的很无聊:p

这是最有效的方法吗?绝对不是,但对于我的测试(假设每个工作表只保存一个月的数据),它工作得很好。另请注意,这仅适用于UPPERCASE V来表示休假

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range
    Set rng = Range("B2:V11")

    If Not Intersect(Target, rng) Is Nothing Then

        'scan each row (month)
        Dim countRow As Long

        Dim i As Long
        For i = 1 To rng.Rows.count
            If Not Intersect(Target, rng.Rows(i)) Is Nothing Then
                If WorksheetFunction.CountIf(rng.Rows(i), "V") > 0 Then
                    countRow = 0

                    Dim cel As Range
                    For Each cel In rng.Rows(i).Cells
                        If cel.Value2 = "V" Then
                            countRow = countRow + 1
                            VacationChange cel, countRow
                        Else
                            VacationChange cel, 0
                        End If
                    Next cel
                End If
            End If
        Next i

        'scan each column (day)
        Dim j As Long
        For j = 1 To rng.Columns.count
            If Not Intersect(Target, rng.Columns(j)) Is Nothing Then
                If WorksheetFunction.CountIf(rng.Columns(j), "V") > 5 Then
                    VacationChange rng.Columns(j).Cells(0, 1), 6
                Else
                    VacationChange rng.Columns(j).Cells(0, 1), 0
                End If
            End If
        Next j

    End If

End Sub

Private Function VacationChange(ByVal rng As Range, ByVal count As Long)

    With rng.Interior

        Select Case count
        Case 0
            'clear cell colors
            .Pattern = xlNone
            .Color = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        Case 1 To 3
            'blue
            .Pattern = xlSolid
            .Color = 15773696
            .TintAndShade = 0
            .PatternTintAndShade = 0
        Case 4 To 5
            'yellow
            .Pattern = xlSolid
            .ThemeColor = xlThemeColorAccent4
            .TintAndShade = 0.399975585192419
            .PatternTintAndShade = 0
        Case Else
            'red
            .Pattern = xlSolid
            .Color = 255
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End Select

    End With

End Function

证明:

证明
证明
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档