excel vbnet處理例項(金額均分求和,採用字典累加)

日期

工作型別

送貨金額

人員姓名

2021。8。1

送貨

35000

張三,李四,王二,小王

2021。8。2

送貨

35001

張三,李四,王二

2021。8。3

送貨

35002

張三,李四

2021。8。4

送貨

35003

張三

2021。8。5

送貨

35004

張三,李四,王二,小王

2021。8。6

送貨

35005

張三,李四,王二,小王

2021。8。7

送貨

35006

張三,李四

2021。8。8

送貨

35007

張三,李四

2021。8。9

送貨

35008

張三

2021。8。10

送貨

35009

張三,李四,王二

excel vbnet處理例項(金額均分求和,採用字典累加)

任務要求:快速彙總每一位送貨人員的送貨金額。注意:送貨金額依據人員係數進行平分。要求求得每個人的送貨金額數

Dim ws = (New excel)。activesheet

Dim arr = ws。CurrentRegion(3, “A”)。value‘arr獲取到A3區域,注意包含標題頭

Dim sz() As String

Dim qian As Single‘定義錢數,考慮到錢有小數,使用single,不能使用整數

’定義一個字典,鍵為string型別儲存姓名,值為錢數,使用single浮點數

Dim dict As New Dictionary(Of String, Single)

Dim r As Integer

’從第2行開始(除開標題)進入主迴圈

For r = 2 To UBound(arr)

sz = arr(r, 4)。ToString。Split(“,”)‘對第4列名單拆解成陣列sz

qian = Val(arr(r, 3)) / sz。Length ‘錢數平分,Val(arr(r, 3))表示總錢數,sz。Length表示名單個數

For i = 0 To UBound(sz)

If Not dict。ContainsKey(sz(i)) Then ‘’對名單中每個姓名進行查詢,如果在字典中沒找到

dict。Add(sz(i), qian)’ 就直接新增

Else

dict(sz(i)) = dict(sz(i)) + qian  如果找到就累加到值

End If

Next

Next

’輸出到listbox檢視

r = 4

For Each d In dict

ListBox1。Items。Add(d。Key + “  ” + CStr(d。Value))

‘這行是輸出到介面方便中期除錯使用,如果正確再輸出到表格

‘輸出到表格F G列中

ws。Setcell(r, “F”, d。Key)

ws。Setcell(r, “G”, d。Value)

r = r + 1

Next

’Me。Text = CStr(UBound(arr, 1)) + “  ” + CStr(UBound(arr, 2))

End Sub

excel vbnet處理例項(金額均分求和,採用字典累加)

知識要點:

字典是一個鍵-值對,一個鍵對應一個值。

鍵1  => 值1

鍵2  => 值2

鍵3  => 值4

。。。。。

鍵n  => 值n

’定義一個字典,鍵為string型別儲存姓名,值為錢數,使用single浮點數

Dim dict As New Dictionary(Of String, Single)If Not dict。ContainsKey(sz(i)) Then ‘’對名單中每個姓名進行查詢,如果在字典中沒找到

dict。Add(sz(i), qian)’ 就直接新增                Else

dict(sz(i)) = dict(sz(i)) + qian  如果找到就累加到值

End If

ContainsKey是查詢是否包括鍵,

dict(sz(i))獲得字典值,dict(sz(i)) = dict(sz(i)) + qian直接在值上累加錢。