- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
9#
發表於 2012-7-20 16:43
| 只看該作者
回復 8# lamihsuen
請將原本 Module3 內的程式碼全部更換成以下之程式碼- ' *********************************************************************
- ' Module3 (請將原本 Module3 內的程式碼全部更換成以下之程式碼)
- ' *********************************************************************
- Option Explicit
-
- Dim sPos(1 To 4)
- Dim xText As String
- Dim Chart_Source As Variant
- Dim StartKBarRow, EndKBarRow As Long
-
- Public Sub 再分析結果()
- Dim wr As Integer, an As Integer ' 設定COPY工作表數目計數器
- Dim xlRow As Long
-
- ' wr = 4 目前預設從 c 到 sn, 總共有 12 個工作表單
- For wr = 4 To Worksheets.Count
- ' 下次起始 列 起點
- Dim angin_sr As Integer
- Dim sr As Integer ' 定義第一次起始列數
- sr = 6
- an = 1
- ' 計算"NG"的家數
- Dim NGVALUE As Integer
- NGVALUE = 0
- ' 工作表從4 迴圈開始執行再分析結果到工作表的最後
- Do Until Worksheets(wr).Cells((sr - 3), 12).Value = 0
- ' outline 分析次數+1.並顯示在標題列(B4)儲存格
- an = an + 1
-
- ' angin_sr=再次分析起始列為:第一次起始列數+第一次家數+6格空格
- angin_sr = sr + (Worksheets(wr).Cells((sr - 3), 1).Value + 6)
-
- ' 判別 上次分析有"NG"的去除,"OK"的COPY到本次表格
- Dim again_oi, again_oj As Integer ' 上次表格列,行數計數器
- Dim again_ai, again_aj As Integer ' 本次表格列,行數計數器
-
- again_oi = sr
- again_ai = angin_sr
- ' 迴圈判別"ok"與"ng"從前次起始位置開始(sr)至前次表格最後(sr+前次表格"a"3的值
- For again_oi = again_oi To sr + Worksheets(wr).Cells((sr - 3), 1).Value
- ' 如果值為"ok"該列copy 到本次表格.如果值為"ng"則不處理
- If Worksheets(wr).Cells(again_oi, 5).Value = "OK" Then
- With Worksheets(wr)
- .Cells(again_ai, 1).Value = .Cells(again_oi, 1).Value
- .Cells(again_ai, 2).Value = .Cells(again_oi, 2).Value
- End With
- again_ai = again_ai + 1
- End If
- Next again_oi
-
- ' 將前次第三列標題列標題copy 至本次表格第三列標題列標題
- again_aj = 1
- For again_oj = 1 To 12
- Worksheets(wr).Cells(angin_sr - 4, again_aj).Value = Worksheets(wr).Cells(sr - 4, again_oj).Value
- again_aj = again_aj + 1
- Next again_oj
-
- ' 利用變數求出本次表格最後列數目的用於求出第三列公式的最後範圍
- xlRow = Worksheets(wr).Range("B" & angin_sr).End(xlDown).Row
- With Worksheets(wr)
- ' 計算本次"A3"儲存格 NO.OF.RESULT值(分析值家數)從本次起始列至(angin_sr)至本次最後列數的數量
- .Cells(angin_sr - 3, 1).Formula = "=COUNT(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次"B3"儲存格分析值中間值(MEDIAN)
- .Cells(angin_sr - 3, 2).Formula = "=MEDIAN(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次C3儲存格IRQ植
- .Cells(angin_sr - 3, 3).Formula = "=(QUARTILE(B" & angin_sr & ":B" & xlRow & ",3) -QUARTILE(B" & angin_sr & ":B" & xlRow & ",1))*0.7413"
-
- ' 本次"E3"儲存格ROBUS CV值
- .Cells(angin_sr - 3, 5).Formula = "= C3 / B3 *100"
- ' 本次"F3"儲存格分析值中最少值
- .Cells(angin_sr - 3, 6).Formula = "=MIN(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次"G3"儲存格分析值中最大值
- .Cells(angin_sr - 3, 7).Formula = "=MAX(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次"H3"儲存格RANGE值
- .Cells(angin_sr - 3, 8).Formula = "=G3-F3"
- ' 本次定義"I3"儲存格為E178值
- .Cells(angin_sr - 3, 9).Value = E178(.Cells(angin_sr - 3, 1).Value)
- ' 本次定義"j3"儲存格為分析值平均值
- .Cells(angin_sr - 3, 10).Formula = "=AVERAGE(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次定義"k3"儲存格為stdv
- .Cells(angin_sr - 3, 11).Formula = "=STDEV(B" & angin_sr & ":B" & xlRow & ")"
- ' 本次"NG"家數 值
- .Cells(angin_sr - 3, 12).Value = NGVALUE
- ' 本次標題列"執行第"字串直接從前次儲存格位置copy
- .Cells(angin_sr - 2, 1).Value = .Cells(sr - 2, 1).Value
- ' 本次標題列顯示第an次分析
- .Cells(angin_sr - 2, 2).Value = an
- ' 本次標題列"ouline"字串直接從前次儲存格位置copy
- .Cells(angin_sr - 2, 3).Value = .Cells(sr - 2, 3).Value
- ' 本次定義實驗室編號標題列直接從前次儲存格位置copy
- .Cells(angin_sr - 1, 1).Value = .Cells(sr - 1, 1).Value
- ' 本次定義實驗室分析值標題列直接從前次儲存格位置copy
- .Cells(angin_sr - 1, 2).Value = .Cells(sr - 1, 2).Value
- ' 本次定義z-score值標題列直接從前次儲存格位置copy
- .Cells(angin_sr - 1, 3).Value = .Cells(sr - 1, 3).Value
- ' 本次定義outline標題列直接從前次儲存格位置copy
- .Cells(angin_sr - 1, 4).Value = .Cells(sr - 1, 4).Value
- ' 定義判定結果值標題列直接從前次儲存格位置copy
- .Cells(angin_sr - 1, 5).Value = .Cells(sr - 1, 5).Value
- ' 本次"C"欄 Z-SCORE 值計算
- .Range("C" & angin_sr & " :C" & xlRow).Formula = "=(b" & angin_sr & "-$B$" & angin_sr - 3 & ") /$C$" & angin_sr - 3
- ' 本次 "D"欄OUTLINE值計算
- .Range("d" & angin_sr & " :d" & xlRow).Formula = "= (B" & angin_sr & " -$J$" & angin_sr - 3 & ")/$K$" & angin_sr - 3
-
- End With
-
- ' 本次"E' 欄判別OUTLINE, true="ok" FALSE="NG"
- ' "NG"家數起始值 ,目的"將有"ng"家數記錄在"L3"欄位用於是否繼續判別OUTLINE
-
- Worksheets(wr).Range("L" & angin_sr - 3).Value = 0
-
- ' 開始判別從本次起始列開始
- again_ai = angin_sr
-
- For again_ai = again_ai To ((angin_sr) + Worksheets(wr).Range("A" & angin_sr - 3).Value - 1)
- ' 比對D6是否< E178值(I3)欄
- If Worksheets(wr).Range("D" & again_ai).Value < Worksheets(wr).Range("I" & angin_sr - 3).Value Then
- ' 值=TRUE時E欄記錄""OK"
- Worksheets(wr).Range("E" & again_ai).Value = "OK"
- Else
- ' 值= FLACE時E欄記錄"NG"
- Worksheets(wr).Range("E" & again_ai).Value = "NG"
- ' 設"NG"FONT.COLOR為紅色
- Worksheets(wr).Range("E" & again_ai).Font.Color = vbRed
- ' "NG"家數+1
- Worksheets(wr).Range("L" & angin_sr - 3).Value = Worksheets(wr).Range("L" & angin_sr - 3).Value + 1
- End If
- Next again_ai
-
- ' 如果還有"NG"值繼續執行OUTLINE
- ' 將本次表格列數值設定給上次表格列數目的將本次表格列數作為下次表格計算基礎
- sr = angin_sr
- Loop
-
- ' ********此處為Worksheets(wr).Cells((sr - 3), 12).Value =0."NG" 家數=0 全部""可執行Z-SCORE
- ' 定義z_sr為z_score起始表格列
- Dim z_sr As Integer
- angin_sr = sr ' 將sr值回愎給angin_sr目的為把最後一次outline "sr=angin_sr"回愎回來
- sr = 6 ' 將sr回愎到第一次表格起始位置
-
- ' z_sr=執行z-score起始列為:最後一次起始列數+最後分析家數+6格空格
- z_sr = angin_sr + (Worksheets(wr).Cells((angin_sr - 3), 1).Value + 6)
-
- ' 設定元素z_score標題列標題(z_score的第三列)
- Worksheets(wr).Cells((z_sr - 2), 1).Value = "執行"
- Worksheets(wr).Cells((z_sr - 2), 2).Value = Worksheets(wr).Name
- Worksheets(wr).Cells((z_sr - 2), 3).Value = "z_score"
-
- ' 將第一次表格"實驗室編號"(第一行號)與"分析值"(第二行)copy至z_score表格因為要全部"實驗室編號"與"分析值"
-
- Dim z_oi, z_oj As Integer ' 第一次表格列,行數計數器
- Dim z_ai, z_aj As Integer ' z-score表格列,行數計數器
- z_oi = sr ' z_oi定義為第一次起始格表格開始計數
- z_ai = z_sr ' z_ai定義為z_score起始表格開始計數
-
- For z_oi = z_oi To sr + Worksheets(wr).Cells((sr - 3), 1).Value
- With Worksheets(wr)
- .Cells(z_ai, 1).Value = .Cells(z_oi, 1).Value
- .Cells(z_ai, 2).Value = .Cells(z_oi, 2).Value
- End With
- z_ai = z_ai + 1
- Next z_oi
複製代碼
|
|