【问题标题】:vba excel how to check if cell not empty and color the entire row?vba excel如何检查单元格是否为空并对整行着色?
【发布时间】:2017-10-18 18:57:45
【问题描述】:

我有 VBA 代码,可以将用户输入的日期与当前日期进行比较,并用适当的颜色填充背景。一切正常。

现在我需要让系统检查所选行 F 列中的单元格是否不为空 我需要为 D 列着色, E,F 为灰色。

代码:

Private Sub CommandButton1_Click()

    Dim i As Integer

    For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment'

        If IsEmpty(Cells(i, 3)) Then
            Cells(i, 3).Interior.Color = xlNone

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) < 0 Then
            Cells(i, 3).Interior.Color = vbGreen

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) = 0 Then
            Cells(i, 3).Interior.Color = vbYellow

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 1 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 4 Then
            Cells(i, 3).Interior.Color = vbRed

        ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 5 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 10 Then
            Cells(i, 3).Interior.Color = vbCyan

        Else
            Cells(i, 3).Interior.ColorIndex = xlNone

        End If

    Next

End Sub

我将不胜感激任何帮助

【问题讨论】:

  • 使用条件格式
  • @Rosetta 不,我需要在我的代码中添加它
  • if cells(i,6) &lt;&gt; "" then cells(i,3).entirerow.interior.color = vbRed... 这能解决您的问题吗?
  • @Dany7elo 在下面查看我的答案和代码

标签: excel if-statement is-empty vba


【解决方案1】:

您还需要检查Trim(Range("F" &amp; i).Value) &lt;&gt; "" 是否符合相关条件。

我还修改了您当前代码的逻辑,使其运行起来更短、更快(切换到 Select Case 等)

代码

Private Sub CommandButton1_Click()

Dim i As Long
Dim NumofDays As Long

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment'
    Cells(i, 3).Interior.Color = xlNone ' set as inital color, only change if all criterias are met

    NumofDays = CDate(Cells(i, 3)) - Date

    Select Case NumofDays
        Case Is < 0
            Cells(i, 3).Interior.Color = vbGreen

        Case 0
            Cells(i, 3).Interior.Color = vbYellow

        Case 1 To 4
            Cells(i, 3).Interior.Color = vbRed

        Case 5 To 10
            Cells(i, 3).Interior.Color = vbCyan

    End Select

    ' your 2nd criteria to color the entire row if "F" is not empty
    If Trim(Range("F" & i).Value) <> "" Then Range("D" & i & ":F" & i).Interior.Color = ... ' selectyourcolor 
Next i

End Sub

【讨论】:

  • 我不想将整行设为绿色或红色...如果我只想用灰色填充列 D,E,F 并且专栏的其余部分保持在我的代码中......我将编辑我的问题
  • @Dany7elo 查看编辑后的代码,将我写的部分... ' selectyourcolor 替换为您要放置的颜色
  • 您的代码正在运行,但仍然存在一个问题,即即使单元格 (i,3) 为空,单元格也会显示为绿色......如果 (i,3) ) 为空不能着色
  • 因此我认为 IF 语句会更好,对吧?
  • 是的,我告诉过你它工作得很好,但仍然有这个问题
【解决方案2】:

条件格式最简单,只需a few clicks

  1. 首先选择要更改其背景颜色的单元格。
  2. 通过单击主页选项卡上的条件格式 > 新规则... 创建新的格式规则。
  3. 在“开始”选项卡上,单击“条件格式”>“新建规则”... 在打开的“新建格式规则”对话框窗口中,选择“使用 确定要格式化的单元格的公式”并输入以下内容 “格式化此公式为真值的值”字段中的公式: =$C2>4
  4. 打开“新建格式规则”对话框并输入所需的公式。而不是 C2,您输入一个包含您想要的值的单元格 检查您的表格并输入您需要的数字而不是 4。并且 当然,您可以使用小于 (
  5. 另外,请注意单元格地址前的美元符号$,您需要在公式时使用它来保持列字母相同 跨行复制。实际上,这就是诀窍和 根据给定单元格中的值对整行应用格式设置。
  6. 单击“格式...”按钮并切换到填充选项卡以选择背景颜色。如果默认颜色不够用,请单击 “更多颜色...”按钮选择您喜欢的颜色,然后单击 确定两次。

【讨论】:

  • 我认为问题是以编程方式进行条件格式化。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 2012-01-03
  • 2013-06-08
  • 1970-01-01
相关资源
最近更新 更多