首页 > 解决方案 > 给定变量的字符串名称设置变量值

问题描述

我是 VBA 的初学者,我有一个包含 2 列颜色和形状的 excel 文件。可以存在 9 种不同的组合,例如 (Red,Circle)、(Red,Square)、(Purple,Square) 等等。但是有数百行,因此每个 (Color,Shape) 元组在数据集中出现不止一次。

有一个名为 Area 的第三列,它只是形状的区域。

我想遍历数据集并计算每个(颜色,形状)组合的总面积。

我之前定义了 9 个变量,它们是两个列名的组合,所以像“Color_Shape”是通用格式,具体示例是 Red_Circle、Red_Square 和 Purple_Square(都初始化为整数)

但是,我不想在每次迭代(对于每个组合)都有 9 个 If 语句。

如果我使用当前行的颜色和形状列值创建一个字符串,那么如何访问名称与字符串相同的变量并将“区域”值添加到该变量?

我已经研究过 CallByName 但我认为这只修改了对象的属性而不是变量。

这是我想做的一个简短的片段:

在此处输入图像描述

标签: excelvba

解决方案


使用一个Dictionary对象:

Option Explicit

Sub main()

    Dim dict As Object

    Set dict = CreateObject("Scripting.Dictionary")

    Dim cell As Range
    With Worksheets("myWorksheetName")
        For Each cell In .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
            dict(cell.Value & "_" & cell.Offset(, 1).Value) = dict(cell.Value & "_" & cell.Offset(, 1).Value) + cell.Offset(, 2).Value
        Next
    End With

    Dim key As Variant
    For Each key In dict.keys
        Debug.Print key, dict(key)
    Next
End Sub

所以你称之为访问每个不同元组的“字符串”实际上是Key对象的dictionary(例如:“Red_Square”


推荐阅读