Excel VBA工作薄 5.9多個(gè)工作薄求和世舰,不僅僅是合并

前景提要

忽然發(fā)現(xiàn)大家的日常工作中會(huì)使用到的場景真的好多,不過這樣也好槽卫,大家告訴我相關(guān)的場景跟压,小編也是盡量的去實(shí)現(xiàn),即幫助了大家歼培,也鍛煉了自己的能力震蒋,一舉兩得,哈哈

有童鞋說躲庄,他想要的效果并不僅僅是數(shù)據(jù)合并喷好,簡單的將各種數(shù)據(jù)合并在一起對(duì)他來說并沒有太大的作用,它希望能夠再進(jìn)行數(shù)據(jù)合并的同時(shí)读跷,順帶進(jìn)行數(shù)據(jù)的計(jì)算,比方說數(shù)據(jù)的求和禾唁,這樣就不用在數(shù)據(jù)完成合并之后再進(jìn)行求和匯總了效览,其實(shí)這也并不難,我們開工吧

場景模擬

正好昨晚趁著放假有空荡短,重溫了下復(fù)仇者聯(lián)盟系列丐枉,今天我們就用復(fù)仇者聯(lián)盟的數(shù)據(jù)來坐下例子吧,假設(shè)我們通過各種渠道成功的統(tǒng)計(jì)出了漫威的幾個(gè)英雄人物在每一集的殺敵數(shù)掘托,我們需要將四季的所有的英雄的殺敵匯總并求和瘦锹,得到一個(gè)最終的數(shù)據(jù),能夠展示每個(gè)英雄的殺敵數(shù)的闪盔,我們依然還是利用之前已經(jīng)寫好的合并數(shù)據(jù)的代碼的基礎(chǔ)上弯院,繼續(xù)寫

這是我們假設(shè)的漫威英雄的殺敵戰(zhàn)果

image.png

總共有4個(gè)文件需要我們匯總


image.png

方法分析

之前我們匯總數(shù)據(jù)的時(shí)候,僅僅是將需要的數(shù)據(jù)復(fù)制粘貼過來就可以了泪掀,并沒有做其他的操作听绳,而現(xiàn)在進(jìn)行求和的話,方法上面會(huì)稍微有一點(diǎn)不同异赫,因?yàn)槲覀冎安簧婕皵?shù)據(jù)的任何操作椅挣,僅僅是匯總头岔,而現(xiàn)在我們不僅是匯總,還需要進(jìn)行求和鼠证,人工操作的話峡竣,我們需要遍歷每個(gè)表,找到對(duì)應(yīng)的人的數(shù)據(jù)量九,比方說我們要匯總鋼鐵俠的數(shù)據(jù)适掰,這個(gè)時(shí)候我們就要翻遍4個(gè)工作薄,然后講鋼鐵俠所在的哪一行的數(shù)據(jù)進(jìn)行相加娩鹉,然后以此類推攻谁,如果碰到某個(gè)表沒有鋼鐵俠的話,還不能夠計(jì)算弯予,只能跳過打開下一個(gè)戚宦,那么這樣的一個(gè)過程,遍歷文件夾我們已經(jīng)學(xué)過了锈嫩,批量打開工作薄我們也學(xué)習(xí)了受楼,現(xiàn)在就是數(shù)據(jù)的相加的問題了,如果單純的用數(shù)組的話呼寸,我們還需要遍歷數(shù)組艳汽,今天我們換種方法,我們用字典+數(shù)組的方法來實(shí)現(xiàn)对雪,字典可能很多小伙伴們都比較陌生河狐,沒事,先理解邏輯瑟捣,直接套用即可馋艺。

代碼區(qū)

Sub test()

Dim zd As Object, pathn, arr()

pathn = ThisWorkbook.Path

Set zd = CreateObject("scripting.dictionary")

f = Dir(pathn & "\")

k = 0

Do While f <> ""

If f <> "test.xlsm" Then

    Workbooks.Open pathn & "\" & f

    l = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To l

        If zd.Exists(Cells(i, 1).Value) Then

            n = zd(Cells(i, 1).Value)

            arr(2, n) = arr(2, n) + Cells(i, 2)

            arr(3, n) = arr(3, n) + Cells(i, 3)

            Else

                k = k + 1

                zd(Cells(i, 1).Value) = k

                ReDim Preserve arr(1 To 3, 1 To k)

                arr(1, k) = Cells(i, 1)

                arr(2, k) = Cells(i, 2)

                arr(3, k) = Cells(i, 3)

        End If

    Next i

    ActiveWorkbook.Close True

End If

f = Dir()

Loop

ActiveSheet.Cells(2, 1).Resize(k, 3) = WorksheetFunction.Transpose(arr)

End Sub

我們來看看最終的效果
image.png

完美的實(shí)現(xiàn)了數(shù)據(jù)的合計(jì),并且展示了相關(guān)的數(shù)據(jù)

代碼分析

今天的新知識(shí)點(diǎn)就是字典迈套,字典的話捐祠,我們現(xiàn)在暫時(shí)不去涉及,因?yàn)椴⒉皇呛唵蔚膸拙湓捑涂梢哉f完的桑李,后面我們會(huì)專門重點(diǎn)開一個(gè)系列來說下字典的踱蛀,今天我們先接觸下字典的使用方法就好,字典的特點(diǎn)就是相同的值在字典中只能出現(xiàn)一個(gè)贵白,并且也只能對(duì)應(yīng)一個(gè)值率拒。

案例中,比方說黑寡婦的數(shù)據(jù)禁荒,在第一個(gè)表出現(xiàn)了俏橘,在第一個(gè)表的時(shí)候,黑寡婦的數(shù)據(jù)是第一次顯示圈浇,所以字典中并不存在黑寡婦的數(shù)據(jù)寥掐,我們?cè)谧值渲袑⒑诠褘D的值對(duì)應(yīng)為它在第一表中的行號(hào)

image.png

它的兩個(gè)值靴寂,則通過定義動(dòng)態(tài)數(shù)組的方式進(jìn)行賦值

 ReDim Preserve arr(1 To 3, 1 To k)

 arr(1, k) = Cells(i, 1)

 arr(2, k) = Cells(i, 2)

 arr(3, k) = Cells(i, 3)

這個(gè)動(dòng)態(tài)數(shù)組的代碼的邏輯,大家應(yīng)該能夠理解了召耘,因?yàn)槲覀兦昂笠呀?jīng)使用了很多次了百炬。

然后到我們打開第二個(gè)表的時(shí)候,看看黑寡婦的數(shù)據(jù)有什么變化污它,因?yàn)槭堑诙€(gè)數(shù)據(jù)表了剖踊,那么黑寡婦的數(shù)據(jù)肯定是已經(jīng)在字典中存在了,所以這個(gè)時(shí)候就直接進(jìn)行數(shù)據(jù)的更改就好了衫贬,而不用再次增加數(shù)據(jù)

image.png

完整代碼

Sub test()

Dim zd As Object, pathn, arr()

pathn = ThisWorkbook.Path

Set zd = CreateObject("scripting.dictionary")

f = Dir(pathn & "\")

k = 0

Do While f <> ""

If f <> "test.xlsm" Then

    Workbooks.Open pathn & "\" & f

    l = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To l

        If zd.Exists(Cells(i, 1).Value) Then '判斷數(shù)據(jù)在字典中是否存在

            n = zd(Cells(i, 1).Value) '如果存在就講原來的數(shù)據(jù)和新的數(shù)據(jù)相加

            arr(2, n) = arr(2, n) + Cells(i, 2)

            arr(3, n) = arr(3, n) + Cells(i, 3)

            Else '如果不存在則進(jìn)行賦值德澈,并更改動(dòng)態(tài)數(shù)組

                k = k + 1

                zd(Cells(i, 1).Value) = k

                ReDim Preserve arr(1 To 3, 1 To k)

                arr(1, k) = Cells(i, 1)

                arr(2, k) = Cells(i, 2)

                arr(3, k) = Cells(i, 3)

        End If

    Next i

    ActiveWorkbook.Close True

End If

f = Dir()

Loop

ActiveSheet.Cells(2, 1).Resize(k, 3) = WorksheetFunction.Transpose(arr) '將最終的結(jié)果在匯總的數(shù)據(jù)表內(nèi)輸出

End Sub
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市固惯,隨后出現(xiàn)的幾起案子梆造,更是在濱河造成了極大的恐慌,老刑警劉巖葬毫,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镇辉,死亡現(xiàn)場離奇詭異,居然都是意外死亡贴捡,警方通過查閱死者的電腦和手機(jī)忽肛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烂斋,“玉大人屹逛,你說我怎么就攤上這事⊙绰睿” “怎么了罕模?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長香缺。 經(jīng)常有香客問我,道長歇僧,這世上最難降的妖魔是什么图张? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮诈悍,結(jié)果婚禮上祸轮,老公的妹妹穿的比我還像新娘。我一直安慰自己侥钳,他們只是感情好适袜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舷夺,像睡著了一般苦酱。 火紅的嫁衣襯著肌膚如雪售貌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天疫萤,我揣著相機(jī)與錄音颂跨,去河邊找鬼。 笑死扯饶,一個(gè)胖子當(dāng)著我的面吹牛恒削,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尾序,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼钓丰,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了每币?” 一聲冷哼從身側(cè)響起携丁,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脯爪,沒想到半個(gè)月后则北,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痕慢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年尚揣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掖举。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡快骗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塔次,到底是詐尸還是另有隱情方篮,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布励负,位于F島的核電站藕溅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏继榆。R本人自食惡果不足惜巾表,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望略吨。 院中可真熱鬧集币,春花似錦、人聲如沸翠忠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至当娱,卻和暖如春吃既,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趾访。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工态秧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扼鞋。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓申鱼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親云头。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捐友,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容