返回列表 上一主題 發帖

[發問] 找出每個群組中,日期最靠近今天的列

回復 1# gameshop
  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. Set d1 = CreateObject("Scripting.Dictionary")
  4. d1("群組") = Array("群組", "日期", "數值")
  5. With Sheets(1)
  6. For Each a In .Range(.[A2], .[A2].End(xlDown))
  7.    s = Date - a.Offset(, 1)
  8.    d(a.Value) = IIf(IsEmpty(d(a.Value)), s, d(a.Value))
  9.    If s > 0 And d(a.Value) > s Then
  10.          d(a.Value) = s
  11.          d1(a.Value) = Array(a.Value, a.Offset(, 1).Value, a.Offset(, 2).Value)
  12.    End If
  13. Next
  14. End With
  15. Sheets(2).[E1].Resize(d1.Count, 3) = Application.Transpose(Application.Transpose(d1.items))
  16. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 5# gameshop
  1. Sub ex()
  2. Set d = CreateObject("Scripting.Dictionary") '創建字典物件紀錄群組日期差
  3. Set d1 = CreateObject("Scripting.Dictionary") '創建字典物件紀錄群組最小日期差

  4. With Sheets(1) '資料工作表
  5. ar = .Range("A1").CurrentRegion '資料所有範圍記錄到陣列
  6. d1(ar(1, 1)) = Application.Index(ar, 1) '建立標題列
  7.   For i = 2 To UBound(ar, 1) '從第2列開始迴圈
  8.   s = Date - ar(i, 2) '日期差
  9.   If s >= 0 Then '日期差為正值
  10.      If IsEmpty(d(ar(i, 1))) Then d(ar(i, 1)) = s '假如群組還沒資料,就將日期差加入群組
  11.      If s <= d(ar(i, 1)) Then d(ar(i, 1)) = s: d1(ar(i, 1)) = Application.Index(ar, i) '比較日期差後記錄該列資料到字典對應群組內
  12.   End If
  13.   Next
  14. End With
  15. Sheets(2).Range("A1").CurrentRegion.ClearContents '清除舊有資料
  16. Sheets(2).[A1].Resize(d1.Count, UBound(ar, 2)) = Application.Transpose(Application.Transpose(d1.items)) '寫入資料
  17. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題