从特定背景中获取价值

时间:2016-04-06 13:29:08

标签: excel vba

我在“A”列中有一个背景颜色列表,其ceil中的值是颜色的名称。 当我选择具有背景颜色的单元格时,我想这样做,这会将“C1”值的值更改为“A”列中的值。
(这不是我真正的颜色名称,每种颜色都有一个特定的名称。) 像vlookup但背景颜色和相同的ceil。
例如: enter image description here

谢谢!

3 个答案:

答案 0 :(得分:1)

将其放在工作表的代码部分:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Target
        If dictColours.Exists(.Interior.ColorIndex) Then
            Sheets("Sheet1").Range("C1").Value = dictColours(.Interior.ColorIndex)
        End If
    End With
End Sub

并将其添加到新模块,替换工作表参考:

Public dictColours As Scripting.Dictionary

Sub test()
    Set dictColours = New Scripting.Dictionary

    Dim rngTarget As Range
    Set rngTarget = Sheets("Sheet1").Range("A1")

    Do While rngTarget.Value <> ""
        dictColours.Add rngTarget.Interior.ColorIndex, rngTarget.Value
        Set rngTarget = rngTarget.Offset(1, 0)
    Loop

End Sub

答案 1 :(得分:0)

考虑使用条件格式。

答案 2 :(得分:0)

详细说明非常精细的解决方案表格我是否会建议将以下替代代码完全放入相关工作表的代码部分

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim dictColours As Scripting.Dictionary

    Set dictColours = GetDictColours(Target.Parent)

    With Target
        If dictColours.Exists(.Interior.ColorIndex) Then
            .Parent.Range("C1").Value = dictColours(.Interior.ColorIndex)
        End If
    End With
End Sub


Function GetDictColours(sht As Worksheet) As Scripting.Dictionary
    Dim i As Long

    Set GetDictColours = New Scripting.Dictionary

    Do While sht.Range("A1").Offset(i) <> ""
        GetDictColours.Add sht.Range("A1").Offset(i).Interior.ColorIndex, sht.Range("A1").Offset(i).Value
        i = i + 1
    Loop

End Function

除了一些风格选择(每个人都有他自己的最爱),OP应该更简单处理,他(正如他自己所说)是一个完整的VBA初学者!