【问题标题】:Should I use collection or dictionary for vba?我应该为 vba 使用集合还是字典?
【发布时间】:2021-01-02 20:47:53
【问题描述】:

我有多个数据集和这些数据表(excel)。

这是火车时刻表

depart  a       a      a      a
arrive  t       t      t      t
Train   z1      z2     z3     z4
station
a                                               
as  6:30:00 7:47:00 8:18:00 9:45:00
b                                               
bs  6:33:00 7:50:00 8:21:00 9:48:00
c   6:35:00 7:52:00 8:23:00 9:50:00
cs  6:35:30 7:52:30 8:23:30 9:50:30

我尝试将数据放入集合或字典中 按火车和车站,或按时间和车站等提取数据(主要是时间)。

对于字典,好像我需要嵌套字典

对于收集,我可以按条件循环遍历所有项目吗?

谁能告诉我使用什么方法来获取数据(时间或车站或火车)?

任何建议将不胜感激。 谢谢

【问题讨论】:

标签: arrays vba dictionary data-structures collections


【解决方案1】:

是否将它们放入CollectionDictionary 取决于您打算以后如何检索它们。 首先使用类模块中的公共字段描述单个记录的数据:

Option Explicit
Public TrainID As String
Public DepartureStationID As String
Public DepartureUTC As Date
Public ArrivalStationID As String
Public ArrivalUTC As Date

现在您可以编写一个函数,将工作表Range 解析为该类的单个实例,然后为每个有趣的Range 运行此函数以进行解析(我不确定我是否正在阅读数据正确,但这是一般的想法)。

如果您打算对它们全部进行迭代并在循环中运行某些方法,请使用Collection(和For Each 循环)。

如果您打算通过 ID 检索它们,那么您可以使用 TrainIDDepartureStationID 字段作为字典键,并让每个“项目”成为该类实例的 Collection会遇到重复键问题)。

如果你打算解析一堆数据源并将它们聚合成一个可查询的数据集,你只需要一个Collection 来存储你正在解析的对象;当您将这些对象转储到工作表/表格以进行旋转和 PowerQuery 时,您将迭代该集合 =)

【讨论】:

  • 这是要走的路!这样做的好处之一是您可以为类字段获得 IntelliSense
  • 如果我使用 Train ID 和 Station ID,我如何使用两个键获取值?另一个键和值中的值?
  • @JUN 必须将复合键连接在一起...
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 2013-11-29
  • 2014-08-31
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
相关资源
最近更新 更多