- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
18#
發表於 2012-7-21 16:11
| 只看該作者
本帖最後由 c_c_lai 於 2012-7-21 17:50 編輯
回復 20# lamihsuen
以 "c" 工作表為例,共有四個區間,6-51,58-102,109-152,159-204,或
以 "ni" 工作表為例,共有三個區間,6-42,49-84,91-127,或
以 "mo" 工作表為例,共有四個區間,6-42,49-84,91-125,132-168。
在實務上妳是如何判定哪個工作表單之區間是屬哪一個區間?
(也就是12 個各自工作表單究竟應選擇哪一個區間作為圖表的 "選取資料"?)
我把妳的 Module3 稍稍整理了一下,請留意是那些變化了?- Option Explicit
-
- Dim sPos(1 To 4)
- Dim xText As String
- Dim Chart_Source As Variant
-
- Public Sub 再分析結果()
- Dim wr As Integer, an As Integer ' 設定COPY工作表數目計數器
- Dim xlRow As Long
- Dim angin_sr As Integer ' 下次起始 列 起點
- Dim sr As Integer ' 定義第一次起始列數
- Dim NGValue As Integer ' 計算 "NG" 的家數
- Dim again_oi, again_oj As Integer ' 上次表格列,行數計數器
- Dim again_ai, again_aj As Integer ' 本次表格列,行數計數器
- Dim chart_end As Integer
- Dim z_sr As Integer
- Dim z_oi, z_oj As Integer ' 第一次表格列,行數計數器
- Dim z_ai, z_aj As Integer ' z-score表格列,行數計數器
- Dim mue_sr, mue_oi As Integer
-
- ' wr = 4 目前預設從 c 到 sn, 總共有 12 個工作表單
- For wr = 4 To Worksheets.Count
- sr = 6
- an = 1
-
- NGValue = 0
-
- With Worksheets(wr)
- ' 工作表從 4 迴圈開始執行再分析結果到工作表的最後
- Do Until .Cells((sr - 3), 12).Value = 0
- ' outline 分析次數 + 1.並顯示在標題列 (B4) 儲存格
- an = an + 1
-
- ' angin_sr=再次分析起始列為:第一次起始列數+第一次家數+6格空格
- angin_sr = sr + (.Cells((sr - 3), 1).Value + 6)
-
- ' 判別 上次分析有"NG"的去除,"OK"的COPY到本次表格
- again_oi = sr
- again_ai = angin_sr
- ' 迴圈判別 "ok" 與 "ng" 從前次起始位置開始(sr)至前次表格最後(sr+前次表格"a"3)的值
- For again_oi = again_oi To (sr + .Cells((sr - 3), 1).Value - 1)
- ' 如果值為"ok"該列copy 到本次表格.如果值為"ng"則不處理
- If .Cells(again_oi, 5).Value = "OK" Then
- .Cells(again_ai, 1).Value = .Cells(again_oi, 1).Value
- .Cells(again_ai, 2).Value = .Cells(again_oi, 2).Value
- again_ai = again_ai + 1
- End If
- Next again_oi
-
- ' 將前次第三列標題列標題 copy 至本次表格第三列標題列標題
- again_aj = 1
- For again_oj = 1 To 12
- .Cells(angin_sr - 4, again_aj).Value = .Cells(sr - 4, again_oj).Value
- again_aj = again_aj + 1
- Next again_oj
-
- ' 利用變數求出本次表格最後列數目的用於求出第三列公式的最後範圍
- xlRow = .Range("B" & angin_sr).End(xlDown).Row
-
- chart_end = xlRow
- ' 計算本次 "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
-
- ' 本次 "E' 欄判別 OUTLINE, true="ok" FALSE="NG"
- ' "NG"家數起始值 ,目的"將有"ng"家數記錄在"L3"欄位用於是否繼續判別 OUTLINE
-
- .Range("L" & angin_sr - 3).Value = 0
-
- ' 開始判別從本次起始列開始
- ' again_ai = angin_sr
-
- ' For again_ai = again_ai To ((angin_sr) + .Range("A" & angin_sr - 3).Value - 1)
- For again_ai = angin_sr To ((angin_sr) + .Range("A" & angin_sr - 3).Value - 1)
- ' 比對 D6 是否 < E178 值 (I3) 欄
- If .Range("D" & again_ai).Value < .Range("I" & angin_sr - 3).Value Then
- ' 值 = TRUE 時 E 欄記錄 "OK"
- .Range("E" & again_ai).Value = "OK"
- Else
- ' 值 = FLACE時E欄記錄 "NG"
- .Range("E" & again_ai).Value = "NG"
- ' 設 "NG" FONT.COLOR 為紅色
- .Range("E" & again_ai).Font.Color = vbRed
- ' "NG" 家數 + 1
- .Range("L" & angin_sr - 3).Value = .Range("L" & angin_sr - 3).Value + 1
- End If
- Next again_ai
-
- ' 如果還有 "NG" 值繼續執行 OUTLINE
- ' 將本次表格列數值設定給上次表格列數目的將本次表格列數作為下次表格計算基礎
- sr = angin_sr
- Loop
-
- ' ********此處為.Cells((sr - 3), 12).Value =0."NG" 家數=0 全部""可執 行Z-SCORE
- ' 定義z_sr為z_score起始表格列
- angin_sr = sr ' 將 sr 值回愎給 angin_sr 目的為把最後一次 outline "sr=angin_sr" 回愎回來
- sr = 6 ' 將sr回愎到第一次表格起始位置
-
- ' z_sr = 執行 z-score 起始列為: 最後一次起始列數 + 最後分析家數 + 6 格空格
- z_sr = angin_sr + (.Cells((angin_sr - 3), 1).Value + 6)
-
- ' 設定元素 z_score 標題列標題 (z_score 的第三列)
- .Cells((z_sr - 2), 1).Value = "執行"
- .Cells((z_sr - 2), 2).Value = .Name
- .Cells((z_sr - 2), 3).Value = "z_score"
-
- ' 將第一次表格 "實驗室編號" (第一行號)與 "分析值" (第二行) copy 至 z_score 表格因為要全部 "實驗室編號" 與 "分析值"
-
- z_oi = sr ' z_oi 定義為 第一次 起始格表格開始計數
- z_ai = z_sr ' z_ai 定義為 z_score 起始表格開始計數
-
- For z_oi = z_oi To sr + .Cells((sr - 3), 1).Value
- .Cells(z_ai, 1).Value = .Cells(z_oi, 1).Value
- .Cells(z_ai, 2).Value = .Cells(z_oi, 2).Value
- z_ai = z_ai + 1
- Next z_oi
複製代碼 |
|