具有值的单元格内的VBA跨工作表颜色编码匹配

具有值的单元格内的VBA跨工作表颜色编码匹配,vba,excel,Vba,Excel,我已经在一个excel工具上工作了将近一个星期了,因为我已经快完成了,我发现自己面临着一个目前无法解决的问题 在我的工作簿的一张纸上,我有如下内容: 现在我想用sheet2对其进行颜色编码(用颜色填充单元格)以匹配它。所以你有了一个想法,这是表2: 因此,通过检查表2中相应的A列,表1中的行将得到颜色编码。例如:如果单元格A2表示ABC,我希望宏填写第2行中具有黄色值的每个单元格(如图2中F1:G3所示,ABC表示黄色) 所以最后应该是这样的: 我已经试着写了一些代码来做这件事,不幸的是它

我已经在一个excel工具上工作了将近一个星期了,因为我已经快完成了,我发现自己面临着一个目前无法解决的问题

在我的工作簿的一张纸上,我有如下内容:

现在我想用sheet2对其进行颜色编码(用颜色填充单元格)以匹配它。所以你有了一个想法,这是表2:

因此,通过检查表2中相应的A列,表1中的行将得到颜色编码。例如:如果单元格A2表示ABC,我希望宏填写第2行中具有黄色值的每个单元格(如图2中F1:G3所示,ABC表示黄色)

所以最后应该是这样的:

我已经试着写了一些代码来做这件事,不幸的是它没有工作。尽管如此,你还是可以看一看,也许它能帮助你帮助我

Sub colormatching()

Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim aCol As Long
Dim MaxRowList As Long, destiny_row As Long, x As Long

Set wsSource = ThisWorkbook.Worksheets("Sheet1")
Set wsTarget = ThisWorkbook.Worksheets("Sheet2")

aCol = 1
MaxRowList = wsSource.Cells(Rows.Count, aCol).End(xlUp).Row


destiny_row = 1
For x = 2 To MaxRowList
    If InStr(1, wsTarget.Cells(x, 1), "ABC") > 0 Then
        wsSource.Range("$A$" & x).Select
        With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With
destiny_row = destiny_row + 1
    End If
Next
End Sub
我真的很感谢你在这件事上的帮助!提前感谢。

您可以尝试以下方法:

Sub main()
    Dim cell As Range

    With ThisWorkbook.Worksheets("Sheet1")
        .UsedRange.Interior.ColorIndex = xlNone '<--| clear preceeding cells coloring
        For Each cell In Intersect(.Columns(1), .UsedRange.SpecialCells(xlCellTypeConstants).EntireRow)
            cell.EntireRow.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = GetColorIndex(cell.row)
        Next
    End With
End Sub

Function GetColorIndex(rowIndex As Long) As Variant    
    With ThisWorkbook.Worksheets("Sheet2")
        GetColorIndex = .Range("F1:F3").Find(what:=.Cells(rowIndex, 1), LookIn:=xlValues, lookat:=xlWhole).Offset(, 1).Interior.ColorIndex
    End With
End Function
Sub-main()
暗淡单元格作为范围
使用此工作簿。工作表(“表1”)
.UsedRange.Interior.ColorIndex=xlNone'您可以尝试以下方法:

Sub main()
    Dim cell As Range

    With ThisWorkbook.Worksheets("Sheet1")
        .UsedRange.Interior.ColorIndex = xlNone '<--| clear preceeding cells coloring
        For Each cell In Intersect(.Columns(1), .UsedRange.SpecialCells(xlCellTypeConstants).EntireRow)
            cell.EntireRow.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = GetColorIndex(cell.row)
        Next
    End With
End Sub

Function GetColorIndex(rowIndex As Long) As Variant    
    With ThisWorkbook.Worksheets("Sheet2")
        GetColorIndex = .Range("F1:F3").Find(what:=.Cells(rowIndex, 1), LookIn:=xlValues, lookat:=xlWhole).Offset(, 1).Interior.ColorIndex
    End With
End Function
Sub-main()
暗淡单元格作为范围
使用此工作簿。工作表(“表1”)

.UsedRange.Interior.ColorIndex=xlNone“如果使用条件格式规则,这不是更容易吗?当然颜色图例不会经常更改。@Jeeped您指的是与标准excel公式匹配吗?我不知道这怎么可能……我忍不住告诉你,我尽可能避免使用条件格式,因为这会使工作簿变大,并最终通过用户复制和粘贴分散到各地,最终失去控制。我发布了一个VBA解决方案,使用条件格式规则不是更容易吗?当然颜色图例不会经常更改。@Jeeped您指的是与标准excel公式匹配吗?我不知道这怎么可能……我忍不住告诉你,我尽可能避免使用条件格式,因为这会使工作簿变大,并最终通过用户复制和粘贴分散到各地,最终失去控制。我发布了一个VBA解决方案