excel – 在VBA中创建颜色向量

我正在编写一个宏来检查多年的数据表以找到特定颜色的单元格.不幸的是,人类吮吸并且多年来一直没有选择相同的细胞颜色(它们可能与人眼相同,但具有不同的RGB值).

如果我有一个内部颜色RGB(255,23,50)的单元格,有没有办法创建一个颜色向量,以查看单元格内部颜色是否落在它上面?我正在寻找创建一个带有-15个RGB点的矢量,所以如果我要搜索RGB(255,23,50)的单元格,我想要RGB(255,38,65)和RGB(240,8, 35).

我知道我可以使用IF语句来查看颜色是否落在这两个值之间,但如果我可以创建一个颜色向量,我可以将它用于更多应用程序(如果需要,代码将更容易修改改变).

这个if语句有效:

If ActiveWorkbook.Worksheets("Sheet1").Range("e5").Interior.Color >= RGB(240, 8, 35) And ActiveWorkbook.Worksheets("Sheet1").Range("e5").Interior.Color <= RGB(255, 38, 65) Then
    MsgBox ("yes")
Else
    MsgBox ("no")
End If

但我正在寻找更多的东西:

dim redVector as long ' or other appropriate variable type

' ***** code that defines the red vector *****

if range("e5").interior.color = redVector then
    ' do stuff
end if

最佳答案 这应该做:

Function IsInVector(srcColor, newColor, lOffset As Long) As Boolean

    Dim lSrcColor As Long
    Dim lNewColor As Long
    Dim lTemp     As Long

    lSrcColor = CLng(srcColor)
    lNewColor = CLng(newColor)

    lTemp = (lSrcColor - lNewColor) / 65536
    lTemp = Abs(Round(lTemp, 0))

    If lOffset <> lTemp Then
        IsInVector = False
    Else
        IsInVector = True
    End If

End Function

'/ Example usage::::  
Sub test()

    Debug.Print IsInVector(RGB(255, 23, 50), RGB(255, 38, 65), 15) '~~~> True
    Debug.Print IsInVector(RGB(255, 23, 50), RGB(255, 43, 63), 15) '~~~> False
    Debug.Print IsInVector(RGB(255, 23, 50), RGB(255, 38, 65), 15) '~~~> True

End Sub
点赞