- 帖子
- 913
- 主題
- 150
- 精華
- 0
- 積分
- 1089
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- office 2019
- 閱讀權限
- 50
- 性別
- 女
- 註冊時間
- 2011-8-28
- 最後登錄
- 2023-7-19
 
|
69#
發表於 2020-6-22 19:41
| 只看該作者
回復 51# jcchiang
您好,
表格上傳時有小小變動了格式,公式忘了改&有部份程式已改成我想要的執行方式,不過不知是寫法不好,或資料太多,跑得有點慢,
試過單一欄從年初資料開始更新,結果慢得像當機一樣,如果能指導下更快的寫法,就太好了!
新寫去雖然完成,但我不知如何改為陣列,所以是每欄的更新分開寫!- Sub 北區_A_取年月()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'A 取B欄年.月
- For Each xR In Range([b3], [b65535].End(3)) '向上 End(3) = End(xlup).Row
- If xR >= d Then
- xR.Offset(, -1) = Year(xR) & ".." & Month(xR)
- End If
- Next
- End Sub
- Sub 北區_E_採購單號碼()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'E 採購單號碼
- For Each xR In Range([b3], [b65535].End(3))
- If xR.Offset(, 16) = "" Then 'R欄無單號
- xR.Offset(, 3) = "無交貨"
- End If
- If xR >= d And xR.Offset(, 16) <> "" Then
- xR.Offset(, 3) = xR.Offset(, 18) & xR.Offset(, 17) & xR.Offset(, 16) 'T&S&R
- End If
- Next
- End Sub
- Sub 北區_K_結餘()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'K 結餘
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d Then 'k+g-f-h-i+j
- xR.Offset(, 9) = xR.Offset(-1, 9) + xR.Offset(, 5) - xR.Offset(, 4) - xR.Offset(, 6) - xR.Offset(, 7) + xR.Offset(, 8)
- End If
- Next
- End Sub
- Sub 北區_L_大_結餘()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'L 大,結餘
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d And xR.Offset(, 1) = "大" Then 'l+g-f+j-n
- xR.Offset(, 10) = xR.Offset(-1, 10) + xR.Offset(, 5) - xR.Offset(, 4) + xR.Offset(, 8) - xR.Offset(, 12)
- Else 'l+j-n
- xR.Offset(, 10) = xR.Offset(-1, 10) + xR.Offset(, 8) - xR.Offset(, 12)
- End If
- Next
- End Sub
- Sub 北區_M_美_結餘()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d And xR.Offset(, 1) = "美" Then 'm+g-f-o
- xR.Offset(, 11) = xR.Offset(-1, 11) + xR.Offset(, 5) - xR.Offset(, 4) - xR.Offset(, 13)
- Else 'm-o
- xR.Offset(, 11) = xR.Offset(-1, 11) - xR.Offset(, 13)
- End If
- Next
- End Sub
- Sub 北區_U_派板對應單據日()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'U'派板對應單據日
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d And (xR.Offset(, 2) = "中和" Or xR.Offset(, 2) = "內湖" Or xR.Offset(, 2) = "汐止") Then
- xR.Offset(, 19) = xR
- Else
- xR.Offset(, 19) = xR + 1
- End If
- Next
- End Sub
- Sub 北區_X_派板結餘()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'X'派板結餘 g+j-h-i-w
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d Then 'x+g+j-h-i-w
- xR.Offset(, 22) = xR.Offset(-1, 22) + xR.Offset(, 5) + xR.Offset(, 8) - xR.Offset(, 6) - xR.Offset(, 7) - xR.Offset(, 21)
- End If
- Next
- End Sub
- Sub 北區_Y_盤點差異()
- Dim Sh As Worksheet, xS As Worksheet, xR
- Set xS = ThisWorkbook.Sheets("VBA") '程式來源
- Set Sh = Workbooks("全省核銷明細.xlsx").Sheets("北區")
- d = xS.[AA3] 'Date
- Sh.Activate
- '------------ 'Y'盤點差異
- For Each xR In Range([b3], [b65535].End(3))
- If xR >= d And xR.Offset(, 24) = "" Then
- xR.Offset(, 23) = ""
- Else 'z-x
- xR.Offset(, 23) = xR.Offset(, 24) - xR.Offset(, 22)
- End If
- Next
- End Sub
複製代碼 目前只剩3欄的公式,因包含了countif的函數,查了些資料,沒找到關於countif的函數如何改為VBA的寫法!- Range("N3:N" & xRow).Formula = "=北區_大_中南區" '=IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=1,SUMIFS(台中!$D:$D,台中!$B:$B,"大",台中!$A:$A,北區!$B3),IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=2,SUMIFS(新竹!$D:$D,新竹!$B:$B,"大",新竹!$A:$A,北區!$B4),IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=3,SUMIFS(南區!$D:$D,南區!$B:$B,"大",南區!$A:$A,北區!$B5),"")))
- Range("N3:N" & xRow).Value = Range("N3:N" & xRow).Value
- Range("O3:O" & xRow).Formula = "=北區_美_中南區" '=IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=1,SUMIFS(台中!$D:$D,台中!$B:$B,"美",台中!$A:$A,北區!$B3),IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=2,SUMIFS(新竹!$D:$D,新竹!$B:$B,"美",新竹!$A:$A,北區!$B4),IF(COUNTIF(北區!$B$3:$B3,北區!$B3)=3,SUMIFS(南區!$D:$D,南區!$B:$B,"美",南區!$A:$A,北區!$B5),"")))
- Range("O3:O" & xRow).Value = Range("O3:O" & xRow).Value
- Range("V3:V" & xRow).Formula = "=IF(COUNTIFS(B$3:B3,B3,D$3:D3,D3)=1,SUMIFS(W:W,B:B,B3,D:D,D3)-SUMIFS(F:F,B:B,U3,D:D,D3),0)" '派板-交板差異
- Range("V3:V" & xRow).Value = Range("V3:V" & xRow).Value
複製代碼 |
|