示例
Sub aa()
Set a = ActiveSheet
Set zd = CreateObject("Scripting.Dictionary")
x = a.UsedRange.Rows.Count
For i = 1 To x
zd(a.Cells(i, 1).Value) = a.Cells(i, 2)
Next
t1 = zd.keys
t2 = zd.items
Range("c1").Resize(zd.Count, 1) = Application.WorksheetFunction.Transpose(t1)
Range("d1").Resize(zd.Count, 1) = Application.WorksheetFunction.Transpose(t2)
End Sub
1. Sub aa(): 这是一个子过程(Subroutine)的开始,名为 "aa"。
2. Set a = ActiveSheet: 这一行代码将当前激活的工作表(ActiveSheet)赋给变量 a,以便稍后引用这个工作表的数据。
3. Set zd = CreateObject("Scripting.Dictionary"): 这一行代码创建了一个空的字典对象,命名为 zd,以便存储数据的重新组织。
4. x = a.UsedRange.Rows.Count: 这一行代码获取了工作表 a 中使用的行数,即数据的总行数,将其存储在变量 x 中。
5. For i = 1 To x: 这一行代码开始一个 For 循环,将从 1 循环到 x,即数据总行数。
6. zd(a.Cells(i, 1).Value) = a.Cells(i, 2): 在循环中,这一行代码将工作表 a 中第 i 行、第 1 列的单元格的值作为键,将同一行、第 2 列的单元格的值作为值存储在字典 zd 中。这将创建一个键-值对,其中键是第 1 列的值,值是第 2 列的值。
7. Next: 这是 For 循环的结束。
8. t1 = zd.keys: 这一行代码将字典 zd 中的所有键提取出来,并存储在名为 t1 的数组中。
9. t2 = zd.items: 这一行代码将字典 zd 中的所有值提取出来,并存储在名为 t2 的数组中。
10. Range("c1").Resize(zd.Count, 1) = Application.WorksheetFunction.Transpose(t1): 这一行代码将数组 t1 转置后,将其内容输出到工作表 a 中的 C 列,从 C1 单元格开始,行数等于字典 zd 中的键的数量。
11. Range("d1").Resize(zd.Count, 1) = Application.WorksheetFunction.Transpose(t2): 类似地,这一行代码将数组 t2 转置后,将其内容输出到工作表 a 中的 D 列,从 D1 单元格开始,行数等于字典 zd 中的值的数量。
将字典的键和值分别输出到工作表的 C 列和 D 列。整个过程重新组织了数据,将重复的键合并为一个,以便更好地呈现和对数据去重。