標題:
請教如何..取同姓名和加總成交金...感謝
[打印本頁]
作者:
alims
時間:
2012-6-21 11:32
標題:
請教如何..取同姓名和加總成交金...感謝
.................資料-------
日期 姓名 成交金
2月1日 aaa 1000
2月2日 bbb 2000
2月3日 aaa 3000
2月4日 ccc 4000
2月5日 aaa 5000
2月7日 aaa 1000
2月8日 bbb 2000
2月9日 aaa 3000
2月10日ccc 4000
2月11日aaa 5000
--- 變成------
姓名 成交金
aaa 18000
bbb 4000
ccc 8000
也就是 同姓名作加總
作者:
register313
時間:
2012-6-21 11:49
回復
1#
alims
字典標準用法
Sub XX()
Dim Ar(), d As Object
Set d = CreateObject("scripting.dictionary")
Ar = Range("A1:C" & [C2].End(xlDown).Row)
For i = 1 To UBound(Ar)
If Not d.exists(Ar(i, 2)) Then d.Add Ar(i, 2), Ar(i, 3) Else d(Ar(i, 2)) = d(Ar(i, 2)) + Ar(i, 3)
Next i
[E:F] = ""
[E1].Resize(d.Count, 1) = Application.Transpose(d.keys)
[F1].Resize(d.Count, 1) = Application.Transpose(d.items)
End Sub
複製代碼
作者:
alims
時間:
2012-6-21 12:04
回復
2#
register313
好厲害!!! 謝謝了
作者:
GBKEE
時間:
2012-6-21 12:55
回復
1#
alims
Option Explicit
Sub Ex()
Dim Rng As Range
Set Rng = Range("A1").CurrentRegion '設置資料區
Rng.Columns(2).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("IV1:IV2"), CopyToRange:=Range("F1"), Unique:=True
'進階篩選 出不重復的姓名到 F欄
Range("G1") = "成交金"
With Range(Range("G2"), Range("F1").End(xlDown).Offset(, 1))
.FormulaR1C1 = "=SUMIF(" & Rng.Columns(2).Address(, , 0) & ", RC[-1] ," & Rng.Columns(3).Address(, , 0) & ")"
'設下公式
.Value = .Value '公式轉換為值 也可以不轉換
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2012-6-21 17:00
回復
3#
alims
合併彙算專門解決這類問題
作者:
register313
時間:
2012-6-21 17:28
回復
3#
alims
小計(姓名欄位要先排序)
[attach]11456[/attach]
作者:
alims
時間:
2012-6-21 21:03
回復
6#
register313
用過了 謝謝
作者:
lasum
時間:
2012-6-22 04:49
感謝各位提供的資料…測試都可以執行…
但是出現一個問題…
執行register313大的程式時…要求定義 i …可能是我的版本比較低吧!
作者:
mistery
時間:
2012-7-18 16:38
利用 SUM函數+矩陣 就可以了~
= { sum ((姓名欄位:姓名欄位 = "某人") * (成交金欄位:成交金欄位)) }
作者:
GBKEE
時間:
2012-7-18 17:22
回復
9#
mistery
不用陣列,還有也可以
=SUMIF($B$2:$B$11,E2,$C$2:$C$11)
=SUMPRODUCT(($B$2:$B$11=E2)*($C$2:$C$11))
作者:
lalalada
時間:
2012-8-8 14:52
回復
2#
register313
你好~
剛好需要這功能
不過是一個名稱對應兩個值
我直覺想到用do loop 加上判斷字串完成
結果發現真的太慢了...無法對整個資料庫使用
sumif 可能會快一點 可是還要把名稱重複的行刪除也是頗花時間
然後爬文爬到這篇
我自己亂改之後已經能達到想要的功能
(其實就是建立兩個dictionary...有其他更快的作法嗎?)
但想真的了解程式碼含意
不知道能不能麻煩解釋一下各行的意思?
尤其是這句
If Not d.exists(Ar(i, 2)) Then d.Add Ar(i, 2), Ar(i, 3) Else d(Ar(i, 2)) = d(Ar(i, 2)) + Ar(i, 3)
感恩:)
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)