在Excel中如何用两个条件替换单元格内部颜色

在Excel中如何用两个条件替换单元格内部颜色,excel,vba,Excel,Vba,在我的Excel工作表中,第一个条件是根据行和列的文本匹配以蓝色突出显示相交的单元格 第二个条件:如果单元格值(日期格式)小于今天的日期,则以蓝色突出显示的单元格值必须更改为红色 我能够满足第一个条件,但未能满足第二个条件 Excel数据如下所示: 第一个条件: 第二个条件:我面临的问题,以获得红色内饰 我正在尝试使用VBA代码,如下所示: 子运行比较() 将ws设置为工作表 设置ws=ActiveSheet 变暗cols作为范围,rws作为范围 将lastRow设置为整数:lastRow

在我的Excel工作表中,第一个条件是根据行和列的文本匹配以蓝色突出显示相交的单元格

第二个条件:如果单元格值(日期格式)小于今天的日期,则以蓝色突出显示的单元格值必须更改为红色

我能够满足第一个条件,但未能满足第二个条件

Excel数据如下所示:

第一个条件:

第二个条件:我面临的问题,以获得红色内饰

我正在尝试使用VBA代码,如下所示:

子运行比较()
将ws设置为工作表
设置ws=ActiveSheet
变暗cols作为范围,rws作为范围
将lastRow设置为整数:lastRow=ws.UsedRange.Rows.Count
将lastColumn设置为整数:lastColumn=ws.UsedRange.Columns.Count
对于ws.Range中的每个列(ws.Cells(4,1),ws.Cells(4,lastColumn))
如果cols.Value vbNullString,则
对于ws.范围内的每个rws(“A1:A”和lastRow)
'第一个条件语句
如果(rws.Value=cols.Value),则
ws.Cells(rws.Row,cols.Column).Interior.Color=RGB(152191241)
如果结束
'第二个条件语句
如果(rws.Value=cols.Value)<日期,则
ws.Cells(rws.Row,cols.Column).Interior.Color=RGB(255,0,0)
如果结束
下一个
如果结束
下一个

End Sub
这可以通过条件格式轻松完成

根据以下公式添加两条规则:


  • 红色:
    =和($A3=B$1,B3“”,B3这可以通过条件格式轻松完成

    根据以下公式添加两条规则:


    • 红色:
      =和($A3=B$1,B3”),B3此解决方案适合您吗

      Dim ws As Worksheet
      
      Dim col As Integer
      Dim row As Integer
      Dim lastRow As Integer
      Dim lastCol As Integer
      Dim OK As Boolean
      
      Set ws = ActiveSheet
      lastRow = ws.UsedRange.Rows.Count
      lastCol = ws.UsedRange.Columns.Count
      
      For col = 1 To lastCol
          For row = 2 To lastRow
              If ws.Cells(row, 1).Value = ws.Cells(1, col).Value Then
                  If ws.Cells(row, col) < Date Then
                      ws.Cells(row, col).Interior.Color = RGB(255, 0, 0)
                  Else
                      ws.Cells(row, col).Interior.Color = RGB(15, 219, 241)
                  End If
              End If
          Next
      Next
      
      Dim ws As工作表
      作为整数的Dim col
      将行设置为整数
      将最后一行设置为整数
      将lastCol设置为整数
      将OK设置为布尔值
      设置ws=ActiveSheet
      lastRow=ws.UsedRange.Rows.Count
      lastCol=ws.UsedRange.Columns.Count
      对于col=1到lastCol
      对于第2行到最后一行
      如果ws.Cells(行,1).Value=ws.Cells(1,列).Value,则
      如果ws.Cells(行、列)<日期,则
      ws.Cells(行,列).Interior.Color=RGB(255,0,0)
      其他的
      ws.Cells(行,列).Interior.Color=RGB(152191241)
      如果结束
      如果结束
      下一个
      下一个
      
      此解决方案适合您吗

      Dim ws As Worksheet
      
      Dim col As Integer
      Dim row As Integer
      Dim lastRow As Integer
      Dim lastCol As Integer
      Dim OK As Boolean
      
      Set ws = ActiveSheet
      lastRow = ws.UsedRange.Rows.Count
      lastCol = ws.UsedRange.Columns.Count
      
      For col = 1 To lastCol
          For row = 2 To lastRow
              If ws.Cells(row, 1).Value = ws.Cells(1, col).Value Then
                  If ws.Cells(row, col) < Date Then
                      ws.Cells(row, col).Interior.Color = RGB(255, 0, 0)
                  Else
                      ws.Cells(row, col).Interior.Color = RGB(15, 219, 241)
                  End If
              End If
          Next
      Next
      
      Dim ws As工作表
      作为整数的Dim col
      将行设置为整数
      将最后一行设置为整数
      将lastCol设置为整数
      将OK设置为布尔值
      设置ws=ActiveSheet
      lastRow=ws.UsedRange.Rows.Count
      lastCol=ws.UsedRange.Columns.Count
      对于col=1到lastCol
      对于第2行到最后一行
      如果ws.Cells(行,1).Value=ws.Cells(1,列).Value,则
      如果ws.Cells(行、列)<日期,则
      ws.Cells(行,列).Interior.Color=RGB(255,0,0)
      其他的
      ws.Cells(行,列).Interior.Color=RGB(152191241)
      如果结束
      如果结束
      下一个
      下一个
      
      您可以使用条件格式完成此操作。是否需要VBA?可能需要,但我有其他基于此输出的链接表,因此我更喜欢使用VBA编写。您的第二个条件不起作用,因为
      rws
      cols
      不是您要查看的单元格。您要查看
      ws.cells(rws.Row,cols.Column)
      -这是包含要检查的值的单元格。注意:
      (rws.value=cols.value)
      不起作用,因为左侧的计算结果为True/False,所以您正在尝试执行
      True
      。如何更正此语句?注意-使用
      Long
      而不是
      Integer
      。请参阅以获取查找最后一行/列的可靠方法。
      UsedRange
      有问题。您可以使用条件格式来执行此操作。是否需要VBA?可能需要,但我有其他基于此输出的链接表,因此我更喜欢用VBA编写。您的第二个条件不起作用,因为
      rws
      cols
      不是您要查看的单元格。您要查看
      ws.cells(rws.Row,cols.Column)
      -这是包含要检查的值的单元格。注意:
      (rws.value=cols.value)
      不起作用,因为左侧的计算结果为True/False,所以您正在尝试执行
      True
      。我如何更正此语句?注意-使用
      Long
      而不是
      Integer
      。请查看查找最后一行/列的可靠方法。
      UsedRange
      有问题。完美!!VBA代码完全符合我的要求红色。非常感谢!!!好东西。乐于帮助!完美!!VBA代码完全符合我的要求。非常感谢!!!好东西。乐于帮助!
      If rws.Value = cols.Value Then
          With ws.Cells(rws.Row, cols.Column) 
              If .Value < Date Then
                  .Interior.Color = RGB(255, 0, 0) ' RED
              Else 
                  .Interior.Color = RGB(15, 219, 241) ' BLUE
              End If
          End With
      End If
      
      Dim ws As Worksheet
      
      Dim col As Integer
      Dim row As Integer
      Dim lastRow As Integer
      Dim lastCol As Integer
      Dim OK As Boolean
      
      Set ws = ActiveSheet
      lastRow = ws.UsedRange.Rows.Count
      lastCol = ws.UsedRange.Columns.Count
      
      For col = 1 To lastCol
          For row = 2 To lastRow
              If ws.Cells(row, 1).Value = ws.Cells(1, col).Value Then
                  If ws.Cells(row, col) < Date Then
                      ws.Cells(row, col).Interior.Color = RGB(255, 0, 0)
                  Else
                      ws.Cells(row, col).Interior.Color = RGB(15, 219, 241)
                  End If
              End If
          Next
      Next