在列中创建数组/列表/ ID集合,交叉引用每个ID出现的行

时间:2013-12-30 14:26:09

标签: arrays excel vba excel-vba

我有一些我想要索引的数据,以便我可以让Excel通过它并应用各种方法或根据ID的每个“组”查找各种属性。

在A栏中,我有“提供者”的ID。每个提供商将出现1到4次,具体取决于它有多少个子单位(1,2,3或M,出现在B列)。提供者将始终是连续的(如果提供者出现4次,每次提供者将在下一次提交之后)。

因此,第一列看起来像这样,(换位以节省空间):30111,30111,30111,30111,30113,30113,30114,30114,30114,31308 ......等。

我想遍历此列并将这些ID“组合”在一起,以便我可以添加到我的宏中,对每组相同的提供者ID执行操作。换句话说,我需要有某种索引(在数组,列表,集合,字典或其他中),第一个ID包括1-4行,第二个ID包括5-6行等等。

有什么想法吗?到目前为止,我一直在尝试使用数组,字典和集合,但没有成功。我觉得我可能最难以概念化这个问题的正确解决方案。

我认为数据库可能是一个更有用的解决方案,但在excel中工作是我的首要任务,因为它使解决方案变得可移植,更易于设置,可以为更多人理解,并且可能更可靠。

1 个答案:

答案 0 :(得分:1)

这是我的意思是拥有一个包含行号的字典商店集合:

'loop to fill dictionary
For Each cell In Selection
    id = cell.Value
    If Not dict.Exists(id) Then dict.Add id, New Collection
    dict(id).Add cell.Row
Next cell

'get the first id and read out its rows
id = dict.Keys(0)
For Each v in dict(id)
    Debug.Print v
Next v

我不知道你怎么会觉得字典键必须始终是字符串文字。但是,如果您的单元格值为30111,则cell.Value的类型为double,因此在dict.Add cell.Value, ...之后,键30111将位于字典中,但"30111" }(作为字符串)不会,dict("30111")将返回空。也许这是你的问题?为避免这种情况,您需要使用CStr()