彰化一整天的論壇

 找回密碼
 立即註冊
樓主: imingho

在Excel中快速比對兩份資料的差異性

[複製鏈接]
 樓主| 發表於 2013-10-22 14:00:50 | 顯示全部樓層
nemo034 發表於 2013-10-22 11:25
請教大大 我用的是您給的2007的檔可是執行後會這畫面

您到這裡下載Excel 2003版本試看看.

快速比較兩份資料的差異性_順序相同
http://discuz.bestdaylong.com/fo ... 30959&fromuid=2

回復 支持 反對

使用道具 舉報

發表於 2013-10-22 16:45:53 | 顯示全部樓層
因為我的資料A、B都是2007檔!
貼過去2003時常當機及顯示太多格式....
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2013-10-22 17:03:07 | 顯示全部樓層
nemo034 發表於 2013-10-22 16:45
因為我的資料A、B都是2007檔!
貼過去2003時常當機及顯示太多格式....

您好,
我加入一個Excel2007的版本.

在Excel中快速比對兩份資料的差異性(Excel 2007)
http://discuz.bestdaylong.com/fo ... 31012&fromuid=2

回復 支持 反對

使用道具 舉報

發表於 2013-12-5 09:36:02 | 顯示全部樓層
本帖最後由 diablo52 於 2013-12-5 09:50 編輯

版大您好,
最近於工作上遇到了兩個excel表需要互相比對的問題,
於網路上尋找解決辦法時無意間逛到您的Blog和論壇。

也下載了您提供的compareab 檔案

功能說明:快速比較兩份資料的差異性
(以一列為單位比對全部)

有一些問題想請教您假設我的資料表A是
Snap1.png


資料表B是
Snap2.png

其中11111111P與金額完全相同,資料表A的090000000P金額是1000,在資料表B是1500,
資料表A的222222222P與金額3000是多出來的,在資料表B內是沒有的,
資料表B的333333333P與金額4000是多出來的,在資料表A內是沒有的,

我想要比對出來的結果像這樣


Snap5.png

完全相同就捨棄,金額部分相同就列出,不同金額放在同一列內,若是只有單邊資料表有也列出

這樣子的話似乎使用版大的檔案,有一個工作表叫資料表 A與B都缺少的 可以達到類似的答案。


在這裡想請教版大的問題是

1.因為有看到版大說,巨集內的VBA碼並未鎖,所以小弟有進去看了一下,不曉得有沒有版權的問題能不能自行修改

2.如果可以修改的話,不曉得版大方不方便說明關鍵點在哪一段嗎,我想修改成像圖3那樣的輸出格式


是這一段嗎 在Shee7的部分

  If j > count_b Then 'a的資料在b找不到
           a = a + 1
           For k = 1 To n
                temp = Sheet2.Cells(i, k)
                Sheet5.Cells(a, k) = temp
                Sheet7.Cells(a, k + n + 1) = temp

                change_cell_format Sheet5.Cells(a, k + n + 1), Sheet2.Cells(i, k)

                change_cell_format Sheet7.Cells(a, k + n + 1), Sheet2.Cells(i, k)
                '將不一樣的資料變成紅色
                Sheet2.Cells(i, k).Font.Color = vbRed
            Next
        End If


在此還是先謝謝版大做出這巨集幫助大家,謝謝您。

測試A.xlsx (7.55 KB, 下載次數: 79)

測試結果C.xlsx

9.57 KB, 下載次數: 78

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2013-12-5 09:50:14 | 顯示全部樓層
本帖最後由 imingho 於 2013-12-5 10:11 編輯
diablo52 發表於 2013-12-5 09:36
版大您好,
最近於工作上遇到了兩個excel表需要互相比對的問題,
於網路上尋找解決辦法時無意間逛到您的Blo ...

您好,      您可以拿去修改成自己使用,只要不做商業用途都可以.
您的問題,我試過再跟您說.
回復 支持 反對

使用道具 舉報

發表於 2013-12-5 15:05:07 | 顯示全部樓層
謝謝版大,另我有看到版大先前回覆使用SQL指令的EXCEL
,想把left join改成 full join結果好像不行。

我再試試看能不能用改指令去把答案找出來
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2013-12-5 16:20:15 | 顯示全部樓層
diablo52 發表於 2013-12-5 15:05
謝謝版大,另我有看到版大先前回覆使用SQL指令的EXCEL
,想把left join改成 full join結果好像不行。

您好,
     用left join 是沒錯的,但是您要先把資料A跟資料B變成一個資料表,再各別left Join 資料a,跟資料b,
因為Excel的join 沒辦法一次用兩個join ,所以要把每次的查詢變成子查詢再查一次,底下是我用的sql語法
  1. select d.門市,d.金額,b.金額  from (select c.*,a.金額
  2. from (select 門市 from [資料A$]  union select 門市 from [資料B$]) as c
  3. left  join [資料A$] as a  on a.門市=c.門市 ) as d
  4. left  join [資料B$] as b  on d.門市=b.門市
  5. where d.金額<>b.金額 or d.金額 is null or b.金額 is null
複製代碼
檔案名稱:sql_subtable.xls

Sql_subtable.xls

45.5 KB, 下載次數: 3

售價: 2 金錢  [記錄]

解答

回復 支持 反對

使用道具 舉報

發表於 2013-12-5 19:57:48 | 顯示全部樓層
imingho 發表於 2013-12-5 16:20
您好,
     用left join 是沒錯的,但是您要先把資料A跟資料B變成一個資料表,再各別left Join 資料a,跟資 ...

謝謝版大回覆,我在SQL測試時隱約有要先合成一張表來做的想法,只是還不是很明確,

版大這麼快就測出來,依據您的想法,我在SQL測的指令改成如下

  1. With inventory
  2. as
  3. (
  4. select Num from Ass
  5. union
  6. select Num from Bcc
  7. )
  8. select d.Num,d.Price,b.Price  from (
  9. select inventory.Num,a.Price from inventory
  10. left join Ass as a on inventory.Num=a.Num ) as d
  11. left join Bcc as b on d.Num=b.Num  
  12. where d.Price !=b.Price or d.Price is null or b.Price is null
複製代碼


雖然答案有了,不過似乎還是落落長 =_=,我想我應該是把指令複雜化了 = =,SQL要學的還很多啊XD

在此先謝謝版大,讓我多學到一些東西
回復 支持 反對

使用道具 舉報

發表於 2013-12-21 12:00:02 | 顯示全部樓層
非常好用,謝謝
回復 支持 反對

使用道具 舉報

發表於 2013-12-23 16:26:43 | 顯示全部樓層
Diablo52大大
可以參考此網站
http://www.1keydata.com/tw/sql/sqlselect.html,希望對你有幫助
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2018-4-25 22:16 , Processed in 0.047063 second(s), 13 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表