我目前正在构建一个宏,以允许我导入 Excel 电子表格并将数据格式化为类似报告的结构。
到目前为止,我已经能够使用公式手动完成此操作来聚合数据,但我想自动化其中的许多步骤。
所以,我觉得我有一个决定要做。
由于我要将另一个 Excel 文件导入启用宏的工作簿,我是通过引用范围来处理数据,还是将文件的内容转储到 Variant Array/Collection/Dict?
我想其他人最终会想要使用这个“报告生成器”,所以我试图使转换尽可能无缝。
那里有很多报告构建工具。除非我不明白这个问题,否则自己制作似乎是浪费精力。
除非您要处理大量数据并且速度至关重要,否则我强烈建议您使用 Ranges 作为主要对象。主要优点是:
Range("A1:B10")
, Range(TopCell, BottomCell)
,Range("NamedRange")
.Resize(Rows, Cols)
和 '.Offset(Rows, Cols)` 用于灵活引用.Value
, .Formula
, .Font
, .Border
....SpecialCells
查找公式/值/...、.Rows.Visible
隐藏等)For Each c in Range("YourRange").Cells
循环遍历一个范围内的所有单元格如果要修改值本身以外的任何内容,则需要使用 Ranges。只有当您想对更大的数据集进行一些复杂的计算时,您才能通过将范围(或任何数据源)的内容读取到数组中来提高性能,在数组/内存中对其进行处理,然后将结果写回范围一冲。这种方法将显着提高计算速度 - 但仅适用于少数情况,如果性能确实很重要,则值得推荐。
关于集合/字典:
不要将它们与范围进行比较——它们是某些任务的有用工具,尤其是。当您想遍历一组成员时。但是范围本身是一种集合,即您可以循环其元素(只是不能删除/添加新成员)。如果你想比较 Collections 和 Dictionary 类的使用,这里是我的快速总结:
集合内置于 VBA 中,因此无需引用。对于我想要循环或寻址的简单聚合,这是我的主要选择。字典的优点是它们提供了额外的功能,主要是一个.Exists
属性和一个.Keys
集合,允许你也循环遍历散列的键。因此,每当我需要这些功能时,我都会参考 Dictionary(在Microsoft Scripting Runtime中),但在其他方面坚持使用 Collections。