如何根据单元格填充颜色更改单元格的值

时间:2020-09-09 23:54:21

标签: excel vba

我在excel中有一个电子表格,其中有三种类型的单元格。黑细胞,黄细胞和没有填充的细胞。我正在尝试编写代码,以使黑色单元格包含值1,黄色单元格包含值2和无填充单元格值0

到目前为止,这是我对黑色和黄色单元格的要求:

Sub changeValuesBasedOnColour()

    Dim rg As Range
    Dim xRg As Range
    Set xRg = Selection.Cells
    Application.DisplayAlerts = False
    For Each rg In xRg
        With rg
            Select Case .Interior.Color
                Case Is = 0   'Black
                    .Value = 1
                Case Is = 255255 'Yellow
                    .Value = 2
            End Select
        End With
    Next
    Application.DisplayAlerts = False


End Sub

这适用于电子表格中黑色填充的单元格:它们现在都包含值1。但是,对于我的黄色细胞来说,什么都没有改变。

我认为可能与错误的十六进制代码有关,但是我也尝试过2552550和```255255000``。黄色单元格由excel标准颜色的黄色填充,如下所示。

excel standard colours

2 个答案:

答案 0 :(得分:1)

您对黄色的值有误;它应该是65535。可以通过几种方式进行验证:

  1. 选择一个黄色单元格,然后在立即窗口中输入? ActiveCell.Interior.Color,然后按 Enter
  2. 在立即窗口中输入? vbYellow,然后按 Enter
  3. 在立即窗口中输入? RGB(255, 255, 0),然后按 Enter

在您的代码中,您可以只使用vbBlackvbYellow来代替065535

答案 1 :(得分:1)

必须准确指定颜色。黄色<>黄色。有上千种黄色阴影。您的代码中Application.DisplayAlerts = False的第一个实例是不必要的。第二个是错误。

下面的代码采用的方法与您刚开始使用的方法相反。它读取颜色集,如果是“已知”颜色,则应用索引号。该系统的优点是,它更易于维护和扩展。

Sub SetValuesBasedOnColour()

    Dim Cols    As Variant                  ' array of colours
    Dim Idx     As Long                     ' index of Cols
    Dim Cell    As Range                    ' loop object
    
    Cols = Array(vbBlack, vbYellow)
    For Each Cell In Selection.Cells
        With Cell
            On Error Resume Next
            Idx = WorksheetFunction.Match(.Interior.Color, Cols, 0)
            If Err.Number = 0 Then .Value = Idx
        End With
    Next Cell
End Sub