- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2024-11-14
|
本帖最後由 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 作實現.- Sub 判斷品質異常()
- Const N = 7 '設定連續次數
- Dim Rn&, R%, S%, T%, CL!
- Dim 連續大 As Boolean, 連續小 As Boolean
- Rn = Cells(Rows.Count, 1).End(xlUp).Row - 2
- If Rn < 1 Then Exit Sub
- CL = [C1]
- With [C3].Resize(Rn, 3)
- Arr = .Offset(, -2).Resize(, 5).Value
- .ClearContents
- End With
- For R = 1 To Rn
- Arr(R, 3) = IIf(Arr(R, 1) > CL, 1, 0)
- S = S + (Arr(R, 3) = 0) * 2 + 1
- If S = N Then S = S - 1: 連續大 = True: Arr(R, 4) = 1
- If S = -N Then S = S + 1: 連續小 = True: Arr(R, 5) = 1
- If Arr(R, 3) <> T Then T = Arr(R, 3): S = T
- Next R
- [A3].Resize(Rn, 5) = Arr
- If 連續大 Then MsgBox "連續7點在中心線同側(大於)"
- If 連續小 Then MsgBox "連續7點在中心線同側(小於)"
- End Sub
複製代碼 |
|