根据日期和相邻文本格式化单元格需要什么代码
What code is required to format cells based on dates and adjacent text
我正在努力通过 VBA 对大提琴格式进行编码,我正在努力通过条件格式来完成所需的工作。
首先,我要求所有日期在当前日期的 1 个月内的单元格填充为橙色。其次,任何日期早于当前日期的单元格都将填充为红色。我能够通过条件格式轻松实现这一目标。
下一步是我认为 VBA 可能更容易的地方。如果复选标记出现在与日期单元格相邻的单元格中,则日期单元格(和复选标记单元格)将填充为绿色。我无法获得特定于条件格式的东西。
附图中显示了我正在努力实现的示例。
我正在处理的宏在下面,但逻辑只是用我理解的橙色填充任何空的复选标记单元格。我也在努力理解比较日期所需的语言。
Sub green()
For Each Cell In Worksheets("Base Data").Range("F3:P10000")
If Cell.Value = ChrW(&H2713) Then
Cell.Offset(0, -1).Interior.Color = RGB(146, 208, 80)
ElseIf Cell.Value < (Date + 30) Then
Cell.Interior.Color = RGB(255, 192, 80)
ElseIf Cell.Value < Date Then
Cell.Interior.Color = RGB(255, 0, 0)
Else
End If
Next
End Sub
然后我还需要能够使用顶部的按钮过滤任何包含橙色或红色单元格的行。
如有任何帮助,我们将不胜感激。
谢谢。
下面是您的代码的重写。
我有;
- 使用“Y”而不是勾号,因为这样更容易创建示例。
- 为了便于阅读,颜色使用了 vb 常量,您的 RGB 值很好用。
- 重新排序
If
条件 - 见下文。
- 添加了额外的条件检查以避免填充空白单元格或提前 30 天以上的日期。
您的代码的最大问题是它会检查单元格值是否为 < today + 30
并在评估值是否仅为 < Today
之前将单元格着色为橙色。如果单元格中的日期满足条件 < Today + 30
** 它也满足条件 < today
**。因为您在 < Today + 30
之后检查 < Today
,所以将红色着色的代码从未执行,它满足 < Today + 30
条件并且已经将单元格着色为橙色。
Sub Olly()
Dim TodaysDate As Date
Dim TargetCell As Range
TodaysDate = Date
For Each TargetCell In Me.Range("B2:G5")
If TargetCell.Value = "Y" Then
TargetCell.Offset(0, -1).Interior.Color = vbGreen
ElseIf Not TargetCell.Value = "" Or TargetCell.Value >= (TodaysDate + 30) Then
If TargetCell.Value <= (TodaysDate) Then
TargetCell.Interior.Color = vbRed
ElseIf TargetCell.Value <= (TodaysDate + 30) Then
TargetCell.Interior.Color = vbYellow
End If
End If
Next TargetCell
End Sub
示例;
请注意: 我没有添加任何条件格式来突出显示 Due 30 和 的最后两列逾期.
我正在努力通过 VBA 对大提琴格式进行编码,我正在努力通过条件格式来完成所需的工作。
首先,我要求所有日期在当前日期的 1 个月内的单元格填充为橙色。其次,任何日期早于当前日期的单元格都将填充为红色。我能够通过条件格式轻松实现这一目标。
下一步是我认为 VBA 可能更容易的地方。如果复选标记出现在与日期单元格相邻的单元格中,则日期单元格(和复选标记单元格)将填充为绿色。我无法获得特定于条件格式的东西。
附图中显示了我正在努力实现的示例。
我正在处理的宏在下面,但逻辑只是用我理解的橙色填充任何空的复选标记单元格。我也在努力理解比较日期所需的语言。
Sub green()
For Each Cell In Worksheets("Base Data").Range("F3:P10000")
If Cell.Value = ChrW(&H2713) Then
Cell.Offset(0, -1).Interior.Color = RGB(146, 208, 80)
ElseIf Cell.Value < (Date + 30) Then
Cell.Interior.Color = RGB(255, 192, 80)
ElseIf Cell.Value < Date Then
Cell.Interior.Color = RGB(255, 0, 0)
Else
End If
Next
End Sub
然后我还需要能够使用顶部的按钮过滤任何包含橙色或红色单元格的行。
如有任何帮助,我们将不胜感激。
谢谢。
下面是您的代码的重写。
我有;
- 使用“Y”而不是勾号,因为这样更容易创建示例。
- 为了便于阅读,颜色使用了 vb 常量,您的 RGB 值很好用。
- 重新排序
If
条件 - 见下文。 - 添加了额外的条件检查以避免填充空白单元格或提前 30 天以上的日期。
您的代码的最大问题是它会检查单元格值是否为 < today + 30
并在评估值是否仅为 < Today
之前将单元格着色为橙色。如果单元格中的日期满足条件 < Today + 30
** 它也满足条件 < today
**。因为您在 < Today + 30
之后检查 < Today
,所以将红色着色的代码从未执行,它满足 < Today + 30
条件并且已经将单元格着色为橙色。
Sub Olly()
Dim TodaysDate As Date
Dim TargetCell As Range
TodaysDate = Date
For Each TargetCell In Me.Range("B2:G5")
If TargetCell.Value = "Y" Then
TargetCell.Offset(0, -1).Interior.Color = vbGreen
ElseIf Not TargetCell.Value = "" Or TargetCell.Value >= (TodaysDate + 30) Then
If TargetCell.Value <= (TodaysDate) Then
TargetCell.Interior.Color = vbRed
ElseIf TargetCell.Value <= (TodaysDate + 30) Then
TargetCell.Interior.Color = vbYellow
End If
End If
Next TargetCell
End Sub
示例;
请注意: 我没有添加任何条件格式来突出显示 Due 30 和 的最后两列逾期.