在Excel中如何用两个条件替换单元格内部颜色
在我的Excel工作表中,第一个条件是根据行和列的文本匹配以蓝色突出显示相交的单元格 第二个条件:如果单元格值(日期格式)小于今天的日期,则以蓝色突出显示的单元格值必须更改为红色 我能够满足第一个条件,但未能满足第二个条件 Excel数据如下所示: 第一个条件: 第二个条件:我面临的问题,以获得红色内饰 我正在尝试使用VBA代码,如下所示:在Excel中如何用两个条件替换单元格内部颜色,excel,vba,Excel,Vba,在我的Excel工作表中,第一个条件是根据行和列的文本匹配以蓝色突出显示相交的单元格 第二个条件:如果单元格值(日期格式)小于今天的日期,则以蓝色突出显示的单元格值必须更改为红色 我能够满足第一个条件,但未能满足第二个条件 Excel数据如下所示: 第一个条件: 第二个条件:我面临的问题,以获得红色内饰 我正在尝试使用VBA代码,如下所示: 子运行比较() 将ws设置为工作表 设置ws=ActiveSheet 变暗cols作为范围,rws作为范围 将lastRow设置为整数:lastRow
子运行比较()
将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
您可以使用条件格式完成此操作。是否需要VBA?可能需要,但我有其他基于此输出的链接表,因此我更喜欢使用VBA编写。您的第二个条件不起作用,因为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) 如果结束 如果结束 下一个 下一个
和rws
不是您要查看的单元格。您要查看cols
-这是包含要检查的值的单元格。注意:ws.cells(rws.Row,cols.Column)
不起作用,因为左侧的计算结果为True/False,所以您正在尝试执行(rws.value=cols.value)
。如何更正此语句?注意-使用True
而不是Long
。请参阅以获取查找最后一行/列的可靠方法。Integer
有问题。您可以使用条件格式来执行此操作。是否需要VBA?可能需要,但我有其他基于此输出的链接表,因此我更喜欢用VBA编写。您的第二个条件不起作用,因为UsedRange
和rws
不是您要查看的单元格。您要查看cols
-这是包含要检查的值的单元格。注意:ws.cells(rws.Row,cols.Column)
不起作用,因为左侧的计算结果为True/False,所以您正在尝试执行(rws.value=cols.value)
。我如何更正此语句?注意-使用True
而不是Long
。请查看查找最后一行/列的可靠方法。Integer
有问题。完美!!VBA代码完全符合我的要求红色。非常感谢!!!好东西。乐于帮助!完美!!VBA代码完全符合我的要求。非常感谢!!!好东西。乐于帮助!UsedRange
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
- 红色: