楼主 kevinchengcw |
Q:如何用字典同时提取两组数据的相同值和不同值及各自不同的数据? A:两组数据间可以方便的用字典提取相同或不同数据,但是如何用字典同时提取相同和不同数据呢,下面给出一个处理的例子,我们将在例子中处理两种数据的相同处、不同处和各自对应的不同处数据内容。 代码如下:- Sub test()
- Dim Dic, Arr
- Dim M, N, I As Long
- Set Dic = CreateObject("scripting.dictionary") '创建字典
- For M = 4 To Cells(Rows.Count, 2).End(3).Row '列举各数据行
- Cells(M, 14).Resize(1, 24).ClearContents '先清空统计区的数据
- For N = 2 To 7 '循环A队区的数据
- If Not Dic.exists(Cells(M, N).Value) Then Dic.Add Cells(M, N).Value, "A" '如果字典中还没有就添加,并用"A"作为Item项
- Next N
- For N = 8 To 13 '循环B队区的数据
- If Dic.exists(Cells(M, N).Value) Then '如果字典里已经有了
- If Dic(Cells(M, N).Value) <> "AB" And Dic(Cells(M, N).Value) <> "B" Then Dic(Cells(M, N).Value) = Dic(Cells(M, N).Value) & "B" '再次判断item项是否已经是"AB"或者"B"了,如果不是就加上"B"
- Else
- Dic.Add Cells(M, N).Value, "B" '如果字典里还没有就添加到字典里,并以"B"为item项
- End If
- Next N
- Arr = Dic.keys '将字典的keys赋值给数组,便于取用
- For N = LBound(Arr) To UBound(Arr) '循环从数组里取值(相当于取出字典中的各个key)
- Select Case Dic(Arr(N)) '判断item项的类型
- Case Is = "A" 'A的情况下写到差异不同和A队差异对应的位置,注意用工作表函数的counta来判断该写到第几个单元格
- Cells(M, 20).Resize(1, 6).Cells(WorksheetFunction.CountA(Cells(M, 20).Resize(1, 6)) + 1) = Arr(N)
- Cells(M, 26).Resize(1, 6).Cells(WorksheetFunction.CountA(Cells(M, 26).Resize(1, 6)) + 1) = Arr(N)
- Case Is = "B" 'B的情况处理
- Cells(M, 20).Resize(1, 6).Cells(WorksheetFunction.CountA(Cells(M, 20).Resize(1, 6)) + 1) = Arr(N)
- Cells(M, 32).Resize(1, 6).Cells(WorksheetFunction.CountA(Cells(M, 32).Resize(1, 6)) + 1) = Arr(N)
- Case Is = "AB" '是AB时只写到战绩相同里
- Cells(M, 14).Resize(1, 6).Cells(WorksheetFunction.CountA(Cells(M, 14).Resize(1, 6)) + 1) = Arr(N)
- Case Else '其他情况,预留(可以防止出错卡住)
-
- End Select
- Next N
- Erase Arr '清空数组,防止意外出错
- Dic.RemoveAll '清空字典项目,防止数据混淆
- Next M
- Set Dic = Nothing '释放项目
- MsgBox "处理完成", vbOKOnly, "" '显示提示信息
- End Sub
附示例文件。 技能比武.rar |