返回列表 上一主題 發帖

請教 公式_跳欄並且符合條件才加總

本帖最後由 准提部林 於 2020-8-26 11:16 編輯

回復 22# Andy2483


[前置]MAX 是要分別從 每個品號(列)  [前置]段裡(標準.實際.誤差) 各取最大   

__取[標準]最大, 同時將該最大[標準]同組的[實際及誤差], 一起填入???
   還是三個分別取最大???

標準 100  實際 120 誤差 -20 (負數--怎比較)
標準 110  實際 100 誤差 10

取: 標準 110  實際 120 誤差 10 ???

TOP

回復 21# 准提部林


1) 每次發帖都只提供簡化版, 當然得不到正確解答, 除非你真的已可自己修改程式或公式
擔心範例太混亂!前輩們不理! 調適中

2) 以這版本來看, 加總條件[卸模]~[架模]~[調產], 都在第11列, 若程式沒修改, 當然不正確
     另外,[前置]MAX-- 又要如何取???
不懂所以再問,[前置]MAX 是要分別從 每個品號(列)  [前置]段裡(標準.實際.誤差) 各取最大 如SHEET("流程項目").[K46]

3) 依據上方4個條件, 加總的位在在Q~AF欄, 所以Brr的欄數應變成 1 to 16 而不是 1 to 3
範例有改

4) k = 1 to 3 這是固定的, 它會隨 j 值變化----j + k
以為欄位擴大了 就該跟著變 不懂 請再指導

自己再看看原來程式每一行, 若能一一理解, 再來說擴增需求~~
感覺自己有理解 就改改看 ^_^

謝謝
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 20# Andy2483


1) 每次發帖都只提供簡化版, 當然得不到正確解答, 除非你真的已可自己修改程式或公式
2) 以這版本來看, 加總條件[卸模]~[架模]~[調產], 都在第11列, 若程式沒修改, 當然不正確
     另外,[前置]MAX-- 又要如何取???
3) 依據上方4個條件, 加總的位在在Q~AF欄, 所以Brr的欄數應變成 1 to 16 而不是 1 to 3
4) k = 1 to 3 這是固定的, 它會隨 j 值變化----j + k

自己再看看原來程式每一行, 若能一一理解, 再來說擴增需求~~

TOP

回復 14# 准提部林


    搞不懂 哪裡錯
分項比總和大

範例_20200826.zip (310 KB)

用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 18# Andy2483


    還沒有測試 但應該有差
因為少判斷 前置 很多次
就直接跳到 j01
撥空再測試 學習
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 9# 准提部林


    對不起 !
忘了問迴圈方式不同執行效率有差別嗎?
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 9# 准提部林


前輩的迴圈比較難 ,換個角度比較看得懂
可能跟心境有關吧
您無私的把懂的傳授給我們 成就我們
Andy只懂得接受前輩的指導 增長自己
謝謝
For k = 1 To 3
For i = 4 To UBound(Arr)
For j = 1 To UBound(Arr, 2) Step 4
    If Left(Arr(1, j), 2) = "前置" Then GoTo j01
        Brr(i - 3, k) = Brr(i - 3, k) + Arr(i, j + k - 1)
j01: Next j
Next i
Next k
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 15# 准提部林


還沒有用PC測試
以結果反推裡面程碼的意義 大概了解
1.兩個容器 Arr裝原來的資料 Brr裝回圈的結果
UBound(Arr)是指Arr的縱向陣列數
UBound(Arr, 2)是指Arr的橫向陣列數
2. Arr = Range(Cells(R, "AG"), Cells(10, C))是反對角定義範圍嗎?
沒看過 就慌了
謝謝指導
明早出差 撥空繼續研習 還有公式版呢 真期待
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

Sub TEST2()
Dim Arr, Brr, R&, C&, i&, j&, k%
R = Cells(Rows.Count, "d").End(xlUp).Row
C = Cells(12, Columns.Count).End(xlToLeft).Column
Arr = Range([A1], Cells(R, C))
ReDim Brr(1 To UBound(Arr) - 12, 1 To 3)
For i = 13 To UBound(Arr)
For j = [AG1].Column To UBound(Arr, 2) Step 4
    If Left(Arr(10, j), 2) = "前置" Then GoTo j01
    For k = 1 To 3
        Brr(i - 12, k) = Brr(i - 12, k) + Arr(i, j + k - 1)
    Next k
j01: Next j
Next i
[AC13].Resize(UBound(Brr), 3) = Brr
End Sub

改成這樣是否較易理解?
Cells(R, C) 就是資料區最右/最下一格
Range([A1], Cells(R, C)) 從a1向下/向右的區域



==================================

TOP

VBA中的陣列用法, 要早點了解,
最好也理解字典用法,
字典+陣列, 可處理很多種資料的處理及統計運算需求,
否則隨著資料越多, 就越不好處理~~

TOP

        靜思自在 : 君子如水,隨方就圓,無處不自在。
返回列表 上一主題