如果颜色为黄色,则删除背景颜色

时间:2016-10-20 08:03:13

标签: excel excel-vba vba

我有一个包含大量工作表的工作表,每个工作表都包含一些具有特定背景颜色的行 是否可以删除工作表中具有特定颜色(在我的情况下为黄色)背景的所有单元格或行的背景颜色

here is an example file

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。您必须检查特定范围的Range.Interior.Color值。在VBA中,这将是这样的:

If ActiveWorksheet.Range("A1").Interior.Color = RGB(255,255,0) Then
  'Do something
End If
在这种情况下,

RGB(255,255,0)为黄色。您也可以使用所有其他值。见RGB Function。要删除颜色,请使用:

Range("A1").Interior.Pattern = xlNone

如果您需要进一步的帮助,请提供有关您的问题的更多详细信息和/或发表评论。

您可能还想查看以下链接:Range.InteriorInterior.Color

编辑:根据您的示例数据,您可能希望从“E”,“F”,“G”和“H”列中的各种工作表中删除绿色。绿色的RGB是RGB(146,208,80)。这段代码应该做的工作:

Sub removeColor()
    Dim lastRow As Long
    Dim ws As Worksheet
    Dim i As Long
    Dim color As Long
    color = RGB(146, 208, 80)
    For Each ws In ThisWorkbook.Worksheets
        lastRow = ws.Range("A65536").End(xlUp).Row
        For i = 3 To lastRow
            If ws.Range("E" & i).Interior.color = color Then
                ws.Range("E" & i).Interior.Pattern = xlNone
            End If
            If ws.Range("F" & i).Interior.color = color Then
                ws.Range("F" & i).Interior.Pattern = xlNone
            End If
            If ws.Range("G" & i).Interior.color = color Then
                ws.Range("G" & i).Interior.Pattern = xlNone
            End If
            If ws.Range("H" & i).Interior.color = color Then
                ws.Range("H" & i).Interior.Pattern = xlNone
            End If
        Next i
    Next ws
End Sub

编辑:如果要检查所有单元格的颜色,请使用:

Sub removeColor()
    Dim ws As Worksheet
    Dim cell as Range
    Dim color As Long
    color = RGB(146, 208, 80)
    For Each ws In ThisWorkbook.Worksheets
        For Each cell in ws.UsedRange
            If cell.Interior.Color = color Then
                cell.Interior.Pattern = xlNone
            End If
        Next cell
    Next ws
End Sub

答案 1 :(得分:0)

这可能会解决您的问题:

For i = 1 To Sheets.Count
    On Error GoTo nex:
    Sheets(i).Activate
    For j = 1 To ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
        For k = 1 To ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, LookIn:=xlValues, SearchDirection:=xlPrevious).Column
            '65535 equals yellow
            '5296274 equals green
            If ActiveSheet.Cells(j, k).Interior.Color = 65535 Then ActiveSheet.Cells(j, k).Interior.Pattern = xlNone
        Next
    Next
nex:
Next

循环遍历所有工作表并在所有使用过的单元格中查找背景颜色。

要获得代表颜色的数字,您只需将颜色为所需颜色的A1,然后运行以下代码:

MsgBox (ActiveSheet.Cells(1, 1).Interior.Color)

希望我能提供帮助。