【问题标题】:Coloring Excel cells under conditions在条件下为 Excel 单元格着色
【发布时间】:2012-10-15 06:19:45
【问题描述】:

我正在尝试在 excel 宏中查找可以解决以下问题的代码。

如果第一列包含任何文本,则用某种颜色突出显示第一列单元格,直到下一个文本不会出现在同一列中。当任何文本出现在同一列中时,开始用不同的颜色为单元格着色。

我必须对我工作簿中的所有工作表重复此操作。 谢谢。

现在我正在使用这个宏来为空的单元格着色 但问题是遇到文本时颜色不会改变

Sub try()
Dim i As Integer
Dim j As Integer
Dim k As Integer
i = 200
j = 100
k = 5

Application.ScreenUpdating = False

With ActiveSheet.UsedRange
    .AutoFilter Field:=1, Criteria1:=""
    If WorksheetFunction.CountBlank(.Columns(1)) > 0 Then
        .Columns(1).SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(i, j, k)
    Else
        i = i - 50
        j = j - 10
        k = 255
    End If

    .AutoFilter
End With

Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 为单元格的背景颜色着色,尝试 cells.interior.color = RGB(255,0,0) 'Red
  • 请更清楚地解释您要达到的目标。您给出的示例只显示黄色 A、绿色 B 和蓝色 C。这是什么意思?尝试一些东西,然后就任何具体问题与我们联系。投票结束。
  • 正如我之前所说,我必须为行着色,直到遇到文本,然后更改颜色
  • "如果第一列包含任何文本,则用某种颜色突出显示第一列单元格,直到下一个文本不会出现在同一列中。" -> 这就是它令人困惑且没有意义的原因。
  • 如果第一列包含文本,则继续突出显示该列的单元格。如果再次在同一列中出现文本,请按照相同的程序使用不同的颜色。它只关注一列

标签: excel vba


【解决方案1】:

给你:

Option Explicit

Sub Color_Ranges()

Dim oSheet                  As Worksheet
Dim oRange                  As Range
Dim oRange_Color            As Range
Dim oBaseCell               As Range
Dim lLast_Row               As Long
Dim lRange_Rows             As Long
Dim iCnt_Values             As Integer
Dim iCnt_Intervals          As Integer

Dim r                       As Integer
Dim g                       As Integer
Dim b                       As Integer

Dim iCnt                    As Integer


Set oSheet = ThisWorkbook.Sheets(1)
With oSheet
    lLast_Row = .Range("A1").SpecialCells(xlCellTypeLastCell).Row
End With

'Total range you want to color
Set oRange = oSheet.Range(Cells(1, 1), Cells(lLast_Row, 1))
lRange_Rows = oRange.Rows.Count

'Count values
iCnt_Values = WorksheetFunction.CountA(oRange)
'Count intervals
iCnt_Intervals = iCnt_Values - 1

'Generate random colors
r = CInt(Int((255 * Rnd()) + 1))
g = CInt(Int((255 * Rnd()) + 1))
b = CInt(Int((255 * Rnd()) + 1))

Set oBaseCell = oRange.Cells(1, 1)
For iCnt = 1 To iCnt_Intervals
    Set oRange_Color = Range(oBaseCell, oBaseCell.End(xlDown))
    oRange_Color.Interior.Color = RGB(r, g, b)
    r = CInt(Int((255 * Rnd()) + 1))
    g = CInt(Int((255 * Rnd()) + 1))
    b = CInt(Int((255 * Rnd()) + 1))
    Set oBaseCell = oBaseCell.End(xlDown)
    Set oRange_Color = Nothing
Next iCnt

End Sub

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 2023-04-07
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多