使用說明
兩份名單比對,最常見的是報名對簽到、應繳對已繳、應交對已交:名單 A 是應該有的人,名單 B 是實際到了、繳了、交了的人。從 Excel 整列貼上兩份名單,選好用哪一欄比對,就會列出誰還沒到、誰不在名單上,另外產生一欄跟名單 A 一列對一列的「已到/未到」,貼回原表就對齊,不用寫 VLOOKUP。
怎麼用
- 在 Excel 選取名單 A(例如報名表)的整列,按 Ctrl+C 複製,貼到「名單 A」。好幾欄一起貼沒關係,第一列是欄名也可以。
- 名單 B(例如簽到表或繳費明細)一樣貼到「名單 B」。兩份的欄位不必一樣,例如報名表有姓名、單位、手機,簽到表只有姓名。
- 確認「用哪一欄比對」:兩份都有身分證字號、員編、Email 或手機,而且名單裡重複的值不比姓名多時,預設依這個順序用它們,否則用姓名。市話常是整間公司共用的總機,不會自動拿來比對;全家共用一支手機的名單也會改用姓名。同名的人多時,勾「再加一欄一起比對」加上電話或員編。
- 看結果:只在 A 是還沒到的人,只在 B 是不在名單上的人,待確認是要自己看一眼的。每一頁都可以複製原本的整列貼回 Excel。
- 要在原表標記誰到了,切到「逐列標記」,按「複製逐列標記」,回到 Excel 點選名單 A 旁邊的空白欄、跟名單 A 第 1 列同一列的格子,按 Ctrl+V。
比對前會先忽略哪些差異
名單比對最常出錯的地方,不是公式寫錯,而是兩份名單的字「看起來一樣、其實不一樣」。下表前八組在 Excel 的 VLOOKUP 或 COUNTIF 都會被當成不同的人,這個工具預設把它們當成相同;接著三組可能是同一位、也可能不是,列為待確認;最後兩組刻意不算相同:同一支總機的不同分機,以及兩邊都寫「無」(VLOOKUP 會把兩個「無」對在一起)。結果旁邊都會列出比對用的字,方便你檢查。
| 差異 | 名單 A | 名單 B | 比對用的字(A) | 結果 |
|---|---|---|---|---|
| 姓名中間多一個空白 | 王 小明 | 王小明 | 王小明 | 已到 |
| 姓名中間是全形空白 | 王 小明 | 王小明 | 王小明 | 已到 |
| 後面夾著看不見的零寬空白 | 王小明 | 王小明 | 王小明 | 已到 |
| 臺與台 | 臺北分公司 | 台北分公司 | 台北分公司 | 已到 |
| 全形的員編 | A001 | a001 | a001 | 已到 |
| 身分證大小寫 | a123456789 | A123456789 | a123456789 | 已到 |
| 電話有連字號 | 0912-345-678 | 0912345678 | 0912345678 | 已到 |
| 電話寫成 +886 | +886 912 345 678 | 0912345678 | 0912345678 | 已到 |
| 姓名後面有括號註記 | 王小明(會計) | 王小明 | 王小明(會計) | 待確認 |
| 姓名後面有稱謂 | 王小明先生 | 王小明 | 王小明先生 | 待確認 |
| 英文名字少一個空白 | Li Wei | Liwei | li wei | 待確認 |
| 同一支總機、不同分機 | 02-2345-6789#101 | 02-2345-6789#102 | 0223456789#101 | 未到 |
| 兩邊都寫「無」 | 無 | 無 | (不比對) | 比對欄空白 |
每一項都可以在「比對時忽略這些差異」關掉。電話只比數字只套用在比對方式是「電話」的欄,+886 開頭會換回 0,被 Excel 吃掉開頭 0 的手機號碼(912345678)也會補回來;分機會保留,02-2345-6789#101 和 #102 是不同的人。
比對欄寫「無」「-」「N/A」「沒有」「未提供」這類佔位字,或電話欄裡沒有數字的列,一律算「比對欄空白」:不會跟另一份名單同樣寫「無」的人對在一起,合併去重時也照樣保留。英文姓名字與字之間的空白會保留一個,Li Wei 和 Liwei 只列為待確認。
同名的人怎麼算
名單 A 有兩位王小明、名單 B 只有一位時,只知道兩位裡有一位到了,不知道是哪一位。很多比對方法(包括只看「有沒有出現過」的 COUNTIF)會回報兩位都到了,櫃台就漏追一個人。
這個工具依次數比對:名單 A 同一個名字出現幾次,名單 B 就要出現幾次才算都到。只對到一部分時標成待確認,並寫明「同名 2 筆,只對到 1 筆」,兩位都不算已到。要分開同名的人,就加一欄電話或員編一起比對。
名單 B 比名單 A 多(同一個人簽到兩次、繳費兩次)時,名單 A 的人算已到,多出來的那一列不會出現在「只在 B」,而是列在「名單內重複」。
疑似相同不會算成已到
「王小明(會計)」和「王小明」、「王小明先生」和「王小明」,去掉括號註記或稱謂之後才相同。它們很可能是同一位,但也可能是不同的人,所以只列在待確認,不自動算成已到,逐列標記也寫「待確認」。確認之後在 Excel 把它改掉就好。
把結果貼回 Excel
「逐列標記」那一欄跟名單 A 一列對一列:欄名列寫「比對結果」,空白列留空白,比對欄空著的列寫「比對欄空白」,其他寫已到、未到或待確認。貼在原表旁邊之後,用 Excel 的篩選就能只看未到或待確認的人。已到/未到可以換成已繳/未繳、已交/未交或有/沒有。
其他分頁複製的都是原本的整列,欄位順序不變;名單有欄名列時,複製的第一列就是欄名,貼到新的工作表剛好是一張表。
合併兩份名單並去除重複
「合併去重」把名單 A、B 接在一起,依比對欄拿掉重複的列,保留第一次出現的整列(先名單 A,再名單 B)。兩份都有欄名時,名單 B 的欄會放到名單 A 同名的欄,名單 A 沒有的欄接在後面。結果可以複製貼回 Excel,或下載具有 BOM 的 UTF-8 CSV,Excel 直接打開中文不會變亂碼。去掉括號註記才相同的列不會被合併,要自己看一眼。
用 Excel 公式比對的做法
不想離開 Excel 的話,在名單 A 旁邊的欄用 COUNTIF 也能標出已到、未到。假設名單 A 的姓名在 A 欄、從第 2 列開始,名單 B 在名為「簽到」的工作表的 A 欄:
=IF(COUNTIF(簽到!A:A,A2)>0,"已到","未到")
要依次數比對同名的人,把條件改成「名單 B 出現的次數,不少於這個名字在名單 A 到這一列為止出現的次數」:
=IF(COUNTIF(簽到!A:A,A2)>=COUNTIF($A$2:A2,A2),"已到","未到")
這樣名單 B 只有一位王小明時,第二位會顯示未到,但公式不知道到的是哪一位,只是依順序算。另外要注意:COUNTIF 本來就不分大小寫,其他差異要先整理過。TRIM 只去掉頭尾的空白、把中間連續的空白縮成一個,「王 小明」還是「王 小明」;網頁複製來的不斷行空白(CHAR(160))與零寬空白,TRIM 也去不掉。這些就是上面那張表要處理的差異。
名單會不會被上傳
不會。貼上的名單只在你的瀏覽器裡比對,不會送到任何伺服器、不寫進網址、不存在瀏覽器裡,統計只記錄按了哪個按鈕與列數,不記錄名單內容。下載的 CSV 也是在瀏覽器裡產生的。