VBA阵列可以存储像字体颜色或填充颜色这样的单元格属性吗?

时间:2018-09-03 05:00:13

标签: arrays excel vba excel-vba

下面的屏幕快照显示,填写的日期用不同的颜色突出显示,我需要添加更多内容来标记安装过程中的不同问题。

img

我必须计算生产率并在计算中考虑安装问题。我确定问题的唯一方法是分配不同的填充颜色/字体颜色。

如果我在变量数组中传递此范围的数据,我将能够引用字体/填充颜色属性,还是可以通过间接方式引用数组中的单元格地址? / p>

1 个答案:

答案 0 :(得分:0)

我同意@chris neilsen,但是...我只是意识到,您可以实现Array第三维,它可以容纳例如color属性。

我检查了。即使是少量数据,也比标准方法要快!

让我们在示例代码上显示它:第一行(工作表结构)是标题,在第一列中,我们获得了产品ID。 因此,首先我们需要声明并构建具有单元格值和颜色属性的Array(称为zakres)。

Sub main1()

Dim lastRow As Long
Dim lastCol As Long
Dim ws As Worksheet

Dim comper As Range
Dim j1 As Long
Dim i As Long

Dim zakres As Variant 'our 3 dimension Array

Set ws = Sheet1 'set your worksheet

With ws
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column

    ReDim zakres(1 To lastRow, 1 To lastCol, 1 To 2)

    For i = 1 To lastRow

        For j1 = 1 To lastCol

            zakres(i, j1, 1) = .Cells(i, j1)                        'cells value
            zakres(i, j1, 2) = .Cells(i, j1).Interior.ColorIndex    'cells color property

        Next

    Next

毕竟,我们要对该表进行操作-我的意思是数组zakres-只需使用双循环(行和列)将所有值粘贴到您的工作表中

For i = 1 To lastRow
    For j1 = 1 To lastCol
        .Cells(i, j1) = zakres(i, j1, 1)
        .Cells(i, j1).Interior.Color = zakres(i, j1, 2)
    Next
Next

我对代码进行了修改,该代码仅使用cell的1个属性-color属性-这种方法大大加快了我的代码的速度。

Ps。如果您不想用空单元格填充Array,只需在循环中创建条件函数,这将跳过对空的迭代。它还将帮助并加速宏。

    If .Cells(i, j1) <> "" Then
        zakres(i, j1, 1) = .Cells(i, j1)
        zakres(i, j1, 2) = .Cells(i, j1).Interior.ColorIndex
    End If

我希望它能对某人有所帮助:)