循环遍历一个范围以创建嵌套数据树

2024-04-02

我需要创建一个零件号列表,其中显示用于创建第一零件的所有其他子零件。

例如部分12345是通过组合构建的abc and def.

我有一个顶级部分的列表,以及第二个列表,其中有两列,左侧显示顶级,右侧显示子部分。

e.g:

| Top Level Part |                    | Top Level Part | Sub Part |
| 123456         |                    | 123456         | abc      |
| 234567         |                    | 123456         | def      |
                                      | 234567         | ghi      |
                                      | 234567         | jkl      |
                                      | abc            | yyy      |
                                      | abc            | zzz      |
                                      | yyy            | 000000   |

我使用了 for every 循环来查看第一个表中的每个部分并将其与第二个表进行比较,将每个子部分返回到右侧。然而,我正在努力超越一个层次。

我想要做的是,一旦找到子部件,就循环遍历列表,查找该部件号并返回它的子部件。并继续,直到不再找到该部件。有效地给了我一棵树。

-123456
--abc
---yyy
----000000
---zzz
--def
-234567
--ghi
--jkl

我最初使用的循环是这样的:

Dim topList as range, top as range
Dim lookupList as range, lookup as range
Dim i as integer

Set topList = .sheets("Sheet1").range("A2:A100")
set lookupList = .sheets("Sheet2").Range("A2:A1000")

i = 1

For Each top in topList
    For Each lookup in lookupList
        If (top = lookup) then
            top.offset(0, i).value = lookup.offset(0, 1))

            i = i + 1
        End If
    Next lookup
Next top

我考虑过在其中使用 while 循环,它将重新扫描列表中的子部件,每次找到一个部件时将变量更改为新的部件号,并在列表中不存在该部件时停止运行。

但我无法想出一种可行的方法来实现这一点。


我尝试使用字典和递归函数来呈现结果。您可以对其进行一些调整以仅显示顶部部分。目前它显示 A 列中的每个项目。C 列是输出。

我的想法是,我循环遍历 A 列,并为每个部分创建一个字典,并在字典中包含子部分的条目。

当我呈现结果时,如果字典中的条目也是我的顶级字典中的条目,我会再次呈现它。

Public Sub sFindParts()

  Dim topPartDict As New Dictionary, subPartDict As Dictionary, d As Dictionary
  Dim topPartList As Range, part As Range
  Dim outputLocation As Range
  Dim i As Integer, indLvl As Integer
  Dim k As Variant, p As Variant

  Set outputLocation = Sheet2.Range("C1")
  Set topPartList = Sheet2.Range("A2:A8")

  For Each part In topPartList
    If Not topPartDict.Exists(part.Value) Then
      Set d = New Dictionary
      d.Add Key:=part.Offset(0, 1).Value, item:=part.Offset(0, 1).Value
      topPartDict.Add Key:=part.Value, item:=d
      Set topPartDict(part.Value) = d
    Else
      Set d = topPartDict(part.Value)
      d.Add Key:=part.Offset(0, 1).Value, item:=part.Offset(0, 1).Value
      Set topPartDict(part.Value) = d
    End If
  Next part

  indLvl = fPresentParts(outputLocation, topPartDict, topPartDict, 0)

End Sub


Private Function fPresentParts(ByRef location As Range, ByRef tpd As Dictionary, ByRef d As Dictionary, indLvl As Integer) As Integer
  Dim k As Variant, v As Variant
  Dim subPartsDict As Dictionary

  For Each k In d.Keys()
    If TypeOf d(k) Is Dictionary Then
      Set v = d(k)
      location.IndentLevel = indLvl
      location.Value = k
      Set location = location.Offset(1, 0)
      indLvl = indLvl + 1
      Set subPartsDict = v
      indLvl = fPresentParts(location, tpd, subPartsDict, indLvl)
    Else
      If tpd.Exists(d(k)) And TypeOf tpd(d(k)) Is Dictionary Then
        location.IndentLevel = indLvl
        location.Value = d(k)
        Set location = location.Offset(1, 0)
        indLvl = indLvl + 1
        indLvl = fPresentParts(location, tpd, tpd(d(k)), indLvl)
      Else
        location.IndentLevel = indLvl
        location.Value = k
        Set location = location.Offset(1, 0)
      End If
    End If

  Next k
  indLvl = indLvl - 1
  fPresentParts = indLvl
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环遍历一个范围以创建嵌套数据树 的相关文章

随机推荐

  • 将同步方法更改为异步方法

    我在谷歌上搜索了很多并阅读了不同的菜鸟教程 但我认为我不明白正确的做法是什么 基本上 现有的同步代码会在服务器启动并运行时执行某些操作 有时 很少见 服务器需要更长的时间才能启动 因此我想将其包装在一些重试逻辑中 我构建了一个完全愚蠢的控制
  • 单向数据库同步

    经常需要将一个数据库中的主表中的数据同步到其他数据库 通常位于其他服务器上 中的克隆表 例如 考虑这样一种情况 后端系统管理库存数据 并且库存数据最终必须推送到作为网站应用程序一部分的一个或多个数据库 后端系统中的源数据高度规范化 有数十个
  • 如何强制文本框显示正在输入的内容?

    在我的 UWP 应用程序中 单击按钮 btnCre8NewMap 时我会调用 ContentDialog 这是相关的 XAML
  • 使用 BeautifulSoup 迭代 XML 来提取特定标签并存储在变量中

    我对编程相当陌生 一直在努力寻找解决方案 但我能找到的只是零碎的东西 没有真正的运气将它们组合在一起 我正在尝试使用BeautifulSoup4 in python刮一些xml并将文本值存储在变量中的特定标签之间 这些数据来自医学生培训计划
  • Android 支持 v23.1.0 更新破坏了 NavigationView 获取/查找标头

    我一直在使用v23 0 1支持库到目前为止没有任何问题 现在当我切换到新的v23 1 0我在抽屉布局中的小部件上得到一个空指针 mNavigationView NavigationView findViewById R id navigat
  • 蟒蛇基维 |标签文本上的阿拉伯文本

    当我尝试输入阿拉伯语文本时出现问题 我的代码是 import kivy from kivy app import App from kivy uix textinput import TextInput class TestApp App
  • SQL Server 2014 nvarchar(max) 结果的哈希字节为 nvarchar(max)

    使用 SQL Server 2014 我有一个表nvarchar max 称为的列 ASCII File 它可以包含许多 K 的 ASCII 文本文件 然后我想对该文件执行 MD5 哈希字节 并且生成的哈希值应始终为 20 字节 好吧 当我
  • 如何在 MySQL 中搜索“邻近词”?

    例如 我想搜索一个词 marple 这应该返回具有接近或精确单词的行 例如 marble maple marple ETC 在mysql查询中如何实现呢 或者更好地给出建议 如果有的话 SOUNDEX 函数 http dev mysql c
  • 如何使用具有字典数组的键解析字典

    UPDATE 8 31 12 所以现在我需要根据 isReservable 1遍历字典数组 然后显示 begin 我只是想获取每个字典的数组的内容 我可以从那里开始 暂时 以下是我尝试过的 感谢大家的帮助 我每天都学到更多 来自 php 页
  • 在 TFS 描述字段中嵌入文本

    我有一个关于描述字段的 TFS 问题 目前 TFS 描述字段是一个空字段 用户可以在其中添加任何信息 是否可以嵌入某种类型的文本 示例 创建新错误时 TFS 描述字段为空 相反 我想在描述字段中填充以下内容 配置和日志 版本及环境 复制步骤
  • Scala 中的参数列表会直接支持元组解包吗?

    在 Haskell 中你可以这样写 x Int Int gt Int x p s p 在 Scala 中你可以这样写 def x a Int Int a 1 or def x a Int Int a match case p s gt p
  • Alamofire 自动刷新令牌并重试 iOS Swift 4 中的先前 API 调用

    现在我正在使用 Swift 4 开发 iOS 应用程序 这里我使用 Alamofire 来集成 API 调用 我需要集成正确的方法来自动刷新身份验证令牌并重试之前的 API 调用 成功登录后 我将存储身份验证令牌 因此 登录后 在每个 AP
  • 如何让一个 Perl 脚本查看另一个 Perl 脚本中的变量?

    我有一个越来越大的 Perl 脚本 因此我想将其分解为多个脚本 也就是说 我想取出一些大的哈希声明并将它们放入另一个文件中 如何使原始脚本能够查看和使用现在在其他脚本中声明的变量 这让我抓狂 因为我已经有一段时间没有使用 Perl 了 而且
  • 使 XmlReaderSettings CheckCharacters 适用于 xml 字符串

    我有一个来自 Adob e PDF AcroForms 的 xml 字符串 它显然允许命名以数字字符开头的表单字段 我正在尝试将此字符串解析为 XDocument XDocument xDocument XDocument Parse xm
  • 查找字符串中最后一次出现的子字符串,并将其替换

    所以我有一长串相同格式的字符串 我想找到最后一个 每个字符中的一个 并将其替换为 我尝试过使用 rfind 但我似乎无法正确利用它来做到这一点 这应该可以做到 old string this is going to have a full
  • 带有 NSTask 的沙箱

    我启用了沙箱并使用 sbin ping使用 NSTask task setLaunchPath sbin ping task setArguments NSArray arrayWithObjects c10 iPAddress nil 一
  • Qt 颜色选择器小部件?

    我有一个QDialog向用户提供一些选项供其选择的子类 这些选项之一是颜色 我见过QColorDialog https stackoverflow com a 1972272 2062384 我需要一些更简单的东西 这也是一个常规小部件 这
  • 尽管所有测试都通过,但 TeamCity NUnit 构建步骤失败

    我正在设置 TeamCity 来运行一些 NUnit 测试 TeamCity 报告所有测试均已通过 但报告构建失败 并显示错误消息 新构建状态为 NUnit 错误 build status text 深入查看构建日志 我可以看到加载测试中的
  • 带有 AngularJS 指令的类似 Google 的搜索框

    我正在编写一个应用程序 其 UI 方面几乎与 Google 完全相同 我到达登陆页面 我有一个搜索框 提交后会将您引导至结果页面 在这里 您有相同的搜索框和其他指令 您可以在其中切换模式 例如 网络 图像 目前我有 在登陆页面上 带有 ac
  • 循环遍历一个范围以创建嵌套数据树

    我需要创建一个零件号列表 其中显示用于创建第一零件的所有其他子零件 例如部分12345是通过组合构建的abc and def 我有一个顶级部分的列表 以及第二个列表 其中有两列 左侧显示顶级 右侧显示子部分 e g Top Level Pa