返回列表 上一主題 發帖

求每月最大與最小NO之計算

求每月最大與最小NO之計算

問題:求每月最小與最大NO,漏掉NO與計數?

求每月最大與最小NO之計算.zip (55.78 KB)

希望支持!

謝謝GBKEE大大。
同一問題,3種解法,獲益良多,謝謝3位大大的幫忙。
希望支持!

TOP

回復 24# s7659109

#23程式碼, 補上了  '**檢查月份間的遺漏**
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

各種思路,可學習不同的寫法,謝謝GBKEE大大,但上面程式碼,AAA 00012 在2月RENO 00013開始之前  ,歸在1月漏號,漏掉碼未計入,少計1個了。
希望支持!

TOP

本帖最後由 GBKEE 於 2018-8-31 08:35 編輯

回復 22# s7659109

適用  求每月最大與最小NO之計算0822進階版.xlsm
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim AR(), Rng As Range, i As Integer, ii As Integer, iii As Integer, xYear As String, AB As Variant
  4.     '**工作表1上有一些函數執行程式時會重新計算,影響執行速度.**
  5.     Application.Calculation = xlManual   '設定代表計算模式為手動
  6.     With 工作表1.Range("A1").CurrentRegion
  7.     '**Range.CurrentRegion 屬性 傳回 Range 物件,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀的
  8.         .Sort key1:=.Cells(1), key2:=.Cells(1, 2), key3:=.Cells(1, 3), Header:=xlYes
  9.         '** 資料排序
  10.     End With
  11.     With 工作表2
  12.         .UsedRange.Clear '不必作整個工作表的清除
  13.         '**Worksheet.UsedRange 屬性 會傳回 Range 物件,此物件代表指定工作表上的已用範圍。唯讀的。
  14.         
  15.         '**篩選出 工作表1.Range("Al:A")上不重複的ITEM到.Range("A1")下***
  16.         工作表1.Range("A1").CurrentRegion.Columns(1).AdvancedFilter xlFilterCopy, "", .Range("A1"), True
  17.         '**Range.AdvancedFilter 方法 根據準則範圍,從清單中篩選或複製資料。如果初始選擇為單一儲存格,則會使用儲存格的目前區域。
  18.         
  19.         .Range("C1").Resize(, 2) = Array(工作表1.[A1], 工作表1.[D1])
  20.         .Range("C3").Resize(, 3) = Array(工作表1.[A1], 工作表1.[B1], 工作表1.[D1])
  21.         Set Rng = .[a2]
  22.         xYear = Mid(工作表1.Range("D2"), 1, Len(工作表1.Range("D2")) - 4)  '年份
  23.         ReDim AR(1 To Rng.End(xlDown).Row, 1 To 49)  '**ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
  24.         Do
  25.             AR(Rng.Row, 1) = Rng  '導入ITEM  **.Range("A1")下不重複的ITEM**
  26.             For i = 1 To 12
  27.                 '***篩選準則****
  28.                 .Range("C2") = Rng  'ITEM
  29.                 .Range("D2") = xYear & Format(i, "00") & "*"  '年份&月份
  30.                 '** 進階篩選**
  31.                 工作表1.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("C1").Resize(2, 2), CopyToRange:=.Range("C3").Resize(, 3), Unique:=True
  32.              If .Range("d4") <> "" Then '篩選出資料
  33.                 AR(Rng.Row, ((i - 1) * 4) + 2) = .Range("d4")       '最小
  34.                 If .Range("d4").End(xlDown).Row = Rows.Count Then   '資料只有一筆
  35.                     AR(Rng.Row, ((i - 1) * 4) + 3) = .Range("d4")   '最大
  36.                     AR(Rng.Row, ((i - 1) * 4) + 5) = 1               '計數
  37.                 Else
  38.                     For iii = .Range("d4") + 1 To .Range("d4").End(xlDown) - 1  '第二最小值 TO  第二最大值的迴圈
  39.                         AB = Application.Match(Format(iii, "00000"), .Range(.Range("d4"), .Range("d4").End(xlDown)), 0)
  40.                         If IsError(AB) Then AR(Rng.Row, ((i - 1) * 4) + 4) = IIf(AR(Rng.Row, ((i - 1) * 4) + 4) <> "", AR(Rng.Row, ((i - 1) * 4) + 4) & ",", "'") & Format(iii, "00000")
  41.                         'AB是錯誤值->  iii為 "01中間漏掉號碼"
  42.                     Next
  43.                     AR(Rng.Row, ((i - 1) * 4) + 3) = .Range("d4").End(xlDown)           '最大
  44.                     AR(Rng.Row, ((i - 1) * 4) + 5) = .Range("d4").End(xlDown).Row - 3   '計數
  45.                  End If
  46.              End If
  47.             Next
  48.             '**檢查月份間的遺漏**
  49.             For ii = 3 To UBound(AR, 2) - 4 Step 4
  50.                 AB = AR(Rng.Row, ii)
  51.                 Do While AB + 1 < Val(AR(Rng.Row, ii + 3))
  52.                     AR(Rng.Row, ii + 1) = IIf(AR(Rng.Row, ii + 1) <> "", AR(Rng.Row, ii + 1) & ",", "'") & Format(AB + 1, "00000")
  53.                     AB = AB + 1
  54.                 Loop
  55.             Next
  56.             Set Rng = Rng.Offset(1)  '下一個 .Range("A1")下不重複的ITEM
  57.         Loop Until Rng = ""   'Until->結束迴圈的條件
  58.     .UsedRange.Clear
  59.     With .Range("A1")
  60.         .Value = "月份"
  61.         AR(1, 1) = "項目"
  62.         For i = 1 To 12
  63.              With .Cells(1, (i - 1) * 4 + 2).Resize(, 4)
  64.                  .Merge
  65.                  .NumberFormatLocal = "00"
  66.                  .HorizontalAlignment = xlCenter
  67.                  .Value = i
  68.                 End With
  69.             For ii = 0 To 3
  70.                 AR(1, ii + ((i - 1) * 4) + 2) = Array("最小", "最大", "01中間漏掉號碼", "計數")(ii)
  71.                 If ii <= 1 Then
  72.                     .Cells(3, ii + ((i - 1) * 4) + 2).Resize(Rng.Row - 2).NumberFormatLocal = "00000"
  73.                 End If
  74.             Next
  75.         Next
  76.         .Offset(1).Resize(UBound(AR), UBound(AR, 2)) = AR
  77.         End With
  78.     End With
  79.     Application.Calculation = xlCalculationAutomatic   '計算模式為自動
  80. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

謝謝版主,阿佐大大的幫忙.
希望支持!

TOP

不管了, 做個檢測版+月報表+日報表:
XX20180822-1.rar (139.13 KB)

就做到這裡, 花太多時間了~~

TOP

本帖最後由 s7659109 於 2018-8-24 21:55 編輯

AAA        00025                1030217  因留用造成的
另更正資料檔,以下fix 00107
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712

0824.zip (53 KB)

希望支持!

TOP

回復 16# s7659109


不考慮準提大大所說的問題,
檔案如附件。

求每月最大與最小NO之計算0822進階版.zip (179.93 KB)

TOP

回復 16# s7659109

AAA        00102        1030702
AAA        00102        1030702
AAA        00103        1030703
AAA        00103        1030703

AAA        00104        1030705
AAA        00104        1030705
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712
AAA        00103        1030712

AAA        00105        1030712
AAA        00105        1030712

00103 又是怎回事???

TOP

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