返回列表 上一主題 發帖

[發問] 依項目名稱統計進銷總額之計算...?

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA陣列與字典,學習方案如下,請各位前輩指教

執行結果:



Sub TEST()
Dim Brr, V4&, V5&, Z, i&, T$, A&, Af&, B$, Bn&, D&, Df, Ra As Range
Set Z = CreateObject("Scripting.Dictionary")
Set Ra = Range([工作表1!H3], [工作表1!A65536].End(3)): Brr = Ra
For i = 1 To UBound(Brr)
   T = Brr(i, 3): V4 = Val(Brr(i, 4)): V5 = Val(Brr(i, 5))
   If V4 > 0 Then
      A = Z(T & "|進"): A = A + V4: Z(T & "|進") = A
      Af = Z(T & "|進額"): Af = Af + V4 * Val(Brr(i, 6))
      Z(T & "|進額") = Af
   End If
   Bn = Val(Brr(i, 8))
   If Bn > 0 Then
      B = Z(T & "|贈敘")
      Z(T & "|贈數") = Z(T & "|贈數") + Bn
      If B = "" Then
         B = Brr(i, 1) & "項_" & Brr(i, 2) & "_贈_" & Bn
         Else
         B = B & " ★" & Brr(i, 1) & "項_" & Brr(i, 2) & "_贈_" & Bn
      End If
      Z(T & "|贈敘") = B: B = ""
   End If
   If V5 > 0 Then
      D = Z(T & "|銷"): D = D + V5: Z(T & "|銷") = D
      Df = Z(T & "|銷額"): Df = Df + V5 * Val(Brr(i, 6))
      Z(T & "|銷額") = Df
   End If
Next
Set Ra = Range([工作表1!S2], [工作表1!M65536].End(3)): Brr = Ra
For i = 2 To UBound(Brr)
   T = Brr(i, 1)
   Brr(i, 2) = Z(T & "|進")
   Brr(i, 3) = Z(T & "|銷") + Z(T & "|贈數")
   Brr(i, 4) = Brr(i, 2) - Brr(i, 3)
   Brr(i, 5) = Z(T & "|進額")
   Brr(i, 6) = Z(T & "|銷額")
   Brr(i, 7) = Z(T & "|贈敘")
Next
Ra = Brr: [S2] = "備註"
Set Z = Nothing: Erase Brr: Set Ra = Nothing
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 15# cypd


    謝謝前輩回復
後學學習方案如下,請前輩參考

執行結果:



Sub TEST()
Dim Brr, V4&, V5&, Z, i&, T$, A&, Af&, B$, Bn&, D&, Df, Ra As Range
Set Z = CreateObject("Scripting.Dictionary")
Set Ra = Range([工作表1!H3], [工作表1!A65536].End(3)): Brr = Ra
For i = 1 To UBound(Brr)
   T = Brr(i, 3): V4 = Val(Brr(i, 4)): V5 = Val(Brr(i, 5))
   If V4 > 0 Then
      A = Z(T & "|進"): A = A + V4: Z(T & "|進") = A
      Af = Z(T & "|進額"): Af = Af + V4 * Val(Brr(i, 6))
      Z(T & "|進額") = Af
   End If
   Bn = Val(Brr(i, 8))
   If Bn > 0 Then
      B = Z(T & "|贈敘")
      Z(T & "|贈數") = Z(T & "|贈數") + Bn
      If B = "" Then
         B = Brr(i, 1) & "項_" & Brr(i, 2) & "_贈_" & Bn
         Else
         B = B & " ★" & Brr(i, 1) & "項_" & Brr(i, 2) & "_贈_" & Bn
      End If
      Z(T & "|贈敘") = B: B = ""
   End If
   If V5 > 0 Then
      D = Z(T & "|銷"): D = D + V5: Z(T & "|銷") = D
      Df = Z(T & "|銷額"): Df = Df + V5 * Val(Brr(i, 6))
      Z(T & "|銷額") = Df
   End If
Next
Set Ra = Range([工作表1!V2], [工作表1!N65536].End(3)): Brr = Ra
For i = 2 To UBound(Brr)
   T = Brr(i, 1)
   Brr(i, 2) = Z(T & "|進")
   Brr(i, 3) = Z(T & "|銷") + Z(T & "|贈數")
   Brr(i, 4) = Brr(i, 2) - Brr(i, 3)
   Brr(i, 5) = Z(T & "|進額")
   Brr(i, 6) = Z(T & "|銷額")
   Brr(i, 7) = Brr(i, 6) - Brr(i, 5)
   Brr(i, 8) = "共贈出: " & Z(T & "|贈數")
   Brr(i, 9) = Z(T & "|贈敘")
Next
Ra = Brr: [U2] = "備註"
Set Z = Nothing: Erase Brr: Set Ra = Nothing
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 17# cypd


    謝謝前輩再回復
以下觸發學習方案請前輩參考


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xR As Range
With Target
   Set xR = Intersect([A:H], ActiveSheet.UsedRange)
   If Not Intersect(.Cells, xR) Is Nothing Then Call TEST
End With
Set xR = Nothing
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 23# 准提部林


    請教前輩以下突發奇想的方式,可以有復原功能,但沒看過這樣的方法,請前輩指導有何利弊?
謝謝前輩

執行結果:



20230630_1.zip (16.81 KB)
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 26# 准提部林


    謝謝前輩,後學再試別的案例,這Evaluate 很奇妙
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 29# cypd


    謝謝前輩幫忙測試回復
請前輩使用一般公式的方法
經過測試這方法不適合工作表有保護的情境,或有條件的保護工作表但目標格要設定可編輯
這方法是後學學不會複雜公式偷懶所想出來的天馬行空方案,待後學有其他心得再分享給大家
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 31# cypd


    謝謝前輩回復
如果前輩想用後學的方法,後學建議以下方法
1.將$A:$F,$H:$W設為 允許使用者編輯範圍
2.再設定保護工作表
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題