- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
回復 11# greetingsfromtw
VBA 有許多寫法可達到相同的效果- Option Explicit
- Sub Ex()
- Dim D As Object, AR(), i As Integer
- Set D = CreateObject("scripting.dictionary")
- AR = Range("a1:d" & Cells(Rows.Count, 1).End(xlUp).Row)
- For i = 1 To UBound(AR)
- If Not D.exists(AR(i, 2) & AR(i, 3) & AR(i, 4)) Then '** exists 傳回字典物件是否有這key值 有 True :無 False
- D(AR(i, 2) & AR(i, 3) & AR(i, 4)) = Application.Index(AR, i) '** 工作表函數 Index
- End If
- Next
- With Range("H1")
- .CurrentRegion.Clear
- .Resize(D.Count, 4) = Application.Transpose(Application.Transpose(D.items))
- End With
- End Sub
- Sub Ex1()
- Dim D As Object, i As Integer
- Set D = CreateObject("scripting.dictionary")
- With Range("a1:d" & Cells(Rows.Count, 1).End(xlUp).Row)
- For i = 1 To .Rows.Count
- If Not D.exists(.Cells(i, 2) & Cells(i, 3) & .Cells(i, 4)) Then '** exists 傳回字典物件是否有這key值 有 True :無 False
- D(.Cells(i, 2) & Cells(i, 3) & .Cells(i, 4)) = .Rows(i)
- End If
- Next
- End With
- With Range("H1")
- .CurrentRegion.Clear
- .Resize(D.Count, 4) = Application.Transpose(Application.Transpose(D.items))
- End With
- End Sub
- Sub Ex2()
- Dim AR, ArSt(), i As Integer, St As String
- With Range("a1:d" & Cells(Rows.Count, 1).End(xlUp).Row)
- For i = 1 To .Rows.Count
- St = .Cells(i, 2) & Cells(i, 3) & .Cells(i, 4)
- If IsEmpty(AR) Then
- ReDim AR(1 To 1): AR(1) = .Rows(i)
- ReDim ArSt(1 To 1): ArSt(1) = St
- Else
- If UBound(Filter(ArSt, St)) = -1 Then
- 'Filter 函數傳回一個從零開始的陣列,該陣列包含基於指定篩選準則的一個字串陣列的子集。
- '語法 Filter(sourcesrray, match[, include[, compare]])
- '如果在 sourcearray 中沒有發現與 match 相符合的值,Filter 傳回一個無陣列。如果 sourcearray 是 Null 或不是一個一維陣列,則產生錯誤。
- 'Filter 函數所傳回的陣列,其組成項目數剛好是所找到的符合項目數。
- ReDim Preserve ArSt(1 To UBound(ArSt) + 1)
- ArSt(UBound(ArSt)) = St
- ReDim Preserve AR(1 To UBound(AR) + 1)
- AR(UBound(AR)) = .Rows(i)
- End If
- End If
- Next
- End With
- With Range("H1")
- .CurrentRegion.Clear
- .Resize(UBound(AR), 4) = Application.Transpose(Application.Transpose(AR))
- End With
- End Sub
複製代碼 |
|