我目前正在构建一个宏,允许我导入Excel电子表格并将数据格式化为类似报表的结构。
到目前为止,我已经能够使用公式手动完成此操作来聚合数据,但我想自动完成其中的许多步骤。
所以,我觉得我有决定。
由于我将另一个Excel文件导入到启用宏的工作簿中,我是通过引用范围来处理数据,还是将文件的内容转储到Variant Array / Collection / Dict?
我想其他人最终会想要使用这个“报告生成器”,所以我试图让转换尽可能无缝。
答案 0 :(得分:0)
那里有很多报告构建工具。除非我不理解这个问题,否则制作自己的作品似乎是浪费精力。
答案 1 :(得分:0)
除非你处理大量数据并且速度至关重要,否则我强烈建议使用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 中),但坚持收集其他内容。