在拆分范围excel VBA中查找唯一值
我在excel中创建了一个动态搜索,最终得到了一个分割范围(例如,[A4:D4,A6:D6,A8:D8])。我想提取此拆分范围中每列的唯一值,然后将它们复制到新工作表中。我见过许多寻找唯一值的解决方案,但没有一个能够处理像这样的分割范围。 谢谢 到目前为止我已经完成的代码(给我一个错误):在拆分范围excel VBA中查找唯一值,excel,vba,Excel,Vba,我在excel中创建了一个动态搜索,最终得到了一个分割范围(例如,[A4:D4,A6:D6,A8:D8])。我想提取此拆分范围中每列的唯一值,然后将它们复制到新工作表中。我见过许多寻找唯一值的解决方案,但没有一个能够处理像这样的分割范围。 谢谢 到目前为止我已经完成的代码(给我一个错误): 尺寸i为长,j为变型 j=dbws.Application.Transpose(“$A$3:$D$3,$A$6:$D$6,$A$9:$D$9”)”您可以使用字典字典: Option Explicit Publ
尺寸i为长,j为变型
j=dbws.Application.Transpose(“$A$3:$D$3,$A$6:$D$6,$A$9:$D$9”)”您可以使用字典字典:
Option Explicit
Public Sub CopyUniqueValues()
Dim unionRng As Range, rng As Range, rng2 As Range, dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Set unionRng = Union([A4:D4], [A6:D6], [A8:D8])
Application.ScreenUpdating = False
For Each rng In unionRng.Areas
For Each rng2 In rng.Cells
If Not dict.exists(rng2.Column) Then
dict.Add (rng2.Column), CreateObject("Scripting.Dictionary")
dict(rng2.Column).Add rng2.Value, 1
Else
If Not dict(rng2.Column).exists(rng2.Value) Then
dict(rng2.Column).Add rng2.Value, 1
End If
End If
Next rng2
Next rng
Dim dictOutput As Object, key1 As Variant, key2 As Variant
Set dictOutput = CreateObject("Scripting.Dictionary")
For Each key1 In dict.keys
dictOutput.Add key1, dict(key1).keys
Next
With Worksheets("Sheet2")
For Each key1 In dictOutput.keys
.Columns(key1).Range("A1").Resize(UBound(dictOutput(key1)) + 1, 1) = Application.WorksheetFunction.Transpose(dictOutput(key1))
Next key1
End With
Application.ScreenUpdating = True
End Sub
数据:
| 1 | 1 | 10 | 11 |
| 1 | 2 | 10 | 12 |
| 1 | 3 | 10 | 13 |
| 1 | 4 | 10 | 14 |
| 1 | 5 | 10 | 15 |
数据集:
| 1 | 1 | 10 | 11 |
| 1 | 2 | 10 | 12 |
| 1 | 3 | 10 | 13 |
| 1 | 4 | 10 | 14 |
| 1 | 5 | 10 | 15 |
@y-pel:我投了否决票/投票关闭,因为您没有包含a,它看起来像,而且看起来像是完成了。欢迎来到堆栈溢出:请阅读,然后编辑您的问题,以包含代码、预期行为以及错误。。。然后我们可以试着help@y-谢谢你编辑你的问题,包括代码。请告诉我们哪行代码给出了错误,错误是什么?您是否遇到arun时间错误、代码行为或结果方面的问题?太棒了!这很好用。我调用了包含统一范围的函数,因此我将“Set unionRng=Union([A4:D4],[A6:D6],[A8:D8])”更改为“Set unionRng=myRange”。非常感谢你的帮助!很高兴它有帮助:-)