- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
4#
發表於 2022-10-26 13:18
| 只看該作者
本帖最後由 Andy2483 於 2022-10-26 13:29 編輯
後學學習心得如下!
請各位前輩指正並指導!謝謝
Option Explicit
Sub TEST()
Dim Brr, i&, T(5), TT, V&, Y, Z
Dim A, B
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y為字典
Set A = Sheets(1)
'↑令A是第一個工作表
Set B = Sheets(2)
'↑令A是第二個工作表
Brr = A.[A1].CurrentRegion
'↑令Brr是陣列,倒入表一[A1]連接到的儲存格
',擴展至最小方正區域儲存個的值
For i = 1 To UBound(Brr)
'↑設順迴圈將符合條件的列倒入Y字典裡
T(1) = Brr(i, 1)
T(2) = Brr(i, 2)
T(3) = Brr(i, 3)
T(4) = Brr(i, 4)
T(5) = Brr(i, 5)
TT = T(1) & "|" & T(2)
If T(4) <> "" Then
If Y.Exists(TT) Then
'↑如果判斷Y字典裡有資料?
MsgBox i & " 列廠牌+規格 有重複!不允許執行"
'↑因為後學設定的情境 廠牌+規格 不重複,就該有檢查機制
'否則數量會只抓最後一筆,而合計值卻已累加金額
GoTo 333
'↑跳到 333 位置繼續執行!
End If
Y(TT) = Array(T(1), T(2), T(3), T(4), T(5))
If IsNumeric(T(5)) Then
'↑如果判斷第5欄的資料是數字?
'因為[E1] 是 "金額"字串,所以要濾掉非數字!
V = V + T(5)
'↑金額累加
End If
End If
Next
TT = "總計"
'↑令TT是 "總計" 字串
Y(TT) = Array(TT, "", "", "", V)
'↑把 "總計" 當key,一維陣列當item
'↑有一點很重要! Y(TT) = Array(TT, , , , V) 沒有辦法執行!
B.UsedRange.EntireRow.Delete
'↑刪除表二 有使用的列
B.[A1].Resize(Y.Count, 5) = Application.Transpose(Application.Transpose(Y.items))
'↑把Y字典的Item轉置貼入 從表二的[A1] 開始
B.Range(B.Cells(Y.Count, 1), B.Cells(Y.Count, 5)).Interior.ColorIndex = 6
'↑表二的總計那5格底色改為 黃色6
333
Set Y = Nothing
Set Brr = Nothing
End Sub |
|