- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
回復 7# lalalada
咐檔 如有詳細說明 就不會霧裡看花了
ex. SSSL 電腦 $100 50
SSSL $150 25
SSSL $50 100
輸出成
SSSL 電腦 175
最後目標是
SSSL 電腦 $平均價格 175
程式碼依附檔欄位, 工作表1 的資料已排序過 定製- Sub arrange_trial()
- Dim Ar(), Axy(), d As Object, dic As Object, xlword As String
- Set d = CreateObject("scripting.dictionary")
- Set dic = CreateObject("scripting.dictionary")
- Ar = Sheets("工作表1").Range("A2:E" & Sheets("工作表1").[E2].End(xlDown).Row).Value
- '*** 一般模組中: 沒指定工作表的 Range 是會作用中工作表ActiveSheet的Range ****
- For i = 1 To UBound(Ar)
- If Len(Ar(i, 2)) > 4 Then xlword = Ar(i, 2)
- If Not d.Exists(xlword) Then
- d(xlword) = Array(Ar(i, 1), Ar(i, 2), , Ar(i, 4), Ar(i, 5))
- dic(xlword) = Array(Ar(i, 3)) 'p
- Else
- Axy = d(xlword) '取得 字典物件的items
- d(xlword) = Array(Axy(0), Axy(1), , Axy(3) + Ar(i, 4), Axy(4) + Ar(i, 5))
-
- Axy = dic(xlword) '取得 字典物件的items
- ReDim Preserve Axy(UBound(dic(xlword)) + 1) '重置 Axy元素+1(Preserve: 員內容不變)
- Axy(UBound(Axy)) = Ar(i, 3) '加1 的元素
- dic(xlword) = Axy '置入 字典物件的items
- End If
- Next
- For Each k In d.keys
- Axy = d(k)
- Axy(2) = Application.Average(dic(k)) '平均數
- Axy(2) = Application.Round(Axy(2), 2) '四捨五入到小數點第2位
- d(k) = Axy
- Next
- Sheets("Output").[a5].Resize(d.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(d.items))
- End Sub
複製代碼 |
|