【问题标题】:Can VBA Arrays store cell properties like Font Colors or Fill Colors?VBA 数组可以存储单元格属性,如字体颜色或填充颜色吗?
【发布时间】:2019-02-08 03:13:40
【问题描述】:

下面的屏幕截图显示填充的日期以不同的颜色突出显示,我需要添加更多以标记安装过程中的不同问题。

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

如果我在变体数组中传递这个数据范围,我可以引用字体/填充颜色属性还是有间接的方式来引用数组中的单元格地址?

【问题讨论】:

  • 简短回答:不。更长的答案:获取单元格格式属性的唯一方法是循环范围并逐个单元格地访问它们。这就是为什么使用格式来包含数据是个坏主意
  • 正如克里斯所说,变量(包括数组)存储数据。您可以创建一个足够复杂的数组来存储值和格式信息,但每个格式属性只是另一段数据。格式不会自动与数字一起存储。但是,无论您尝试做什么,都可能以更合乎逻辑的方式完成。我认为您的错误是您假设它是only way for me to identify the issues。除了格式化之外,还有很多方法可以识别/跟踪问题。如果您使用的是条件格式,那么应该在 Q 中说明这一点。
  • 感谢所有建议,我将研究如何在此数据集中实现我的标志。

标签: arrays vba excel


【解决方案1】:

我同意@chris neilsen 的观点,但是...我刚刚意识到您可以实现Array 3rd 维度,例如可以保存颜色属性。

我检查过了。即使在少量数据上,它也比解决此问题的标准方法更快!

让我们在示例代码中展示它:(工作表结构)在第一行是标题,在第一列我们得到产品的 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

我对我的代码进行了修改,它只使用了单元格的 1 个属性 - 颜色属性 - 这种方法大大加快了我的代码速度。

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

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

我希望它会帮助别人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2018-04-11
    • 2020-01-11
    相关资源
    最近更新 更多