vba 按工作表不同列字段名合并數(shù)據(jù)

? ? ? 事務(wù)所底稿編制的員工,經(jīng)常需要匯總合并企業(yè)提供的Excel工作簿數(shù)據(jù)進(jìn)行數(shù)據(jù)分析慌烧,利用Excel自帶的power query合并數(shù)據(jù)時(shí)逐抑,有時(shí)會(huì)出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。 孫興華老師說(shuō)pandas適用于大數(shù)據(jù)分析屹蚊,如果只是對(duì)Excel數(shù)據(jù)進(jìn)行處理厕氨,還是VBA更便捷。

匯總各工作簿汹粤,代碼默認(rèn)表頭數(shù)據(jù)為1行命斧,工作表列字段名及順序可不一致,可按需要合并工作表名稱關(guān)鍵字嘱兼,進(jìn)行工作表合并国葬,合并數(shù)據(jù)效果:


VBA代碼如下:

Sub CollectWorkBookDatas()

Dim shtActive As Worksheet, rng As Range, shtData As Worksheet

Dim nTitleRow As Long, nLastRow As Long

Dim i, k, y As Long

Dim aData, aRes

Dim strPath As String, strFileName As String

Dim strKey, strk As String, nShtCount As Long

With Application.FileDialog(msoFileDialogFolderPicker)

Set d = CreateObject("scripting.dictionary")

If .Show Then strPath = .SelectedItems(1) Else Exit Sub

End With

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

strk = InputBox("請(qǐng)輸入需要合并工作表名稱關(guān)鍵字" & vbCrLf & "如果未指定關(guān)鍵字默認(rèn)合并所有工作表", "提示")

If StrPtr(strk) = 0 Then Exit Sub

Set shtActive = ActiveSheet

With Application

? ? .ScreenUpdating = False

? ? .DisplayAlerts = False

? ? .AskToUpdateLinks = False

End With

Cells.NumberFormat = "@"

Cells.Clear

strFileName = Dir(strPath & "*.xls*")

k = 2

Do While strFileName <> ""

? ? With GetObject(strPath & strFileName)

? ? For Each shtData In .Worksheets

? ? ? ? If InStr(1, shtData.Name, strk, vbTextCompare) Then

? ? ? ? ? ? If shtData.FilterMode = True Then shtData.Cells.AutoFilter

? ? ? ? ? ? ? ? Set rng = shtData.UsedRange

? ? ? ? ? ? ? ? If rng.Count > 1 Then

? ? ? ? ? ? ? ? N = N + 1

? ? ? ? ? ? ? ? aData = rng.Value

? ? ? ? ? ? ? ? ReDim aRes(1 To UBound(aData), 1 To k)

? ? ? ? ? ? ? ? ? ? For j = 1 To UBound(aData, 2)

? ? ? ? ? ? ? ? ? ? ? ? strKey = aData(1, j)

? ? ? ? ? ? ? ? ? ? ? ? If Not d.Exists(strKey) Then

? ? ? ? ? ? ? ? ? ? ? ? ? ? k = k + 1

? ? ? ? ? ? ? ? ? ? ? ? ? ? If k > UBound(aRes, 2) Then

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ReDim Preserve aRes(1 To UBound(aRes), 1 To k)

? ? ? ? ? ? ? ? ? ? ? ? ? ? End If

? ? ? ? ? ? ? ? ? ? ? ? d(strKey) = k

? ? ? ? ? ? ? ? ? ? ? ? End If

? ? ? ? ? ? ? ? ? ? ? ? y = d(strKey)

? ? ? ? ? ? ? ? ? ? ? ? For i = 2 To UBound(aData)

? ? ? ? ? ? ? ? ? ? ? ? ? ? aRes(i - 1, y) = aData(i, j)

? ? ? ? ? ? ? ? ? ? ? ? Next

? ? ? ? ? ? ? ? ? ? Next

? ? ? ? ? ? ? ? For i = 2 To UBound(aData)

? ? ? ? ? ? ? ? aRes(i - 1, 1) = strFileName

? ? ? ? ? ? ? ? aRes(i - 1, 2) = shtData.Name

? ? ? ? ? ? ? ? Next

? ? ? ? ? ? ? ? intLastRow = shtActive.Cells(Rows.Count, 1).End(xlUp).Row + 1

? ? ? ? ? ? ? ? shtActive.Cells(intLastRow, 1).Resize(UBound(aRes), UBound(aRes, 2)) = aRes

? ? ? ? ? ? ? ? End If

? ? ? ? End If

? ? Next

? ? .Close False

? ? End With

? ? strFileName = Dir()

Loop

? ? shtActive.Select

? ? Range("a1") = "工作表名"

? ? Range("b1") = "工作簿名"

? ? Range("C1").Resize(1, k - 2) = d.Keys

? ? Set d = Nothing

With Application

? ? .ScreenUpdating = True

? ? .DisplayAlerts = True

? ? .AskToUpdateLinks = True

End With

MsgBox "共匯總 " & N & "張工作表"

End Sub

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汇四,更是在濱河造成了極大的恐慌接奈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件通孽,死亡現(xiàn)場(chǎng)離奇詭異序宦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)背苦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)互捌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人行剂,你說(shuō)我怎么就攤上這事秕噪。” “怎么了硼讽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵巢价,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我固阁,道長(zhǎng)壤躲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任备燃,我火速辦了婚禮碉克,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘并齐。我一直安慰自己漏麦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布况褪。 她就那樣靜靜地躺著撕贞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪测垛。 梳的紋絲不亂的頭發(fā)上拍摇,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天究恤,我揣著相機(jī)與錄音,去河邊找鬼。 笑死蚁滋,一個(gè)胖子當(dāng)著我的面吹牛孝偎,可吹牛的內(nèi)容都是我干的栽连。 我是一名探鬼主播翩伪,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眉尸!你這毒婦竟也來(lái)了域蜗?” 一聲冷哼從身側(cè)響起巨双,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎地消,沒(méi)想到半個(gè)月后炉峰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脉执,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戒劫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片半夷。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖迅细,靈堂內(nèi)的尸體忽然破棺而出巫橄,到底是詐尸還是另有隱情,我是刑警寧澤茵典,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布湘换,位于F島的核電站,受9級(jí)特大地震影響统阿,放射性物質(zhì)發(fā)生泄漏彩倚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一扶平、第九天 我趴在偏房一處隱蔽的房頂上張望帆离。 院中可真熱鬧,春花似錦结澄、人聲如沸哥谷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)们妥。三九已至,卻和暖如春勉吻,著一層夾襖步出監(jiān)牢的瞬間监婶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工餐曼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留压储,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓源譬,卻偏偏與公主長(zhǎng)得像集惋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踩娘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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