- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
回復 1# adam2010
試試看- Option Explicit
- Sub Ex()
- Dim D As Object, Sh As Worksheet, Rng As Range, i As Integer, AR As Variant
- Set D = CreateObject("SCRIPTING.DICTIONARY") '字典物件
- For Each Sh In Sheets '工作表物件集合
- If Not Sh.Name Like "彙總*" Then '比對工作表名稱
- Set Rng = Sh.[U1] '機台固定從[U1]開始
- Do While Rng <> ""
- For i = 2 To Sh.[A1].End(xlDown).Row '[A1]往下到最後連續的資料列號
- If Rng.Cells(i, 1).Value <> "" Then
- If Not D.EXISTS(Rng.Value) Then 'EXISTS: 傳回字典物件(key[關鍵字])存在=True
- D(Rng.Value) = Array(Rng.Cells(i, 1).Value) '字典物件(key).Item=>內容,置入陣列
- Else
- AR = D(Rng.Value) '陣列取得字典物件(key).Item
- ReDim Preserve AR(UBound(AR) + 1) '陣列擴充增加一元素)
- AR(UBound(AR)) = Rng.Cells(i, 1).Value '陣列(UBound(AR))元素的上限值
- D(Rng.Value) = AR '字典物件(key[關鍵字])=陣列
- End If
-
- End If
- Next
- Set Rng = Rng.Offset(, 1) '向右移動
- Loop
- End If
- Next
- With Sheets("彙總")
- .UsedRange.Clear
- i = 1
- For Each AR In D.KEYS '字典物件(key)
- .Cells(1, i) = AR
- .Cells(2, i).Resize(UBound(D(AR)) + 1) = Application.WorksheetFunction.Transpose(D(AR)) '一維陣列轉成二維陣列
- i = i + 1
- Next
- .UsedRange.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:= _
- xlYes, OrderCustom:=1, Orientation:=xlLeftToRight '排序循列(橫向)
- End With
- End Sub
複製代碼 |
|