- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
本帖最後由 luhpro 於 2014-9-20 11:05 編輯
回復 3# adam2010
使用儲存格公式的方式我想不出來,
在此提供一個 Excel VBA 程式完成的方式:- Sub nn()
- Dim iI%
- Dim lRow&
- Dim sItem$
- Dim bNFind As Boolean
- Dim dDate As Date
- Dim vA(), vD
-
- ReDim vA(0 To 2, 0)
- Set vD = CreateObject("Scripting.Dictionary")
-
- lRow = 2
- With Sheets("總表")
- Do While .Cells(lRow, 1) <> ""
- With .Cells(lRow, 1)
- sItem = .Text
- dDate = .Offset(, 2)
- If Not vD.exists(sItem) Then
- ReDim Preserve vA(0 To 2, UBound(vA, 2) + 1)
- vA(0, UBound(vA, 2)) = dDate
- vD(sItem) = UBound(vA, 2)
- Else
- bNFind = True
- For iI = 0 To 2
- If dDate = vA(iI, vD(sItem)) Then bNFind = False
- Next
- If bNFind Then
- If vA(1, vD(sItem)) = "" Then
- vA(1, vD(sItem)) = dDate
- vA(2, vD(sItem)) = #12/31/9999#
- Else
- If dDate > vA(1, vD(sItem)) Then
- If dDate < vA(2, vD(sItem)) Then vA(2, vD(sItem)) = dDate
- Else
- If dDate < vA(0, vD(sItem)) Then
- vA(0, vD(sItem)) = dDate
- vA(1, vD(sItem)) = vA(0, vD(sItem))
- vA(2, vD(sItem)) = vA(1, vD(sItem))
- Else
- vA(1, vD(sItem)) = dDate
- vA(2, vD(sItem)) = vA(1, vD(sItem))
- End If
- End If
- End If
- End If
- End If
- End With
- lRow = lRow + 1
- Loop
- End With
-
- lRow = 2
- With Sheets("追蹤")
- Do While .Cells(lRow, 1) <> ""
- With .Cells(lRow, 1)
- If vD.exists(.Text) Then
- For iI = 0 To 2
- .Offset(, iI + 1) = vA(iI, vD(.Text))
- Next
- End If
- End With
- lRow = lRow + 1
- Loop
- End With
- End Sub
複製代碼 |
|