返回列表 上一主題 發帖

[發問] 如何利用VBA按鍵,來找出違反規則的號碼。

回復 20# yen956


To yen956大   
嚴重異常處理完,換 "嚴重異常2" 有問題了...XD,請參考下列檔案,3Q!
20151223_如何利用VBA按鍵,來找出違反規則號碼.rar (22.38 KB)

TOP

回復 21# RCRG
感謝謝再三測試,造成不便, 還請包涵!!
這個版本, 輸出位置故意與准大錯開, 方便你比對.
試試看:
  1. '插入序號, 以便恢復原狀
  2. Sub 插入序號(LstR As Integer)
  3.     Dim I As Integer
  4.     For I = 2 To LstR
  5.         Cells(I, 10) = I
  6.     Next
  7. End Sub
  8. Sub test()
  9.     Dim LstR As Integer, LstR2 As Integer, sR As Integer, I As Integer, cnt As Integer
  10.     Dim maxDate As Date
  11.     Sheets("嚴重錯誤").Select
  12.     [H2:J65536] = ""
  13.     [H:J].Interior.ColorIndex = xlNone    '清除底色
  14.     LstR2 = Cells(Rows.Count, 3).End(xlUp).Row
  15.     插入序號 LstR:=LstR2      '插入序號, 以便恢復原狀
  16.     [A1].Resize(LstR2, 10).Sort _
  17.             Key1:=[C1], Order1:=xlAscending, _
  18.             Key2:=[G1], Order1:=xlAscending, _
  19.             Header:=xlYes
  20.     LstR = Cells(Rows.Count, 3).End(xlUp).Row
  21.     sR = 2
  22.     Do
  23.         cnt = sR
  24.         Do
  25.             '規則2.號碼相同, 且製造日有排序, 則到期日也必須排序
  26.             If Cells(sR, 3) = Cells(sR + 1, 3) And Cells(sR, 5) > Cells(sR + 1, 5) Then
  27.                 Cells(sR, 9) = "異常2a"
  28.                 Cells(sR, 9).Interior.ColorIndex = 38
  29.             End If
  30.            '規則1.號碼相同, 且製造日相同, 但到期日不同
  31.             If Cells(sR, 3) = Cells(sR + 1, 3) And Int(Cells(sR, 7)) = Int(Cells(sR + 1, 7)) And Cells(sR, 5) <> Cells(sR + 1, 5) Then
  32.                 Cells(sR, 8) = "異常1"
  33.                 Cells(sR, 8).Interior.ColorIndex = 8
  34.                 Cells(sR + 1, 8) = "異常1"
  35.                 Cells(sR + 1, 8).Interior.ColorIndex = 8
  36.             End If
  37.             sR = sR + 1
  38.         Loop Until Cells(sR, 3) <> Cells(sR + 1, 3) Or sR >= LstR    '直到 號碼不同 或 資料結尾
  39.         For I = cnt To sR
  40.             maxDate = Application.Max(Cells(I, 5).Resize(sR - 1, 1))
  41.             '規則2.號碼相同, 且製造日有排序, 則到期日也必須排序
  42.             If Cells(I, 3) = Cells(I + 1, 3) And Cells(I, 5) > maxDate Then
  43.                 Cells(I, 9) = "異常2b"
  44.                 Cells(I, 9).Interior.ColorIndex = 38
  45.             End If
  46.         Next
  47.     Loop Until sR >= LstR  '直到資料結尾
  48.     '恢復原狀
  49.     [A1].Resize(LstR2, 10).Sort _
  50.             Key1:=[J1], Order1:=xlAscending, _
  51.             Header:=xlYes
  52. End Sub
複製代碼

TOP

回復 22# yen956


    感謝yen956大再度幫忙修改,目前測試手邊的資料是完全沒問題的;
我不太懂VBA邏輯,所以不知道為什麼照著異常1和異常2的原則走,卻還是有些資料還會有問題(如先前的嚴重錯誤1和2),
所以不知道有沒有可能下次的資料又會有不同的新問題,是有點擔心啦!不過現況有幫我解決到了就好,還是很感謝yen956大,當然還有准大,兩種版本我都喜歡,所以這是我首次一次採用兩版本;
最後,再次謝謝兩位多次修改與幫忙!3Q

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題