【问题标题】:Using a 3-column Collection in Excel VBA and searching it在 Excel VBA 中使用 3 列集合并进行搜索
【发布时间】:2012-11-20 08:25:26
【问题描述】:

我正在 excel vba 中构建一个算法来搜索网络中的路径。我是编写这类问题的新手。请不要推荐替代软件。问题应该很简单。

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

数据如下所示:

从节点到节点流

1 2 4

2 3 3

3 4 2

4 5 1

7 6 1

8 7 2

最大的障碍:

我正在使用一个集合来保存这些数据并使用下面的代码进行设置。

Dim y As Collection 设置 y = 新集合 y.Add Sheets("FlowDecomp_Solve").Range("fromtoflow").Value

数据被拉入,但看起来像这样: (试了一张照片,但我是新用户)

项目 1

第 1(1) 项

  Item 1 (1,1)   1

  Item 1 (1,2)   2

  Item 1 (1,3)   4

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

非常感谢您的帮助。

【问题讨论】:

    标签: vba collections key


    【解决方案1】:

    经过多次反复试验,我决定将原始数据设为数组并像这样搜索它(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 的集合中,直到它找不到另一个弧,然后我写出路径,清空集合,更新值,然后重新开始。

    希望这对其他人有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      相关资源
      最近更新 更多