在某些条件适用时添加值

问题描述 投票:0回答:2

如果列A具有特定条件,我对将在P列(通过,有风险或失败)中添加值的宏感兴趣 - 请参阅下面的示例。

我想知道下面的宏是否可以用作灵感。如果满足某些条件,则创建它以对行着色。

我还希望新的宏在P列中为某些单元格颜色分配值:绿色表示通过,黄色表示风险,红色表示失败(颜色与下面的宏相同)

Option Explicit

Sub Stackoverflow()

Dim ws As Worksheet
Dim rows As Long, i As Long
Dim rngSearch As Range, rngColor As Range

Application.ScreenUpdating = False
Application.EnableEvents = False

Set ws = ActiveSheet

rows = ws.UsedRange.rows.Count

For i = 1 To rows
Set rngSearch = ws.Cells(i, 1)
Set rngColor = ws.Range("A" & i, "O" & i)

If rngSearch = "Unexpected Status" Then
    rngColor.Interior.Color = 13434828
End If
If rngSearch = "At Risk" Then
    rngColor.Interior.Color = 8420607
End If
If rngSearch = "Requirements Definition" Then
    rngColor.Interior.Color = 10092543
End If

Next i

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
excel vba
2个回答
0
投票

如果PrngSearch,这将使列"At Risk"黄色:

For i = 1 To rows
    Set rngSearch = ws.Cells(i, 1)
    Set rngColor = ws.Range("A" & i, "O" & i)

    If rngSearch = "Unexpected Status" Then
        rngColor.Interior.Color = 13434828
    End If
    If rngSearch = "At Risk" Then
        Cells(rows, "P").Interior.Color = vbYellow

    End If
    If rngSearch = "Requirements Definition" Then
        rngColor.Interior.Color = 10092543
    End If

Next i

其他的将相应地制作。


0
投票

是的,你可以,简化

Dim i As Long, lngColor as Long 'It is inadvisable to declare variables which could also be the name of built in functions and objects, in your case I would not declare "rows" as a variable as it is also a property of an object
Dim varVal as Variant
Dim ws As Worksheet

Set ws = Thisworkbook.Worksheets("Sheet1") 'As general advice, avoid active and select but used fixed values, this way no confusion can exist as to which sheet is used In my example it is Sheet1, but you have to set it to the actual name of your sheet

with ws 
    For i = 1 To .UsedRange.Rows.Count
        Select Case .Cells(i, 1)   'Looks at the value of row i column A, and then below if it matches a case.
            Case "Unexpected Status"
                varVal = "Pass"
                lngColor = 13434828
            Case "At Risk"
                varVal = "At Risk"
                lngColor = 8420607
            Case "Requirements Definition"
                varVal = "Failed"
                lngColor = 10092543
            Case else
                varVal = Empty
                lngColor = 0
        End Select
        .Cells(i, 16) = varVal 'row i in column P is set to the value determined by the condition in the select case part
        If Not lngColor = 0 Then 'This value of lngColor is only present if the select case did not match and if so, the color should not be changed
           .Range(.Cells(i, 1), .Cells(i, 16)).Interior.Color = lngColor 'Set the range of row i column A to column P to the color specified by the case select.
        End If
     Next i
End With
© www.soinside.com 2019 - 2024. All rights reserved.