excel關於資料重覆問題?(頭大!)

請問一下,如果我現在一份excel裡面有500個工作頁,每一頁都有材料編號(200~300種),但每一頁材料編號有的會重覆,有沒有什麼方式將這500頁不重複的材料編號挑出來,並且顯示在同一頁
2021-12-24 13:39 發佈
townboyed wrote:
剛才詢問Google...(恕刪)


謝謝回覆
但與需求不太符合
因為工作的分頁有500頁
每頁有數百筆資料
這個方法只能單一單一做
做完在用人工方式一筆一筆抓到同一個頁面
有點耗時,看看是否有比較便捷的方法
我沒有你的檔案,只能用以前幫客戶解決的方式來說明,看合不合你用:
我用5張工作表作模擬(每張工作表皆增加B欄當輔助欄,只輸入1方便統計是否重覆):





在第6張工作表
在A1儲存格,點取「資料 > 合併彙算」。
統計加總或計數皆可以。
將每張工作表的資料範圍框選起來,最好是以最多的記錄筆數的範圍,再點取新增鈕一一加入進來。
由於我的範例A欄是編號,第一列是標題,故將最左欄與頂端列都打勾。


點取確定鈕
結果如下圖

再依B欄遞增或遞減排序,將不是1的記錄刪除。
錦色如月,子耀光芒。
一、排版方式?
二、編號格式?
三、模擬用資料?


只好用猜的,就當您資料全部放在a欄,剩下的自己修改

每個工作表600~1200筆資料,n百種隨機編號
總共501個工作表(含總表),合計隨機資料30~60萬筆
找不重覆大約1秒




無聊試一下750萬筆資料(產生隨機資料花半小時),搜尋不重覆約13秒









Sub testdata() '隨機資料

Dim i As Double, lastrow As Double, total As Double, ttt As Double

Application.ScreenUpdating = False

ttt = Timer
lastrow = Application.RandBetween(601, 1201)

For i = 1 To Sheets.Count
If Sheets(i).Name <> "總表" Then

With Sheets(i)
.Cells.Clear
.Range("a1") = "編號"

For j = 2 To lastrow

.Cells(j, 1) = Application.RandBetween(1, 300)
total = total + 1
Next j

.Cells(Application.RandBetween(2, lastrow), 1) = Chr(Application.RandBetween(65, 90)) & Application.RandBetween(1, 20)

End With

End If

Next i

Application.ScreenUpdating = True

MsgBox total & "筆隨機資料" & vbNewLine & Timer - ttt, vbOKOnly, "report"


End Sub


Sub test() '找不重覆



Dim d As Object, 編號, key, i As Double, j As Double, r As Double, lastrow As Double, ttt As Double


Set d = CreateObject("scripting.dictionary")

ttt = Timer

For i = 1 To Sheets.Count
If Sheets(i).Name <> "總表" Then

If Sheets(i).Range("a1") = "" Then
MsgBox "先按產生隨機資料", vbOKOnly, "error"
Exit Sub
End If

lastrow = Sheets(i).Range("A1").CurrentRegion.Rows.Count
編號 = Sheets(i).Range("A2:A" & lastrow)

For j = 1 To UBound(編號)
d(編號(j, 1)) = d(編號(j, 1)) + 1
Next j

End If
Next i


With Sheets("總表")
.Cells.Clear
.Range("a1:c1") = Array("所有編號(debug)", "重覆次數(debug)", "只出現過一次")
.Range("a2").Resize(d.Count , 1) = Application.Transpose(d.keys)
.Range("b2").Resize(d.Count , 1) = Application.Transpose(d.items)

r = 1
For Each key In d.keys
If d(key) = 1 Then
r = r + 1
.Cells(r, 3) = key
End If
Next

.Columns("C:C").HorizontalAlignment = xlCenter

End With

Set d = Nothing

Debug.Print Timer - ttt
MsgBox r-1 & "筆" & vbNewLine & Timer - ttt & "s", vbOKOnly, "report"

End Sub




[點擊下載]
這樣的方式應該適合你

=TRANSPOSE(UNIQUE(FILTER(A2:A13,COUNTIFS(A2:A13, A2:A13)>1,"無重複資料")))



你再自己改寫成填寫到另一張表格,應該不難吧
但因為範圍要有限制,無法用A:A這樣的無限制方式
可以一次把範圍拉大一點,例如 A2:A200

FILTER(A2:A13,COUNTIFS(A2:A13, A2:A13)>1)
==>先把有其他欄位跟自己一樣的過濾出來

加上UNIQUE,把重複去除

加上TRANSPOSE 把陳列方式轉向

這時你就可以一排填寫一頁重複資訊了

如果完全沒有重複資料,會顯示#CALC,不喜歡可以改成如下
=TRANSPOSE(UNIQUE(FILTER(A2:A13,COUNTIFS(A2:A13, A2:A13)>1,"無重複資料")))

但這樣的作法很吃OFFICE版本,只有在365或2021年以後的版本才可以使用
FILTER版本限制

Microsoft 365 Excel Mac 版 Microsoft 365 Excel Excel 網頁版 Excel 2021 Mac 版 Excel 2021 iPad 版 Excel iPhone 版 Excel Android 平板電腦版 Excel Android 手機版 Excel 小於
snare

方法對了,可是結果相反了,樓主要找不重覆,移除重覆,1個檔案有500個工作表。

2021-12-25 8:21
Yaude Huang

不重複改成>=1即可,這要每項只會保留一樣,如果是=1就是會完全剃除超過兩項以上的

2021-12-25 9:10
我投VBA一票
因為我自己也是寫VBA處理類似問題的
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?