0

我觉得以前有人问过这个问题,但我只是不太了解解决方案。我想知道如何检查某些单元格的值并将匹配的颜色复制到另一个单元格。我有一个看起来像这样的工作表:

   A        B           C       D               E               F
 1 Type     Location    Cell    PairType        PairLocation    PairCell
 2 EX3      1           A1      EX2             1               F3
 3 EX4      1           B2      EX3             1               G3
 4 EX2      1           F3      EX3             1               A1

A、B 和 C 中的某些值具有不同的颜色以将它们标记为特殊(背景颜色,而不是字体颜色)。我需要从 D 列中获取值,在 A 中找到匹配项,然后如果/当我找到匹配项时,将背景颜色从 A、B 和 C 复制到 D、E 和 F 的背景。如果我找到 D到 A 匹配(如第 2 行 D 列到第 4 行 A 列)然后 E/F 值也将匹配 B/C 值(如上所示),所以我不必担心覆盖任何值。我对 Excel-ese 不是很流利,所以当我读到这样的解决方案时:

Function BGCol(MRow As Integer, MCol As Integer)  As Integer
   BGCol = Cells(MRow, MCol).Interior.ColorIndex  
End Function

我不太确定自己在做什么。任何人都可以提供解决方案和解释吗?

4

2 回答 2

1
Sub ReColour()

Dim rStart As Range, lRow1 As Long, lRow2 As Long, lRows As Long, sFind As String

Set rStart = Sheet1.Range("A1")
lRows = rStart.Offset(65000, 0).End(xlUp).Row - rStart.Row

For lRow1 = 1 To lRows
    sFind = rStart.Offset(lRow1, 3).Value
    For lRow2 = 1 To lRows
        If rStart.Offset(lRow2, 0).Value = sFind Then
            rStart.Offset(lRow1, 3).Interior.ColorIndex = rStart.Offset(lRow2, 0).Interior.ColorIndex
            rStart.Offset(lRow1, 4).Interior.ColorIndex = rStart.Offset(lRow2, 1).Interior.ColorIndex
            rStart.Offset(lRow1, 5).Interior.ColorIndex = rStart.Offset(lRow2, 2).Interior.ColorIndex
            Exit For
        End If
    Next
Next
End Sub

抱歉,现在没时间解释,但我想这样就可以了。你真的应该使用比魔法列号 3、4、5 等更好的东西,但这是一个快速的解决方案。

于 2012-09-20T16:13:51.060 回答
0

这应该有效。它可以提高效率,但它肯定会让你开始。

将它放在标准模块中并运行代码(F5 或 F8 单步执行)。如果您需要更多指导,请告诉我。

Sub CheckColors()

Dim rng As Range

For Each cel In Range("D2:D" & Range("D" & Rows.Count).End(xlUp).Row)

    Set rng = Columns(1).Find(cel, lookat:=xlWhole)

    If Not rng Is Nothing Then

        cel.Interior.ColorIndex = rng.Interior.ColorIndex
        cel.Offset(, 1).InteriorColorIndex = rng.Offset(, 1).Interior.ColorIndex
        cel.Offset(, 2).InteriorColorIndex = rng.Offset(, 2).Interior.ColorIndex

    End If

Next

End Sub
于 2012-09-20T16:17:12.840 回答