如何同时输出两个独立字典的键?VBA字典打印问题求助
解决两个字典并列打印对应数据的问题
嘿,我完全懂你的困扰——你现在把两个字典分开遍历,导致结构缺陷和电气缺陷的内容上下错开,没法对应到同一个班组的行里对吧?其实核心就是要用同一个循环同时访问两个字典里的对应键值对,这样计数器iResults只会按行递增,实现并列输出。
核心方案(假设两个字典的键完全对应)
如果你的electricalNotes和structuralNotes的键都是相同的班组名称(每个班组在两个字典里都有记录),直接遍历其中一个字典的键,同时取出两个字典的值就行:
With Sheets("Results") ' 遍历电气缺陷字典的键,同步获取结构缺陷对应的值 For Each Item In electricalNotes ' 第一列放班组名称(可根据你的列需求调整,比如F列) .Range("F" & iResults).Value = Item ' 第二列放结构缺陷(对应你的左侧列) .Range("G" & iResults).Value = structuralNotes(Item) ' 第三列放电气缺陷(对应你的右侧列) .Range("H" & iResults).Value = electricalNotes(Item) ' 计数器仅在每处理完一行后递增一次 iResults = iResults + 1 Next End With ' 最后清空两个字典 electricalNotes.RemoveAll structuralNotes.RemoveAll
进阶方案(处理键不匹配的情况)
如果有的班组只有电气缺陷记录,有的只有结构缺陷记录,我们可以先收集所有不重复的班组键,再逐个检查两个字典里的对应值:
' 创建集合存储所有不重复的班组键 Dim allTeams As Collection Set allTeams = New Collection ' 收集电气缺陷字典的所有键(忽略重复) On Error Resume Next For Each Item In electricalNotes allTeams.Add Item, Key:=CStr(Item) Next ' 收集结构缺陷字典的所有键(忽略重复) For Each Item In structuralNotes allTeams.Add Item, Key:=CStr(Item) Next On Error GoTo 0 ' 恢复正常错误处理 With Sheets("Results") For Each team In allTeams ' 输出班组名称 .Range("F" & iResults).Value = team ' 检查是否有结构缺陷记录,无则留空 If structuralNotes.Exists(team) Then .Range("G" & iResults).Value = structuralNotes(team) Else .Range("G" & iResults).Value = "" End If ' 检查是否有电气缺陷记录,无则留空 If electricalNotes.Exists(team) Then .Range("H" & iResults).Value = electricalNotes(team) Else .Range("H" & iResults).Value = "" End If iResults = iResults + 1 Next End With electricalNotes.RemoveAll structuralNotes.RemoveAll
这样不管两个字典的键是否完全匹配,都能保证每个班组的两种缺陷(如果有的话)都打印在同一行里,完美解决内容上下错开的问题。
内容的提问来源于stack exchange,提问作者Matt Gaydon
相关产品推荐
相关产品推荐

