在Excel VBA中使用3列集合并进行搜索

时间:2012-12-02 20:41:20

标签: vba collections key

我正在excel vba中构建一个算法来搜索网络中的路径。我是编程这些类型问题的新手。请不要建议备用软件。问题应该很简单。

问题描述: 搜索表示弧上流的数据集合(3“列”:from,to,flow) 识别路径(从源头开始,找到流向“to”,在“from”字段中查找“to”,找到到“to”的流程,依此类推,直到从源到另一个“from”找不到)每条路的尽头。

数据如下所示:

fromnode tonode flow

1 2 4

2 3 3

3 4 2

4 5 1

7 6 1

8 7 2

最大的障碍:

我正在使用Collection来保存这些数据,并使用下面的代码进行设置。

Dim y As Collection 设置y =新集合 y。添加表格(“FlowDecomp_Solve”)。范围(“fromtoflow”)。值

数据被拉入,但看起来像这样: (尝试过图片,但我是新用户)

第1项

项目1(1)

  Item 1 (1,1)   1

  Item 1 (1,2)   2

  Item 1 (1,3)   4

因此它表明Collection有1个项目而不是我的弧形数量。如何访问集合的Item1(1,2)类型地址。每个特殊值是否都有唯一键?在代码中使用后,如何搜索我的集合并删除特定行?

非常感谢你提供任何帮助。

1 个答案:

答案 0 :(得分:0)

经过多次试验和错误后,我决定将我的原始数据设为一个数组,然后像这样搜索(d在数组中,a在数组中):

For d = LBound(arcflow(), 1) To UBound(arcflow(), 1)
    For a = LBound(arcflow(), 2) To UBound(arcflow(), 2)
        If a = 1 Then
        fromnode = arcflow(d, a)
        ElseIf a = 2 Then
        tonode = arcflow(d, a)
        ElseIf a = 3 Then
        flow = arcflow(d, a)
        'write into node-node matrix
        Sheets("FlowDecomp_Solve").Range("nodenodemtrx").Cells(fromnode, tonode).value = 1
        End If
    Next a
Next d

然后,为了跟踪路径,我将from和to节点添加到名为Path的集合,直到它找不到另一个弧,然后我写出路径,清空集合,更新值,然后重新开始。

希望这有助于其他人...