日期
工作型別
送貨金額
人員姓名
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
張三,李四,王二
任務要求:快速彙總每一位送貨人員的送貨金額。注意:送貨金額依據人員係數進行平分。要求求得每個人的送貨金額數
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
知識要點:
字典是一個鍵-值對,一個鍵對應一個值。
鍵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直接在值上累加錢。