Arrays 如何将范围中每个单元格的颜色索引加载到数组中?

Arrays 如何将范围中每个单元格的颜色索引加载到数组中?,arrays,vba,excel,Arrays,Vba,Excel,我试图将范围(A1:A30)转储到一个数组中。当我提取范围的单元格值时,它工作正常 aM = Sheet2.Range("A1:A30").Value 但是,我需要该范围内每个单元格的颜色索引。我知道,我可以通过循环该范围内的每个单元格来实现这一点。为了提高效率,我不想使用循环选项 我可以使用以下代码/替代方法来实现这一点吗 Dim aM() As Variant aM = Sheet2.Range("A1:A30").Interior.ColorIndex For i = LBound(a

我试图将范围(A1:A30)转储到一个数组中。当我提取范围的单元格值时,它工作正常

 aM = Sheet2.Range("A1:A30").Value
但是,我需要该范围内每个单元格的颜色索引。我知道,我可以通过循环该范围内的每个单元格来实现这一点。为了提高效率,我不想使用循环选项

我可以使用以下代码/替代方法来实现这一点吗

Dim aM() As Variant
aM = Sheet2.Range("A1:A30").Interior.ColorIndex
For i = LBound(aM) To UBound(aM)
    Debug.Print aM(i, 1)
Next i 
我可以使用以下代码/替代方法来实现这一点吗

Dim aM() As Variant
aM = Sheet2.Range("A1:A30").Interior.ColorIndex
For i = LBound(aM) To UBound(aM)
    Debug.Print aM(i, 1)
Next i 
你必须循环。即使可以这样做
am=Range.Interior.ColorIndex
,它后面也会实现一个隐藏的循环。在
aM=Sheet2.Range(“A1:A30”).Value中还实现了一个循环,您只是看不到它

一般来说,加载300K颜色需要2秒钟:

Public Sub TestMe()

    Dim i               As Long
    Dim aM(300000)      As Long

    For i = LBound(aM) To UBound(aM)
        aM(i) = Cells(i + 1, 1).Interior.ColorIndex
    Next i

End Sub

从技术上讲,您不必循环—您可以使用相邻列中定义的名称和公式进行循环,但它不会为您节省任何实时时间!谢谢你,伙计。。。我会坚持循环。。。只是需要你对这件事的评论。。。我正在尝试将数据放到数组中,然后进一步使用字典来进一步操作数据。。。这是一个很好的方法,还是我把它复杂化了,只是直接把数据放到字典上?@JaspalLabana-字典是一个很坏的主意,因为如果它使用正确的方法,它不应该有相同的值两次。在任何情况下,你可能会有两倍相同的颜色。(又称字典)@Rory-如果你在Excel中只使用一个处理器,那么公式将一个接一个地执行(但速度非常快,你甚至不会注意到)。这在技术上是一个循环。但这太详细了:)@Vityata我想很清楚,它的意思是VBA中的一个循环!;)