excel每張工作表中有b列,每行一個(gè)名字,怎么能匯總這些曾經(jīng)出現(xiàn)的名字到一個(gè)sheet?
網(wǎng)友解答: 謝謝邀請(qǐng)。這個(gè)問(wèn)題就是一個(gè)多表去重復(fù)的問(wèn)題,處理方法是使用vba。這里額外說(shuō)一下個(gè)人看法:這樣的需求實(shí)際上可以算是偽需求。一般情況下,銷售人員業(yè)績(jī)表實(shí)際上沒(méi)必要分成十幾張表,
謝謝邀請(qǐng)。
這個(gè)問(wèn)題就是一個(gè)多表去重復(fù)的問(wèn)題,處理方法是使用vba。
這里額外說(shuō)一下個(gè)人看法:這樣的需求實(shí)際上可以算是偽需求。
一般情況下,銷售人員業(yè)績(jī)表實(shí)際上沒(méi)必要分成十幾張表,一張表就好了。
只要格式規(guī)范,標(biāo)識(shí)明確,篩選一下什么數(shù)據(jù)都能出來(lái)。
這樣的好處是:利于后期統(tǒng)計(jì),不費(fèi)力氣,透視表基本就搞掂了。
而且還減少資源,使得EXCEL更快捷。
下面回到正題。
數(shù)據(jù)源是下面這個(gè)樣子的:
除匯總表之外的幾張工作表
各張工作表的姓名數(shù)據(jù)
思路:
1、遍歷工作表,讀取每個(gè)工作表的b列數(shù)據(jù)。
2、將每個(gè)工作表的b列數(shù)據(jù)都放進(jìn)字典,去除重復(fù)。
3、遍歷所有工作表后將字典的數(shù)據(jù)輸出到“匯總”工作表。
4、代碼如下:
Sub 多表提取不重復(fù)姓名()
'//定義變量
Dim i As Long
Dim arr
Dim LastRow As Long
Dim sht As Worksheet
Dim d As Object
Set d = CreateObject("scripting.dictionary") '創(chuàng)建字典
For Each sht In Sheets '遍歷工作表
If sht.Name < "匯總" Then '如果工作表的名稱不是匯總
With sht
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row '讀取每個(gè)工作表b列最后非空行行號(hào)
arr = .Range("b2:b" & LastRow).Value '將數(shù)據(jù)寫(xiě)進(jìn)數(shù)組arr
End With
For i = 1 To UBound(arr) '遍歷數(shù)組
d(arr(i, 1)) = "" '將數(shù)組數(shù)據(jù)放進(jìn)字典的key中去除重復(fù)
Next
End If
Next
With Sheets("匯總") '//輸出去重復(fù)后的姓名到匯總工作表
.Range("b2:b65535").ClearContents '清除舊數(shù)據(jù),方便每次更新
.Range("b2").Resize(d.Count, 1) = Application.Transpose(d.keys) '輸出最后的姓名數(shù)據(jù)
End With
End Sub
最后的結(jié)果如下圖:
如果還需要金額匯總統(tǒng)計(jì)之類的,如下圖:
代碼如下:
Sub 多表提取不重復(fù)姓名并統(tǒng)計(jì)()
'//定義變量
Dim i As Long
Dim arr, brr(1 To 10000, 1 To 3)
Dim LastRow As Long
Dim sht As Worksheet
Dim d As Object
Set d = CreateObject("scripting.dictionary") '創(chuàng)建字典
For Each sht In Sheets '遍歷工作表
If sht.Name < "匯總" Then '如果工作表的名稱不是匯總
With sht
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row '讀取每個(gè)工作表b列最后非空行行號(hào)
arr = .Range("b2:c" & LastRow).Value '將數(shù)據(jù)寫(xiě)進(jìn)數(shù)組arr
End With
For i = 1 To UBound(arr) '遍歷數(shù)組
If Not d.exists(arr(i, 1)) Then '判斷字典key是否存在,如果不存在
k = k + 1 '標(biāo)記行號(hào)
d(arr(i, 1)) = k '字典記錄姓名在數(shù)組brr中的行號(hào)
'//將第一條數(shù)據(jù)放進(jìn)數(shù)組brr
brr(k, 1) = arr(i, 1) '姓名
brr(k, 2) = arr(i, 2) '金額
brr(k, 3) = 1 '次數(shù)
Else
r = d(arr(i, 1)) '讀取姓名在數(shù)組brr中的行號(hào)
brr(r, 2) = brr(r, 2) + arr(i, 2) '金額累加
brr(r, 3) = brr(r, 3) + 1 '次數(shù)累加
End If
Next
End If
Next
With Sheets("匯總") '//輸出去重復(fù)后的姓名到匯總工作表
.Range("b2:d65535").ClearContents '清除舊數(shù)據(jù),方便每次更新
.Range("b2").Resize(k, 3) = brr '輸出最后的數(shù)據(jù)
End With
End Sub
結(jié)果如下:
以上僅供參考。
在使用Excel的時(shí)候,正確的用法是簡(jiǎn)單問(wèn)題簡(jiǎn)單處理,簡(jiǎn)單問(wèn)題不弄成復(fù)雜問(wèn)題。
網(wǎng)友解答:powerquery+數(shù)據(jù)透視表批量合并匯總多表放大招
①powerquery批量合并多表動(dòng)畫(huà)演示
②數(shù)據(jù)透視表匯總演示
具體做法如下:
1、點(diǎn)擊數(shù)據(jù)——新建查詢——從文件——從工作簿(即要匯總的表格)
2、獲取工作簿位置導(dǎo)入表格
3、出現(xiàn)導(dǎo)航器,按住SHIFT選中所有表格確定
4、出現(xiàn)導(dǎo)航編輯器,預(yù)覽導(dǎo)入的效果,刪除多余的列
5、追加查詢更多的表格,確定
6、確定后就直接導(dǎo)入表格中生成匯總表了
7、匯總在一起不代表求和,就只是將所有的內(nèi)容合并在一個(gè)表格中,只要點(diǎn)擊這個(gè)表格的任意一單元格就可以通過(guò)數(shù)據(jù)透視表匯總
a、將鼠標(biāo)放在數(shù)據(jù)區(qū)域任意一單元格——點(diǎn)擊設(shè)計(jì)——通過(guò)數(shù)據(jù)透視表匯總——選中匯總表放置的區(qū)域——確定
b、彈出數(shù)據(jù)透視表字段,將姓名放在行字段,業(yè)績(jī)放在值字段就生成匯總表格了
更多小技巧歡迎留言關(guān)注我的酷米號(hào):Excel辦公小動(dòng)畫(huà)