返回列表 上一主題 發帖

[發問] 連續N筆資料判別

本帖最後由 luhpro 於 2021-1-6 23:57 編輯
If Brr(R, 1)  T Then T = Brr(R, 1): S = T
If Brr(R, 1) <> T Then T = Brr(R, 1): S = T
這一行我讀不懂
測試如果把它移除,就不會出現"連續小" 的標記跟訊息
Brr(R, 1) <> T ( T是從何而來?
y54161212 發表於 2021-1-6 14:43

這種比較簡單的概念我就代勞一下:
程式開頭就定義了 T% 表示它是個整數,
一開始沒特別去賦值時預設值是0,
也就是說第1次是跟0比較.

  Brr(R, 1) = IIf(Arr(R, 1) > CL, 1, -1) ' 比較後指定加減數
  S = S + Brr(R, 1) ' 大於時 + 1, 小於時 - 1, 加到 +8 或 -8 時就是連續8次 大於 或 小於 了
  If S = N Then 連續大 = True: S = S - 1: Brr(R, 2) = 1  ' 這裡是 "大於" 區 S=8後 S=S-1 就變回 7, 下次再加1就又=8 可再次觸發本行的條件
  If S = -N Then 連續小 = True: S = S + 1: Brr(R, 3) = 1 ' "小於" 區, 原理同上.
  If Brr(R, 1) <> T Then T = Brr(R, 1): S = T  ' 其實就是保存本次的值以備下一次比較是不是值不同了用.

這裡順便也提供一下我當時修改後的解法, (以3#做母版修改)
嘗試改成顯示 0 而不是 -1 作實現.
  1. Sub 判斷品質異常()
  2. Const N = 7   '設定連續次數
  3. Dim Rn&, R%, S%, T%, CL!
  4. Dim 連續大 As Boolean, 連續小 As Boolean
  5. Rn = Cells(Rows.Count, 1).End(xlUp).Row - 2
  6. If Rn < 1 Then Exit Sub
  7. CL = [C1]
  8. With [C3].Resize(Rn, 3)
  9.   Arr = .Offset(, -2).Resize(, 5).Value
  10.   .ClearContents
  11. End With
  12. For R = 1 To Rn
  13.   Arr(R, 3) = IIf(Arr(R, 1) > CL, 1, 0)
  14.   S = S + (Arr(R, 3) = 0) * 2 + 1
  15.   If S = N Then S = S - 1: 連續大 = True: Arr(R, 4) = 1
  16.   If S = -N Then S = S + 1: 連續小 = True: Arr(R, 5) = 1
  17.   If Arr(R, 3) <> T Then T = Arr(R, 3): S = T
  18. Next R
  19. [A3].Resize(Rn, 5) = Arr
  20. If 連續大 Then MsgBox "連續7點在中心線同側(大於)"
  21. If 連續小 Then MsgBox "連續7點在中心線同側(小於)"
  22. End Sub
複製代碼

TOP

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