一起學(xué)習(xí),,一起進(jìn)步~~ 昨天我們大致的講述了下數(shù)據(jù)橫向合并的普通操作,,相信小伙伴們并不滿足于這樣簡(jiǎn)單的數(shù)據(jù)合并吧,畢竟日常工作中怎么會(huì)有這么簡(jiǎn)單的數(shù)據(jù)合并呢? 日常中我們常見的數(shù)據(jù)合并應(yīng)該是這樣的 有一個(gè)表的數(shù)據(jù)是完全的,,但是其他的表的數(shù)據(jù)則是不完整的,,這樣的數(shù)據(jù)表要如何匯總合并呢?
Sub twotwo() Dim nsth As Worksheet, arr() Worksheets.Add after:=Worksheets(Worksheets.Count) Set nsth = ActiveSheet nsth.Name = "橫向匯總(2)" For Each sth In Worksheets If sth.Name <> nsth.Name Then k = k + 1 If k = 1 Then l = sth.Cells(1, Columns.Count).End(xlToLeft).Column counts = Worksheets.Count ReDim Preserve arr(1 To sth.Cells(Rows.Count, 1).End(xlUp).Row, 1 To l) For i = 1 To sth.Cells(Rows.Count, 1).End(xlUp).Row For j1 = 1 To l arr(i, j1) = sth.Cells(i, j1) Next j1 Next i Else arrt = sth.UsedRange l = sth.Cells(1, Columns.Count).End(xlToLeft).Column ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + l - 1) For i = 1 To UBound(arr) On Error Resume Next num = WorksheetFunction.Match(arr(i, 1), WorksheetFunction.Transpose(WorksheetFunction.Index(arrt, 0, 1)), 0) If Err.Number = 0 Then For j = 2 To l arr(i, UBound(arr, 2) + j - l) = sth.Cells(num, j) Next j End If Next i End If End If Next sth nsth.Cells(1, 1).Resize(UBound(arr), UBound(arr, 2)) = arr End Sub 整體來說并不算太難,,大家要理解這個(gè)思路,,來看看效果 需要的數(shù)據(jù)都全部匯總了,并且相應(yīng)的字段應(yīng)該缺少的數(shù)據(jù),,也補(bǔ)充完整了,。
首先我們通過遍歷循環(huán)的方式得了一個(gè)數(shù)組,這個(gè)數(shù)組中的數(shù)據(jù)就是第一個(gè)表格中的數(shù)據(jù),。 然后繼續(xù)進(jìn)入循環(huán)進(jìn)入下一個(gè)工作表中,,從這里開始就需要進(jìn)行判斷了,。 首先同當(dāng)前表格的使用區(qū)域復(fù)制給數(shù)組arrt,,然后對(duì)數(shù)組進(jìn)行重新重組 ReDim Preserve arr(1 To UBound(arr), 1 To UBound(arr, 2) + l - 1) 這里大家可能比較難理解,,UBound(arr, 2)代表了二維數(shù)組的最大下標(biāo),,就是列數(shù),L代表了當(dāng)前工作表的最大行數(shù),,因?yàn)榈谝涣惺菂⒖剂?,不算在其中,所?1 然后就是遍歷循環(huán)的方式了,, 每找到一個(gè)參考列數(shù)據(jù)的位置,, 就復(fù)制給數(shù)組中對(duì)應(yīng)的數(shù)組的位置,這個(gè)位置如何得到呢,? arr(i, UBound(arr, 2) + j - l) = sth.Cells(num, j) 最大下標(biāo),,數(shù)據(jù)所在行這幾個(gè)參數(shù)之間的關(guān)系,大家可以通過調(diào)試的方式,,更好理解一些,。 好了~明晚20:00,準(zhǔn)時(shí)再見,。 |
|