- 帖子
- 1567
- 主題
- 40
- 精華
- 0
- 積分
- 1591
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2026-2-2
|
回復 10# 准提部林
謝謝論壇,謝謝前輩
後學藉此帖學習前輩的方案,方案學習心得註解如下,請前輩再指導
資料表:
結果表:
Sub TEST_A01()
Dim Arr, xD, i&, j%, N&, T$, U&
'↑宣告變數
Set xD = CreateObject("Scripting.Dictionary")
'↑令xD變數是 字典
Sheets("工作表2").UsedRange.EntireRow.Delete
'↑令表2使用儲存格所在的列刪除
Arr = Range([工作表1!I1], [工作表1!A1].Cells(Rows.Count, 1).End(xlUp))
'↑令Arr變數是 二維陣列,以表1的A~I欄儲存格值帶入陣列中
For i = 2 To UBound(Arr)
'↑設順迴圈
T = Arr(i, 2) & "|"
'↑令T變數是第2欄陣列值連接"|"符號的新字串
If Arr(i, 4) = "組合折扣" Then T = T & "S"
'↑如果第4欄陣列值是 "組合折扣"字串!就令T變數再連接"S"字元
For j = 6 To 9: xD(T & j) = xD(T & j) + Arr(i, j): Next
'↑設順迴圈!令T變數連接j迴圈數的新字串當key,
'其item值各累加j變數當欄的Arr陣列值
Next i
'-----------------------------------
For i = 2 To UBound(Arr)
'↑設順迴圈
If Arr(i, 4) = "組合折扣" Then GoTo i01
'↑如果第4欄陣列值是 "組合折扣"字串!就不處理後續,跳到i01位置繼續執行
T = Arr(i, 2) & "|"
'↑令T變數是第2欄陣列值連接"|"符號的新字串,加"|"是防萬一
N = N + 1
'↑令N變數累加1(累加結果列數,一開始就+1是為了空出標題的列)
For j = 1 To 5: Arr(N + 1, j) = Arr(i, j): Next
'↑設順迴圈!令Arr陣列從第二列開始寫入結果值(1~5欄)
For j = 6 To 9
'↑設順迴圈
Arr(N + 1, j) = Arr(i, j) + Arr(i, j) * (xD(T & "S" & j) / xD(T & j))
'↑令6~9欄Arr陣列值結果列是
'迴圈列個欄值+ 迴圈列個欄值*(組合折扣總金額/非組合折扣總金額)
'計算組合折扣後平均價格(因為組合折扣值是負值,所以是用相加計算)
Next j
i01: Next i
'-----------------------------------
[工作表2!A1:I1].Resize(N + 1) = Arr
'↑令表2寫入Arr陣列值,超過結果值的陣列值忽略
End Sub |
|