【发布时间】:2015-05-07 10:43:11
【问题描述】:
我创建了一个宏来运行连续的 FOR 循环以从多个列中选择唯一值并按层次顺序粘贴它们的名称。
例如,
Area Region Land Number Name Department Class Subclass
North America USA FL 10101372 Store 1 CATCH-ALL TAXABLE CATCH ALL
North America USA FL 10101372 Store 1 COLLECTIBLES 2D ART SKETCH
North America USA FL 10101372 Store 1 COLLECTIBLES 2D DLX/PETITE
North America USA FL 10101372 Store 1 COLLECTIBLES 2D FINE ART
North America USA FL 10101372 Store 1 COLLECTIBLES 2D FRAMING
会产生:
USA
FL
Store 1
CATCH-ALL
TAXABLE
CATCH ALL
COLLECTIBLES
2D
ART SKETCH
DLX/PETITE
FINE ART
FRAMING
子类列在正确的类下,正确的部门下的类等。
它适用于我的小型测试数据集,但我的最终输入将至少有 5000 行,并且宏运行非常缓慢。行数和部门/类/子类的组合不会随着时间的推移保持不变,所以我希望它能够灵活地处理每周刷新的数据。
我可以对循环或代码的其他部分进行任何改进以使其运行得更快吗?
Option Explicit
Sub GetUniques()
Application.DisplayStatusBar = False
Dim d As Object, c As Variant, c2 As Variant, c3 As Variant, c4 As Variant, c5 As Variant, c6 As Variant, c7 As Variant, i As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long, i6 As Long, i7 As Long, lr As Long, ws As Worksheet
Set d = CreateObject("Scripting.Dictionary")
Set ws = Sheets("Raw Wonderground")
lr = Cells(Rows.Count, 1).End(xlUp).Row
c = ws.Range("B3:B" & lr)
For i = 1 To UBound(c, 1)
d(c(i, 1)) = 1
c2 = ws.Range("C3:C" & lr)
For i2 = 1 To UBound(c2, 1)
d(c2(i, 1)) = 1
c3 = ws.Range("E3:E" & lr)
For i3 = 1 To UBound(c3, 1)
d(c3(i, 1)) = 1
c4 = ws.Range("F3:F" & lr)
For i4 = 1 To UBound(c4, 1)
d(c4(i, 1)) = 1
c5 = ws.Range("G3:G" & lr)
For i5 = 1 To UBound(c5, 1)
d(c5(i, 1)) = 1
c6 = ws.Range("H3:H" & lr)
For i6 = 1 To UBound(c6, 1)
d(c6(i, 1)) = 1
Next i6
Next i5
Next i4
Next i3
Next i2
Next i
ws.Range("M2").Resize(d.Count) = Application.Transpose(d.keys)
End Sub
【问题讨论】:
标签: excel vba for-loop duplicates hierarchical-data