Excel VBA工作薄 5.7難度繼續(xù)飆升 字段都不同的多個工作薄如何匯總

前景提要

在昨天的學(xué)習(xí)中,我們也是分享了升級版的工作薄匯總的難度恳邀,當(dāng)字段的順序不同的時候要如何匯總,我們巧妙的利用了數(shù)組的方式來判斷數(shù)據(jù)的位置飒货,從而實(shí)現(xiàn)相應(yīng)的字段再粘貼相應(yīng)的數(shù)據(jù)的瞧甩,當(dāng)然這僅僅是工作中可能碰到的眾多情況中的一種熄捍,還有童鞋表示字段順序不同儿普,其實(shí)就是小兒科的事情祖娘,他們要匯總的數(shù)據(jù)荚孵,不僅僅字段展示順序不同妹窖,而且字段都不相同呢,這里小編內(nèi)心只想說一句話:你們之前都是怎么熬過來的

場景模擬

我們還是繼續(xù)只用之前的數(shù)據(jù)模型吧收叶,我們還是以京東的產(chǎn)品為例子骄呼,我們對數(shù)據(jù)做一些更改,我們將產(chǎn)品2的數(shù)據(jù)替換成為手機(jī)的數(shù)據(jù)

image.png

為了效果明顯一點(diǎn)判没,我們再更改一個數(shù)據(jù)源蜓萄,把香港的數(shù)據(jù)源中產(chǎn)品3替換成為TVB


image.png

好,通過這番更改澄峰,我們再處理數(shù)據(jù)的時候嫉沽,就不僅僅是要處理字段順序的情況了,而且還有字段也不同的情況俏竞,難度全面升級绸硕,VBA還可以實(shí)現(xiàn)嗎?

方法分析

方法我們還是來看看正常的手工操作的話魂毁,我們需要如何實(shí)現(xiàn)玻佩,我們需要判斷目標(biāo)工作薄的表頭和總工作薄的表頭是否一致,在上節(jié)我們學(xué)習(xí)了如果數(shù)據(jù)順序不一致的話席楚,我們可以通過數(shù)組方式來找到對應(yīng)的位置咬崔,那么今天的情況字段都不相同,我們還可以通過數(shù)字的方式來實(shí)現(xiàn)嗎烦秩?當(dāng)然可以垮斯,不過這里我們需要靈活一點(diǎn),做出一些調(diào)整闻镶,具體的看代碼

代碼區(qū)

Sub test()

Dim pathn, sth As Workbook, rng As Range, rng1 As Range, sbook As Workbook, arrT, k&

k = 0

pathn = ThisWorkbook.Path

Set sbook = ThisWorkbook

f = Dir(pathn & "\")

Do While f <> ""

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

    If f <> "test.xlsm" Then

        For Each sth In Workbooks

            If sth.Name = f Then

                GoTo line

            End If

        Next sth

        '=====匯總工作薄的代碼======

        k = k + 1

        If k = 1 Then

            Workbooks.Open (pathn & "\" & f)

            Set rng = ActiveSheet.UsedRange

            rng.Copy sbook.Worksheets(1).Cells(1, 1)

            Else

                l1 = Cells(1, Columns.Count).End(xlToLeft).Column

                arrT = Range(Cells(1, 1), Cells(1, l1))

                Workbooks.Open (pathn & "\" & f)

                Set rng = ActiveSheet.UsedRange

                arrW = rng.Rows(1)

                l2 = UBound(arrW, 2)

                For i = 1 To l2

                    On Error Resume Next

                    Num = WorksheetFunction.Match(arrW(1, i), arrT, 0)

                    If Err.Number = 0 Then

                        rng.Columns(i).Offset(1, 0).Copy sbook.Worksheets(1).Cells(l + 1, Num)

                        Else

                            l3 = sbook.Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column

                            sbook.Worksheets(1).Columns(l3).Insert

                            sbook.Worksheets(1).Cells(1, l3) = arrW(1, i)

                            rng.Columns(i).Offset(1, 0).Copy sbook.Worksheets(1).Cells(l + 1, l3)

                            ReDim Preserve arrT(1 To 1, 1 To l3 + 1)

                            arrT(1, l3) = arrW(1, i)

                            arrT(1, l3 + 1) = arrW(1, l2)

                    End If

                Next i

        End If

        '=====匯總工作薄的代碼======

        ActiveWorkbook.Close True

    End If

line:

    f = Dir()

Loop

End Sub

我們來看看最終的效果


image.png

產(chǎn)品這一列數(shù)據(jù)都是正常的甚脉,同時我們新增加的兩個測試時產(chǎn)品,手機(jī)和TVB的相關(guān)數(shù)據(jù)都已經(jīng)成功的匯總到了總數(shù)居里面铆农,非常完美的實(shí)現(xiàn)了我們的要求

單獨(dú)看看這兩份數(shù)據(jù)的內(nèi)容牺氨,完美狡耻,應(yīng)該空的地方都空, 應(yīng)該有數(shù)據(jù)的地方也正常有數(shù)據(jù)猴凹。nice

image.png
image.png

代碼分析

其實(shí)今天的代碼并么有增加太多的知識點(diǎn)夷狰,基本上都是在上節(jié)的代碼的基礎(chǔ)上進(jìn)行調(diào)整和更改的,改動比較大的地方就是增加了一個判斷

If Err.Number = 0 Then

                        rng.Columns(i).Offset(1, 0).Copy sbook.Worksheets(1).Cells(l + 1, Num)

                        Else

                            l3 = sbook.Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column

                            sbook.Worksheets(1).Columns(l3).Insert

                            sbook.Worksheets(1).Cells(1, l3) = arrW(1, i)

                            rng.Columns(i).Offset(1, 0).Copy sbook.Worksheets(1).Cells(l + 1, l3)

                            ReDim Preserve arrT(1 To 1, 1 To l3 + 1)

                            arrT(1, l3) = arrW(1, i)

                            arrT(1, l3 + 1) = arrW(1, l2)

                    End If

如果我們要匯總的目標(biāo)表格中的數(shù)據(jù)在我們的匯總表中沒有對應(yīng)的字段的話郊霎,我們需要增加字段沼头。我們來分解下動作

l3 = sbook.Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column

sbook.Worksheets(1).Columns(l3).Insert

sbook.Worksheets(1).Cells(1, l3) = arrW(1, i)

獲取匯總表的行的最下下標(biāo),并且新插入一列书劝,同時將這一列的表頭設(shè)置為我們匯總表中缺失的這個表頭

rng.Columns(i).Offset(1, 0).Copy sbook.Worksheets(1).Cells(l + 1, l3)

ReDim Preserve arrT(1 To 1, 1 To l3 + 1)

arrT(1, l3) = arrW(1, i)

arrT(1, l3 + 1) = arrW(1, l2)

這一段是本段代碼中最難以理解的部分进倍,因?yàn)槲覀兊臄?shù)據(jù)源中,總計(jì)那一列的數(shù)據(jù)應(yīng)該是放在最后面的购对,所以我們增加的字段都應(yīng)該放在總計(jì)這一列的前面猾昆,所以這里就需要利用數(shù)組的動態(tài)添加和重新賦值,我們將原來的總計(jì)這個字段對應(yīng)的位置讓給新增加的字段的位置骡苞,然后把新增加的那一列的數(shù)據(jù)替換成為總計(jì)垂蜗,這里比較繞,大家要多理解下解幽,來截圖看看實(shí)際效果

這是替換之前的數(shù)組的狀態(tài)


image.png

第5個位置是總結(jié)贴见,新增加的列在數(shù)組中是空白的

來看看替換后的效果

image.png

成功的完成了數(shù)據(jù)的位置的替換和數(shù)組的更新

最終的狀態(tài)是這樣的

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市躲株,隨后出現(xiàn)的幾起案子片部,更是在濱河造成了極大的恐慌,老刑警劉巖徘溢,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吞琐,死亡現(xiàn)場離奇詭異,居然都是意外死亡然爆,警方通過查閱死者的電腦和手機(jī)站粟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曾雕,“玉大人奴烙,你說我怎么就攤上這事∑收牛” “怎么了切诀?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搔弄。 經(jīng)常有香客問我幅虑,道長,這世上最難降的妖魔是什么顾犹? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任倒庵,我火速辦了婚禮褒墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘擎宝。我一直安慰自己郁妈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布绍申。 她就那樣靜靜地躺著噩咪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪极阅。 梳的紋絲不亂的頭發(fā)上胃碾,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機(jī)與錄音涂屁,去河邊找鬼书在。 笑死,一個胖子當(dāng)著我的面吹牛拆又,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栏账,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼帖族,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挡爵?” 一聲冷哼從身側(cè)響起竖般,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茶鹃,沒想到半個月后涣雕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闭翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年挣郭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疗韵。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡兑障,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕉汪,到底是詐尸還是另有隱情流译,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布者疤,位于F島的核電站福澡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驹马。R本人自食惡果不足惜革砸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一眯搭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧业岁,春花似錦鳞仙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至允耿,卻和暖如春借笙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较锡。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工业稼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚂蕴。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓低散,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骡楼。 傳聞我的和親對象是個殘疾皇子熔号,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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