Excel 检查每个工作表是否包含特定颜色,并粘贴到目标工作表中

Excel 检查每个工作表是否包含特定颜色,并粘贴到目标工作表中,excel,vba,Excel,Vba,对于工作簿中的每个工作表,我希望: -检查行是否包含颜色索引为-4142(黄色)的单元格 -如果是,请将行值复制并粘贴到ToDo列表中 我试过: 1) 对于每个循环,如下所示。 2) 我想我会坚持多久 For i = 1 To ThisWorkbook.Worksheets.Count Set Sh1 = Worksheets(i) 预期输出为: 如果活页1有3行-第1行:黄色,第2行:绿色,第3行:黄色 第2页有2行-第1行:黄色,第2行:蓝色 然后ToDo sheet将显示工作表1第1行、

对于工作簿中的每个工作表,我希望:
-检查行是否包含颜色索引为-4142(黄色)的单元格
-如果是,请将行值复制并粘贴到ToDo列表中

我试过:
1) 对于每个循环,如下所示。
2) 我想我会坚持多久

For i = 1 To ThisWorkbook.Worksheets.Count
Set Sh1 = Worksheets(i)
预期输出为:
如果活页1有3行-第1行:黄色,第2行:绿色,第3行:黄色
第2页有2行-第1行:黄色,第2行:蓝色
然后ToDo sheet将显示工作表1第1行、工作表1第3行、工作表2第2行的值


当前输出为“未获得信息”消息。

是否需要整行显示为“黄色”?或者每行都有一个单元格

我想问的是,如果A1是黄色,B1是蓝色,C1是红色,D1是黄色,您只想将A1和D1从此行复制到工作表“ToDo”-复制到A1和B1或复制/粘贴整行


祝您度过愉快的一天

这贯穿于每个工作表的usedrange中的每个单元格。如果内部颜色匹配,它将复制该行中的所有值,并将其放入待办事项列表工作表中。如果todo列表的行计数器在循环完成后没有更改,则会弹出“未获取任何信息”消息

Option Explicit

Sub Test()

    Dim oToDo As Worksheet
    Set oToDo = Worksheets("ToDo")
    Dim oToDoRow As Long
    oToDoRow = 2        ' Whatever row your "todo" data starts on

    Dim oCell As Range
    Dim oCurWS As Worksheet
    Dim oPrevRow As String

    For Each oCurWS In ThisWorkbook.Worksheets
        If oCurWS.Name <> "ToDo" Then
            For Each oCell In oCurWS.UsedRange
                ' I used Interior Color you should be able to use colorindex in the same way
                If oCell.Interior.Color = 65535 Then
                    If oPrevRow <> oCurWS.Index & "_" & oCell.Row Then
                        oToDo.Rows(oToDoRow).Value = oCurWS.Rows(oCell.Row).Value
                        oPrevRow = oCurWS.Index & "_" & oCell.Row
                        oToDoRow = oToDoRow + 1
                    End If
                End If
            Next
        End If
    Next

    ' Match oToDoRow with whatever is set as default at the top
    If oToDoRow = 2 Then MsgBox "No info obtained"

End Sub
选项显式
子测试()
Dim oToDo As工作表
设置oToDo=工作表(“ToDo”)
暗淡的耳垂和长的一样
oToDoRow=2'无论您的“待办事项”数据从哪一行开始
Dim oCell As系列
Dim oCurWS作为工作表
将oPrevRow设置为字符串
适用于本工作簿中的每位观众。工作表
如果是oCurWS.Name“ToDo”,那么
对于oCurWS.UsedRange中的每个oCell
“我使用了内饰颜色,您应该能够以同样的方式使用colorindex
如果oCell.Interior.Color=65535,则
如果oPrevRow oCurWS.Index&“&”oCell.Row,则
oToDo.Rows(oToDoRow).Value=oCurWS.Rows(oCell.Row).Value
oPrevRow=oCurWS.Index&“&”oCell.Row
奥托多罗=奥托多罗+1
如果结束
如果结束
下一个
如果结束
下一个
'将oToDoRow与顶部设置为默认值的内容匹配
如果oToDoRow=2,则MsgBox“未获得任何信息”
端接头

如果一行中有多个单元格高亮显示,则更新以防止该行被多次列出。

这不是答案。用于澄清。我需要有50个声誉来评论别人的帖子,所以这就是为什么我发布“答案”,然后获得这50个声誉
Option Explicit

Sub Test()

    Dim oToDo As Worksheet
    Set oToDo = Worksheets("ToDo")
    Dim oToDoRow As Long
    oToDoRow = 2        ' Whatever row your "todo" data starts on

    Dim oCell As Range
    Dim oCurWS As Worksheet
    Dim oPrevRow As String

    For Each oCurWS In ThisWorkbook.Worksheets
        If oCurWS.Name <> "ToDo" Then
            For Each oCell In oCurWS.UsedRange
                ' I used Interior Color you should be able to use colorindex in the same way
                If oCell.Interior.Color = 65535 Then
                    If oPrevRow <> oCurWS.Index & "_" & oCell.Row Then
                        oToDo.Rows(oToDoRow).Value = oCurWS.Rows(oCell.Row).Value
                        oPrevRow = oCurWS.Index & "_" & oCell.Row
                        oToDoRow = oToDoRow + 1
                    End If
                End If
            Next
        End If
    Next

    ' Match oToDoRow with whatever is set as default at the top
    If oToDoRow = 2 Then MsgBox "No info obtained"

End Sub