Excel VBA: Match Cell Color

后端 未结 3 1622
长情又很酷
长情又很酷 2021-01-23 07:10

I have a workbook with two sheets. On Sheet A, I have changed the interior color of some cells. I would like to find cells in Sheet B with matching text and set them to have the

相关标签:
3条回答
  • 2021-01-23 07:26

    This can be done much much faster with:

    Option Explicit
    
    Sub MatchHighlight()
    
    
    Dim FullListCell As Range
    Dim HighlightMasterCell As Range
    Dim FullList As Range
    Dim HighlightMaster As Range
    Dim lastRow As Range
    
    'find last row in FullList
    Set lastRow = Range("C").End(xlDown)
    
    Set HighlightMaster = ThisWorkbook.Sheets("kleuren_medewerkers").Range("A1:A100")
    
    Set FullList = Range(Range("C2"), ActiveSheet.Cells(lastRow.Row, 3)) 'change the number 3 to include more columns but use the lastrow of column C
    
    
    For Each HighlightMasterCell In HighlightMaster 
        For Each FullListCell In FullList 
            If FullListCell .Value = HighlightMasterCell.Value Then
                FullListCell.Interior.Color= HighlightMasterCell.Interior.Color
            End If
    
         Next
    Next
    
    End Sub
    
    0 讨论(0)
  • 2021-01-23 07:28

    To get exactly what I wanted, I used @tigeravatar's code as a base and ended up with the following:

    Sub MatchHighlight()
    
    Dim wsHighlight As Worksheet
    Dim wsData As Worksheet
    Dim rngColor As Range
    Dim rngFound As Range
    Dim KeywordCell As Range
    Dim strFirst As String
    Dim rngPicked As Range
    
    Set rngPicked = Application.InputBox("Select Cell", Type:=8)
    Set wsHighlight = Sheets("HR - Highlight")
    Set wsData = Sheets("Full List")
    
    With wsData.Columns("C")
        For Each KeywordCell In wsHighlight.Range("C2", wsHighlight.Cells(Rows.Count, "C").End(xlUp)).Cells
            Set rngFound = .Find(KeywordCell.Text, .Cells(.Cells.Count), xlValues, xlWhole)
            If Not rngFound Is Nothing Then
                strFirst = rngFound.Address
                Set rngColor = rngFound
                Do
                    Set rngColor = Union(rngColor, rngFound)
                    Set rngFound = .Find(KeywordCell.Text, rngFound, xlValues, xlWhole)
                Loop While rngFound.Address <> strFirst
    
                Set rngColor = rngColor.Offset(0, -2).Resize(1, 3)
    
                If KeywordCell.Interior.Color = rngPicked.Interior.Color Then
                    rngColor.Interior.Color = KeywordCell.Interior.Color
                End If
            End If
        Next KeywordCell
    End With
    
    End Sub
    

    Only real differences are that I let the user pick the color of cells they're trying to match, I only change the interior color when it matches the color picked, and I change the color of the whole row.

    0 讨论(0)
  • 2021-01-23 07:30
    Sub MatchHighlight()
    
        Dim wsHighlight As Worksheet
        Dim wsData As Worksheet
        Dim rngColor As Range
        Dim rngFound As Range
        Dim KeywordCell As Range
        Dim strFirst As String
    
        Set wsHighlight = Sheets("HR - Highlight")
        Set wsData = Sheets("Full List")
    
        With wsData.Columns("C")
            For Each KeywordCell In wsHighlight.Range("C2", wsHighlight.Cells(Rows.Count, "C").End(xlUp)).Cells
                Set rngFound = .Find(KeywordCell.Text, .Cells(.Cells.Count), xlValues, xlWhole)
                If Not rngFound Is Nothing Then
                    strFirst = rngFound.Address
                    Set rngColor = rngFound
                    Do
                        Set rngColor = Union(rngColor, rngFound)
                        Set rngFound = .Find(KeywordCell.Text, rngFound, xlValues, xlWhole)
                    Loop While rngFound.Address <> strFirst
                    rngColor.Interior.Color = KeywordCell.Interior.Color
                End If
            Next KeywordCell
        End With
    
    End Sub
    
    0 讨论(0)
提交回复
热议问题