Vba 最优雅的解决方案是根据单元格填充颜色从大量文本中仅复制选定行

Vba 最优雅的解决方案是根据单元格填充颜色从大量文本中仅复制选定行,vba,excel,Vba,Excel,我在创建用于工作场所的应用程序时遇到问题。工作簿由不同数量的类似子表和一个摘要表组成。每个子表有70个预定义的用户文本输入区域,尽管通常不会使用其中的大多数区域。用户输入的任何文本都会使输入文本的单元格有条件地格式化为三种颜色之一 我正在尝试编写一个宏,它将按顺序将用户在子表中输入的所有文本复制到摘要表中的列表中。我最初认为最好的方法是复制所有用户输入的文本,然后删除所有不符合所需标准的文本行。然而,在编写了一个宏,该宏可以在所有工作表中循环并快速正确地复制用户输入的所有文本之后,我发现格式设置

我在创建用于工作场所的应用程序时遇到问题。工作簿由不同数量的类似子表和一个摘要表组成。每个子表有70个预定义的用户文本输入区域,尽管通常不会使用其中的大多数区域。用户输入的任何文本都会使输入文本的单元格有条件地格式化为三种颜色之一

我正在尝试编写一个宏,它将按顺序将用户在子表中输入的所有文本复制到摘要表中的列表中。我最初认为最好的方法是复制所有用户输入的文本,然后删除所有不符合所需标准的文本行。然而,在编写了一个宏,该宏可以在所有工作表中循环并快速正确地复制用户输入的所有文本之后,我发现格式设置没有执行。因此,我无法根据行的格式删除行。(我一直在使用下面的基本复制方法)

我应该: A) 修改我的代码以逐行检查和复制子表中与我的条件匹配的文本 B) 使用PasteSpecial命令,而不是我一直在使用的更简单的copy命令(参见上文),然后根据行的格式删除行,如之前所述 C) 还有别的方法吗


最优雅的解决方案是什么?澄清一下,我主要关心的是任何给定的解决方案都需要的计算机负载,以及最终的执行速度。任何想法都值得欣赏。

就我个人而言,我会走简单的路线,做一个嵌套循环,检查每页上使用的行和列中的单元格的格式,然后使用计数器(n=n+1)将您找到的任何信息粘贴到摘要表上的行(n)。这样,就不会删除任何行


在Range(“CR”).Interior.ColorIndex上使用If语句检查颜色是否与您要查找的颜色匹配。您还可以对多种颜色使用选择框。

除了asp8811的答案外,要在Excel VBA中编写优雅、快速的代码,您应该尽量减少对Range对象的使用,尤其是Range.Copy方法的使用。与Range相比,以下内容更可取。复制:

Dim vCopy As Variant, vPaste As Variant
vCopy = IteratingSheet.UsedRange.Value
If vCopy(a, b) = ConditionalFormattingCriteria Then
    vPaste(x, y) = vCopy(a, b)
End If

With SummarySheet
    .Range(.Cells(1, 1), .Cells(UBound(vPaste), UBound(vPaste, 2))).Value = vPaste
End With

这个问题需要一个固执己见的答案,不适合StackOverflow。我想征求一个植根于事实的意见,将“最优雅”列为执行速度方面最有效的。至少有两个人有足够的代表点来回答这个问题。像这样的问题比堆栈溢出更适合代码检查。好的,抱歉。我会重新思考。IIRC,Range.Interior.ColorIndex对条件格式的颜色不起作用。你是对的。我从未将其用于条件格式,也不知道。谢谢
Dim vCopy As Variant, vPaste As Variant
vCopy = IteratingSheet.UsedRange.Value
If vCopy(a, b) = ConditionalFormattingCriteria Then
    vPaste(x, y) = vCopy(a, b)
End If

With SummarySheet
    .Range(.Cells(1, 1), .Cells(UBound(vPaste), UBound(vPaste, 2))).Value = vPaste
End With