【问题标题】:Color Cell Based on Value in Cell根据单元格中的值对单元格进行颜色
【发布时间】:2010-09-24 03:54:33
【问题描述】:

使用宏,我将多个工作簿中的信息合并到新工作簿中的一张工作表中。

在一个专栏中,我创建了一个名为 ColRange 的命名范围。该列的数字范围从 -350 到 500。

如何根据单元格中文本的值更改单元格的颜色。
红色(0-500) 黄色(-5-0) 绿色(-350--5)

【问题讨论】:

  • 请发布您当前的代码

标签: vba excel


【解决方案1】:

看看conditional formatting。您甚至可能不需要 VBA 来执行此操作。

话虽如此,VBA 代码看起来像这样:

Public Sub colorit()
    Dim colRange As Range
    Dim rowNum As Integer
    Dim rnum As Integer

    rnum = 20
    Set colRange = Range(Cells(2, 9), Cells(rnum, 9))

    For rowNum = 1 To colRange.Rows.Count
        If colRange.Cells(rowNum, 1).Value <= -5 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(0, 255, 0)
        ElseIf colRange.Cells(rowNum, 1).Value <= 0 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(255, 255, 0)
        ElseIf colRange.Cells(rowNum, 1).Value <= 500 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(255, 0, 0)
        End If
    Next rowNum
End Sub

【讨论】:

  • 伙计们都尝试了,但没有任何乐趣:(我通过以下设置 colRange = Range(Cells(2, 9), Cells(rnum, 9)) 来定义rane。选择它会突出显示单元格,所以是显然做一些事情有什么帮助
  • 我已更改我的代码以将您的设置用于 colRange。我刚刚为 rnum 选择了 20 的值。我已经在 Excel 2000 中对此进行了测试,它就像一个魅力。你有什么版本的 Excel?
【解决方案2】:

假设该值是存储在列中的数字,那么:

If value >= 0 AND value <= 500 Then
    ColRange.Interior.Color = RGB(255,0,0)
ElseIf  value >= -5 Then
    ColRange.Interior.Color = RGB(255,255,200)
Else
    ColRange.Interior.Color = RGB(0,255,0)
End If

并假设大于 500 或小于 -350 的值是不可能的,或者您的脚本无法验证。此外,您的范围有点重叠,0 应该是什么颜色?红色还是黄色?

【讨论】:

    【解决方案3】:

    这是对原问题的回复,是文森特回复的简单修改:

    如果是命名范围(使用 UI:插入、名称、定义):

    Dim c As Range
    
    For Each c In Range("ColRange").Cells
        If c.Value >= 0 And c.Value <= 500 Then
            c.Interior.Color = RGB(255, 0, 0)
        ElseIf c.Value >= -5 Then
            c.Interior.Color = RGB(255, 255, 200)
        Else
            c.Interior.Color = RGB(0, 255, 0)
        End If
    
    Next c
    

    如果是范围对象,在代码中定义:

    Dim c as Range
    
    For Each c In colRange.Cells
    
        If c.Value >= 0 And c.Value <= 500 Then
            c.Interior.Color = RGB(255, 0, 0)
        ElseIf c.Value >= -5 Then
            c.Interior.Color = RGB(255, 255, 200)
        Else
            c.Interior.Color = RGB(0, 255, 0)
        End If
    
    Next c
    

    我认为文森特的响应不太有效,因为它试图在 If Then 内的整个 ColRange 范围内进行操作,而不是一次对每个单元格进行操作。 (出于这个原因,您可能还想用 Application.ScreenUpdating = False 包装它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2013-01-03
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多