|
本帖最后由 ly258 于 2013-11-19 15:49 编辑
请多多点评,谢谢!- Option Explicit
- Sub 求不重复值1()
- Dim x, arr
- Dim d As New Dictionary
- d.CompareMode = 0 '设置比较模式
- For Each x In Range("a1:a12").Value '遍历读取数据
- If Not d.Exists(x) Then '判断是否重复
- d.Add x, ""
- End If
- Next x
- Range("c2").Resize(d.Count, 1) = Application.Transpose(d.Keys) '一次性写入对应区域
- End Sub
- Sub 求不重复值2()
- Dim x, arr
- Dim d As New Dictionary
- d.CompareMode = 1 '设置比较模式
- For Each x In Range("a1:a12").Value '遍历读取数据
- If Not d.Exists(x) Then '判断是否重复
- d.Add x, ""
- End If
- Next x
- Range("d2").Resize(d.Count, 1) = Application.Transpose(d.Keys) '一次性写入对应区域
- End Sub
- Sub 双向求值()
- Dim x, arr
- Dim d As New Dictionary
- Dim dd As New Dictionary
- d.CompareMode = 0 '设置比较模式
- arr = Range("a2:b6 ")
- For x = 1 To UBound(arr) '循环读取数据,放到字典d中
- d.Add arr(x, 1), arr(x, 2)
- dd.Add arr(x, 2), arr(x, 1)
- Next x
- x = Range("d3").Value
- If d.Exists(x) Then '判断单元格中的数据是否在字典中存在
- MsgBox d.Item(x)
- Else
- MsgBox dd.Item(x)
- End If
- End Sub
- Sub 多条件查找()
- Dim d As New Dictionary
- Dim arr, h, i, arr1, arr2
- arr = Range("a2:d5")
- arr1 = Range("a12:d13")
- For i = 1 To UBound(arr)
- d.Add arr(i, 1) & arr(i, 2), arr(i, 3) & "*" & arr(i, 4) '以组合的方式放入字典
- Next i
- For i = 1 To UBound(arr1)
- h = arr1(i, 1) & arr1(i, 2) '把设置的条件进行组合
- If d.Exists(h) Then '在字典中查找组合条件
- arr2 = Split(d.Item(h), "*") '找到组合条件后以*号进行分割,生成数组
- Else
- arr2 = Array("", "")
- End If
- arr1(i, 3) = arr2(0) '生成的数组写入对应数组
- arr1(i, 4) = arr2(1)
- Next i
- Range("a12:d13") = arr1 '一次性写入到对应区域
- End Sub
- Sub 单条件求和()
- Dim d As New Dictionary
- Dim arr, h
- arr = Range("b2:c5")
- For h = 1 To UBound(arr)
- If d.Exists(arr(h, 1)) Then '判断新读入的数据是否在字典中存在
- d(arr(h, 1)) = d(arr(h, 1)) + arr(h, 2) '累计求和
- Else
- d.Add arr(h, 1), arr(h, 2) '新增字典中没有KEY
- End If
- Next h
- Range("e2").Resize(d.Count, 1) = Application.Transpose(d.Keys)
- Range("f2").Resize(d.Count, 1) = Application.Transpose(d.Items)
- End Sub
- Sub 多列求和()
- Dim d As New Dictionary
- Dim arr, h, arr1(1 To 10, 1 To 3), t, s
- arr = Range("a2:d6")
- s = 1
- For h = 1 To UBound(arr)
- If d.Exists(arr(h, 1)) Then
- t = d.Item(arr(h, 1))
- arr1(t, 1) = arr1(t, 1) + arr(h, 2) '计算对应数值
- arr1(t, 3) = arr1(t, 3) + arr(h, 4)
- If arr(h, 3) > arr1(t, 2) Then '单价统计最大值
- arr1(t, 2) = arr(h, 3)
- End If
- Else
- d.Add arr(h, 1), s '数组中新增未找到的产品,并用item作为标记
- s = s + 1 '标记记数据器加1
- h = h - 1 '改变循环变量,让新增的产品参加统计
- End If
- Next h
- Range("a13").Resize(d.Count, 1) = Application.Transpose(d.Keys) '写入到对应区域
- Range("b13").Resize(UBound(arr1, 1), UBound(arr1, 2)) = arr1 '写入到对应区域
- End Sub
- Sub 多条件求和()
- Dim d As New Dictionary
- Dim arr, h, s, arr1, arr2, arr3
- arr = Range("a2:c6")
- For h = 1 To UBound(arr) '以“产品*规格”组合的形式建立字典,并在Item中求和
- s = arr(h, 1) & "*" & arr(h, 2)
- If d.Exists(s) Then
- d.Item(s) = d.Item(s) + arr(h, 3)
- Else
- d.Add s, arr(h, 3)
- End If
- Next h
- ReDim arr(1 To d.Count, 1 To 3)
- arr1 = d.Items '把字典中的KEY,ITEM存到数组
- arr2 = d.Keys
- For h = 1 To d.Count
- arr(h, 3) = arr1(h - 1)
- arr3 = Split(arr2(h - 1), "*") '用*号把字典中的KEY进行分割
- arr(h, 1) = arr3(0)
- arr(h, 2) = arr3(1)
- Next h
- Range("a11").Resize(UBound(arr, 1), UBound(arr, 2)) = arr '写入到对应区域
- End Sub
复制代码 |
评分
-
查看全部评分
|