【发布时间】:2010-09-24 03:54:33
【问题描述】:
使用宏,我将多个工作簿中的信息合并到新工作簿中的一张工作表中。
在一个专栏中,我创建了一个名为 ColRange 的命名范围。该列的数字范围从 -350 到 500。
如何根据单元格中文本的值更改单元格的颜色。
红色(0-500)
黄色(-5-0)
绿色(-350--5)
【问题讨论】:
-
请发布您当前的代码
使用宏,我将多个工作簿中的信息合并到新工作簿中的一张工作表中。
在一个专栏中,我创建了一个名为 ColRange 的命名范围。该列的数字范围从 -350 到 500。
如何根据单元格中文本的值更改单元格的颜色。
红色(0-500)
黄色(-5-0)
绿色(-350--5)
【问题讨论】:
看看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
【讨论】:
假设该值是存储在列中的数字,那么:
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 应该是什么颜色?红色还是黄色?
【讨论】:
这是对原问题的回复,是文森特回复的简单修改:
如果是命名范围(使用 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 包装它
【讨论】: