excel - 给定变量的字符串名称设置变量值
问题描述
我是 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 但我认为这只修改了对象的属性而不是变量。
这是我想做的一个简短的片段:
解决方案
使用一个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”
推荐阅读
- javascript - 在我的主要 vue 组件中无法使用cropperjs 获得最终裁剪版本
- file - Ubuntu - 如何创建相对文件路径快捷方式
- asp.net - 如何将 Admin、User、Seller 放到同一张表中
- javascript - 仅在模态打开时播放音频文件
- fabricjs - 如何仅更改一段文本的文本格式?
- javascript - 如何在会话存储中存储变量
- python-3.x - 嗨,我正在尝试在非空对象中找到一个对象
- symfony - Symfony 5 项目没有安装 stof-doctrine-extensions
- firebase - 特定于域的 Firebase 安全规则
- apache-nifi - 内部 https 负载均衡器 GCP 后面的 Nifi 实例