今天來聊 ISURL 跟 ISEMAIL,一個判斷值是不是網址,一個判斷是不是 Email,結果只有 TRUE 或 FALSE。
我會用到它們,幾乎都是在「名單別人也會填」的時候:店員登記會員、同事補門市資料,過一陣子打開一看,Email 欄有人只打了 tea@,網址欄寫著「請見官網」。這篇就是教你用資料驗證,在輸入的當下把這些擋下來。
怎麼選
| 想判斷的值 | 用哪個 | 備註 |
|---|---|---|
| 網址 | ISURL | 看格式,不會連過去確認網頁存在 |
ISEMAIL | 看格式,不會確認信箱真的存在 | |
| 同時檢查多件事 | AND、OR 包起來 | 重複、空白、依其他欄位決定要不要檢查 |
| 其他判斷(文字、數字、錯誤) | 資訊函式參考 | ISEMAIL 在那篇也有簡短介紹 |
兩個判斷函式
ISURL
判斷值是不是有效的網址。
語法:
- 值:要判斷的儲存格或文字。
假設 C2 放著 https://www.example.com/menu:
C2 是不是網址
=ISURL(C2)會得到 TRUE。C 欄如果寫的是「請見官網」,結果就是 FALSE;http://example.com/a?b=1 這種帶參數的網址是 TRUE。
要注意的是,它只看長得像不像網址,不會真的連過去。網址打錯一個字母但格式沒問題,一樣是 TRUE。沒有 https:// 開頭也算:example.com、www.example.com 都是 TRUE,所以不能用 ISURL 判斷「有沒有帶通訊協定」。
另外它有兩個限制:網址的頂級網域(TLD,例如 .com、.tw)如果不在 Google 認得的清單裡,會是 FALSE;通訊協定也只認 http、https、ftp、mailto 等幾種常見的。公司內部網域或很新的 TLD,有可能被誤判成 FALSE。
ISEMAIL
判斷值是不是有效的 Email 格式。
語法:
B2 是不是 Email
=ISEMAIL(B2)B2 是 tea@example.com 會得到 TRUE,tea@(沒有網域)或 tea.example.com(沒有 @)都是 FALSE。
跟 ISURL 一樣,它只看格式。信箱真的存在不存在,只有寄出去才知道。
兩個函式拿到數字或空白儲存格,都是 FALSE。文字前後多了空白時,ISEMAIL 會回 FALSE(要先用 TRIM 清掉),ISURL 則仍然是 TRUE。貼上的資料我習慣先用 TRIM 清一遍再判斷。
擋在輸入的當下
資料驗證的基本設定在 資料驗證實戰 講過了,這邊只講條件那一格要填什麼。
選取要管的範圍,例如 B2:B200,打開「資料」>「資料驗證」,新增規則,條件選「自訂公式為」,填:
B 欄只接受 Email 格式
=ISEMAIL(B2)公式要寫成範圍左上角那一格 B2,其他格會自己跟著變成 B3、B4⋯⋯。網址欄 C2:C200 同理,填 。
這個範例的資料長這樣,先看每一格公式會算出什麼:
B 欄 Email:
| 列 | B 欄 | |
|---|---|---|
| 2 | tea@example.com | TRUE |
| 3 | lin@shop.com.tw | TRUE |
| 4 | tea@ | FALSE |
| 5 | tea.example.com | FALSE |
| 6 | order@drink.tw | TRUE |
C 欄網址:
| 列 | C 欄 | |
|---|---|---|
| 2 | https://www.example.com/menu | TRUE |
| 3 | https://shop.example.tw | TRUE |
| 4 | 請見官網 | FALSE |
| 5 | not a url | FALSE |
| 6 | http://example.com/a?b=1 | TRUE |
規則的邏輯就是:公式算出 TRUE 才放行,FALSE 的話依你選的處理方式,拒絕輸入或顯示警告。這兩種怎麼選,資料驗證實戰 有講。Email 我選「拒絕輸入」,因為格式只有一種對。網址欄如果會填內部網域或較新的 TLD,建議改選「顯示警告」,避免有效的網址被擋掉。
再加一個條件:不能重複
會員的 Email 通常一個人一筆。把 COUNTIF 用 AND 接在後面:
Email 格式要對,而且整欄只能出現一次
=AND(ISEMAIL(B2), COUNTIF($B$2:$B$200, B2)=1)COUNTIF 的部分跟之前擋訂單編號重複是同一個寫法,輸入的那一格自己也算一次,所以出現 1 次才是沒人用過。如果 B2 是 tea@example.com,B7 又有人打了同一個,B7 會算出 FALSE。
再加一個條件:看別的欄位才檢查
有些表是「通知方式」選 Email 才需要 Email,選電話就可以空著。假設 D 欄是通知方式,有「Email」跟「電話」兩種:
通知方式不是 Email 就放行,是的話 B 欄要是 Email
=OR($D2<>"Email", ISEMAIL(B2))D2 是「電話」時,$D2<>"Email" 就是 TRUE,B2 空著也沒關係;D2 是「Email」而 B2 填了 tea@,兩邊都是 FALSE,被擋下。$D2 前面的 $ 把欄鎖住,列還是會跟著往下變。
已經髒掉的資料
資料驗證只管之後輸入的格子,舊資料和貼上來的資料它不一定擋得到。要知道現在有幾筆不合格,在旁邊補一欄(我放在 E 欄) 往下複製,再數 FALSE 的個數:
B2:B6 裡不合格的 Email 數量
=COUNTIF(E2:E6, FALSE)E2:E6 就是那欄判斷結果,這份資料得到 2。要把不合格的挑出來清理,在 E 欄篩選 FALSE 就行了,這個動作比一格一格看快很多。
我自己的習慣是兩件事一起做:新輸入的靠資料驗證擋,舊的用一欄判斷結果掃過一遍。
試著在你的名單旁邊補一欄 ISEMAIL,看看有幾筆是 FALSE 吧!
接下來可以
相關文章
查看所有文章資料驗證實戰:把訂單登記表的輸入錯誤擋在門口
以手搖飲門市的訂單登記表為例,設定下拉選單(含來自範圍與晶片樣式)、數字與日期範圍,再用 COUNTIF 擋重複的訂單編號、REGEXMATCH 擋格式不對的手機號碼,並說明拒絕輸入與顯示警告該怎麼選。
資訊函式參考:ISTEXT、ISNA、ISERR、TYPE、CELL、ERROR.TYPE、ADDRESS 與 SHEETS
整理 Google 試算表的資訊類函式:ISTEXT、ISNONTEXT、ISLOGICAL、ISNA、ISERR、ISDATE、ISEMAIL、ISFORMULA、ISREF 的判斷方式,TYPE 與 ERROR.TYPE 的代碼,以及 CELL、ADDRESS、SHEETS、NA 的語法與範例。
台灣身分證格式與檢查碼:用六個步驟看懂校驗公式
用純合成資料練習清理、REGEX 格式檢查、英文字母轉碼、加權和與 MOD 尾碼核對。只檢查國民身分證樣式與檢查碼,不查詢身分或核發狀態。
留言討論
共 0 則留言
