【问题标题】:Conditional formatting range based on 2 conditions (other cell's format/ value)基于 2 个条件的条件格式范围(其他单元格的格式/值)
【发布时间】:2023-03-24 09:26:01
【问题描述】:

我是 VBA 新手,英语不是我的母语,所以就这样吧。

如果该行中的单元格 C 在列 C 中有重复值,并且如果列 O 中有一个等于 0 的单元格,但如果列中的单元格C 没有类似的值,不要将条件格式应用于该单元格(即使 O 列中的单元格的值为 0)。

注意:在 C 列中具有相同值的单元格将始终在彼此上方和下方,例如可能 C1=C2=C3 而不是 C1C2, C1=C3

我知道我没有解释清楚,所以如果您想了解更多信息,请告诉我。

更新(更多信息):我可能有 3 行或更多行具有相同的 C 列值上下,并且 O 列中的零值将始终是底行。

示例: 如果 C1=C2=C3=C4=C5 和 O5=0 ,行 1 2 3 4 5 变为绿色。 我更喜欢使用条件格式,即使它需要 vba 代码,所以我不必每次在 O 列中有新的 0 时都运行它。

我使用过这段代码,但它不起作用(显然),但可能与我的问题有点不同,因为真实数据比我说明的更复杂。我的数据表从第 4 行开始(第 3 行的标题)。此代码仅格式化 1 行(在具有零列 O 值的行之上),我需要的是格式化具有相同列 C 值的所有行。请记住,我是 vba 的新手 :(

With Range("A4:r8000").FormatConditions.Add( _ 
Type:=xlExpression, _
 Formula1:="=AND($C4=$C5,$O5=0,$F4<>0)")
 .Interior.Color = 13551615
 .Font.Color = -16383844
End With

【问题讨论】:

  • 我使用这段代码,但可能与我的问题有点不同,因为真实数据比我说明的要复杂。我的数据表从第 4 行开始(第 3 行的标题)。此代码仅格式化 1 行(在具有零列 O 值的行之上),我需要的是格式化具有相同列 C 值的所有行。请记住,我是 vba 的新手 :( With Range("A4:r8000").FormatConditions.Add( _ Type:=xlExpression, _ Formula1:="=AND($C4=$C5,$O5 =0,$F40)") .Interior.Color = 13551615 .Font.Color = -16383844 结尾
  • 您能否格式化代码并将其放在原始问题正文中以使其更易于阅读(并且更容易帮助您)? Stack Overflow 有帮助格式化指南。
  • 好的,请查看

标签: vba excel conditional


【解决方案1】:

试试这个作为 CFR 的公式,

=and(countif(c:c, c1)>1, o1=0, len(o1))
'alternate for part that I am not sure I understand
=and(countif(c$1:c1, c1)>1, o1=0, len(o1))

【讨论】:

    【解决方案2】:

    如果任何重复单元格的行在 O 列中有“0”,这将通过并突出显示重复单元格。我仍在研究一种方法,只要 O 列发生更改,就会自动更新,但可以不太清楚。当我这样做时会更新。

    Sub ConditionalFormatSE()
    
    Application.ScreenUpdating = False
    
    Dim lastRow As Long
    Dim myCell As Range
    Dim colCVals As Range
    
    lastRow = Cells(Rows.Count, 3).End(xlUp).Row
    
    Set colCVals = Range("C1", "C" & lastRow)
    
    colCVals.clearformats
    
    For Each myCell In colCVals
        If Cells(myCell.Row, 15).Value = "0" Then
            If WorksheetFunction.CountIf(colCVals, myCell.Value) > 1 Then
                Set c = colCVals.Find(myCell.Value)
                If Not c Is Nothing Then
                    firstAddress = c.Address
                    Do
                        c.Interior.color = RGB(198, 239, 206)
                        c.Font.color = RGB(0, 97, 0)
                        Set c = colCVals.FindNext(c)
                    Loop While Not c Is Nothing And c.Address <> firstAddress
                End If
            End If
        End If
    Next myCell
    
    Set colCVals = Nothing
    Set myCell = Nothing
    Set c = Nothing
    
    Application.ScreenUpdating = True
    
    End Sub
    

    至于让它自动运行,把它放在:VBAProject([workbookname].xlsm)->Microsoft Excel Objects->Sheet1([sheetname]) 并且它应该在'O'列中的值更改时运行

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    
    Set KeyCells = Columns(15)
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
           Call ConditionalFormatSE
    End If
    
    Set KeyCells = Nothing
    End Sub
    

    【讨论】:

    • 它有效,先生,但有一点,你能改变它,这样不仅C列中的单元格被突出显示,而且数据表中的相邻单元格也被突出显示。我的表格范围从 A 列到 R
    • 如果投反对票的人能说出原因,那就太好了。我相信我已经尽我所能回答了这个问题。要回答 Kheuwnyuk,您应该能够将 c.Interior.color 更改为 Range(Cells(c.row, 1), Cells(c.row, 18)).Interior.color 和类似的 c.font.color。我现在无法测试它,但它应该可以工作。
    【解决方案3】:

    如果始终将具有相同值的单元格分组(一个在另一个之下),则以下代码可能会满足您的需求。

    Sub Test()
    Dim lLastRow As Long
    Dim i As Integer
    
    lLastRow = Worksheets("Sheet1").Cells(Rows.Count, 3).End(xlUp).Row
    
    For i = 1 To lLastRow
        If ((Worksheets("Sheet1").Cells(i + 1, 3).Value = Worksheets("Sheet1").Cells(i, 3).Value) And (Worksheets("Sheet1").Cells(i, 15).Value = "0")) Then
            Worksheets("Sheet1").Cells(i, 3).Interior.Color = vbGreen
        End If
    Next i
    
    End Sub
    

    【讨论】:

    • 我试过了,但你的代码对我不起作用,因为我可能有 3 行或更多行具有相同的 C 列值,但只有底部在 O 列中的值为零。例如,如果我有 4 行具有相同的 C 列值(C1=C2=C3=C4),底部在 O 列中有 0 个值(O4=0),我希望所有 4 行都变成绿色。
    猜你喜欢
    • 2018-06-04
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2020-07-07
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多