=========================程式碼==================
Dim side%, QQ%, QQ1%, CL As Variant
k = Cells(Rows.Count, 1).End(xlUp).Row
CL = Range("C1").Value
Range("C3:E" & k).ClearContents
If CL <> "" And k - 1 > 0 Then
For i = 3 To k
If Range("A" & i) > CL Then
Range("C" & i) = 1
Else
Range("C" & i) = 0
End If
Next
End If
'==判斷是否連續7筆大於或小於CL======== For i = 3 To k
If (Range("C" & i) = 1 And Range("C" & i + 1) = 1 And Range("C" & i + 2) = 1 And Range("C" & i + 3) = 1 And Range("C" & i + 4) = 1 And Range("C" & i + 5) = 1 And Range("C" & i + 6) = 1) Then
Range("D" & i + 6) = 1
ElseIf (Range("C" & i) = 0 And Range("C" & i + 1) = 0 And Range("C" & i + 2) = 0 And Range("C" & i + 3) = 0 And Range("C" & i + 4) = 0 And Range("C" & i + 5) = 0 And Range("C" & i + 6) = 0) Then
Range("E" & i + 6) = 1
End If
Next
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 [A3].Resize(Rn, 5)
Arr = .Value
.ClearContents
End With
For R = 1 To Rn
Arr(R, 3) = IIf(Arr(R, 1) > CL, 1, -1)
S = S + Arr(R, 3)
If S = N Then 連續大 = True: S = S - 1: Arr(R, 4) = 1
If S = -N Then 連續小 = True: S = S + 1: 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作者: y54161212 時間: 2021-1-1 08:50
Sub 判斷品質異常_A()
Dim Arr, Brr, R&, C%, N%(1), X%(1), i&, CL!
R = Cells(Rows.Count, 1).End(xlUp).Row - 2
If R < 1 Then Exit Sub
CL = [C1]
Arr = [A3].Resize(R)
ReDim Brr(1 To R, 1 To 4)
For i = 1 To R
C = -(Arr(i, 1) > CL): Brr(i, 1) = C
N(C) = N(C) + 1: N(1 - C) = 0
If N(C) >= 7 Then Brr(i, 3 - C) = 1: X(C) = 1
Next i
[C3].Resize(R, 4) = Brr
If X(1) Then MsgBox "連續7點在中心線同側(大於)"
If X(0) Then MsgBox "連續7點在中心線同側(小於)"
End Sub
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 [A3].Resize(Rn, 5)
Arr = .Value
.ClearContents
End With
For R = 1 To Rn
Arr(R, 3) = IIf(Arr(R, 1) > CL, 1, -1)
S = S + Arr(R, 3)
If S = N Then 連續大 = True: S = S - 1: Arr(R, 4) = 1
If S = -N Then 連續小 = True: S = S + 1: 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 "連續" & N & "點在中心線同側(大於)"
If 連續小 Then MsgBox "連續" & N & "點在中心線同側(小於)"
End Sub作者: 准提部林 時間: 2021-1-1 15:54
Sub 判斷品質異常()
Const N = 8 '設定連續次數
Dim Rn&, R%, S%, T%, CL!, Arr, Brr
Dim 連續大 As Boolean, 連續小 As Boolean
Rn = Cells(Rows.Count, 1).End(xlUp).Row - 2
If Rn < 1 Then Exit Sub
CL = [C1]
Arr = [A3].Resize(Rn)
[C3].Resize(Rn, 3).ClearContents
ReDim Brr(1 To Rn, 1 To 3)
For R = 1 To Rn
Brr(R, 1) = IIf(Arr(R, 1) > CL, 1, -1)
S = S + Brr(R, 1)
If S = N Then 連續大 = True: S = S - 1: Brr(R, 2) = 1
If S = -N Then 連續小 = True: S = S + 1: Brr(R, 3) = 1
If Brr(R, 1) <> T Then T = Brr(R, 1): S = T
Next R
[C3].Resize(Rn, 3) = Brr
If 連續大 Then MsgBox "連續" & N & "點在中心線同側(大於)"
If 連續小 Then MsgBox "連續" & N & "點在中心線同側(小於)"
End Sub作者: y54161212 時間: 2021-1-6 11:56
If Brr(R, 1) <> T Then T = Brr(R, 1): S = T
這一行我讀不懂
測試如果把它移除,就不會出現"連續小" 的標記跟訊息
Brr(R, 1) <> T ( T是從何而來?作者: luhpro 時間: 2021-1-6 23:32
本帖最後由 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
Brr(R, 1) = IIf(Arr(R, 1) > CL, 1, -1)
S = S + Brr(R, 1) : MsgBox S
'If S = N Then 連續大 = True: S = S - 1: Brr(R, 2) = 1
'If S = -N Then 連續小 = True: S = S + 1: Brr(R, 3) = 1 '
If Brr(R, 1) <> T Then T = Brr(R, 1) : MsgBox T: S = T :MsgBox S