跳到主要內容跳到頁尾

ISURL 與 ISEMAIL:用資料驗證擋掉亂填的網址和 Email

4 分鐘閱讀Lv.2 中級摘要與日期

ISURL 判斷是不是網址、ISEMAIL 判斷是不是 Email,兩個都只回 TRUE 或 FALSE。搭配資料驗證的自訂公式,可以把格式不對、重複、或只在特定欄位選了 Email 才要填的輸入擋在輸入當下,也能數出舊資料裡有幾筆有問題。

發布 更新

文章目錄

今天來聊 ISURL 跟 ISEMAIL,一個判斷值是不是網址,一個判斷是不是 Email,結果只有 TRUE 或 FALSE。

我會用到它們,幾乎都是在「名單別人也會填」的時候:店員登記會員、同事補門市資料,過一陣子打開一看,Email 欄有人只打了 tea@,網址欄寫著「請見官網」。這篇就是教你用資料驗證,在輸入的當下把這些擋下來。

怎麼選

想判斷的值用哪個備註
網址ISURL看格式,不會連過去確認網頁存在
EmailISEMAIL看格式,不會確認信箱真的存在
同時檢查多件事AND、OR 包起來重複、空白、依其他欄位決定要不要檢查
其他判斷(文字、數字、錯誤)資訊函式參考ISEMAIL 在那篇也有簡短介紹

兩個判斷函式

ISURL

判斷值是不是有效的網址。

語法:

  • 值:要判斷的儲存格或文字。

假設 C2 放著 https://www.example.com/menu:

Google 試算表公式
fx

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 格式。

語法:

Google 試算表公式
fx

B2 是不是 Email

=ISEMAIL(B2)

B2 是 tea@example.com 會得到 TRUE,tea@(沒有網域)或 tea.example.com(沒有 @)都是 FALSE。

跟 ISURL 一樣,它只看格式。信箱真的存在不存在,只有寄出去才知道。

兩個函式拿到數字或空白儲存格,都是 FALSE。文字前後多了空白時,ISEMAIL 會回 FALSE(要先用 TRIM 清掉),ISURL 則仍然是 TRUE。貼上的資料我習慣先用 TRIM 清一遍再判斷。

擋在輸入的當下

資料驗證的基本設定在 資料驗證實戰 講過了,這邊只講條件那一格要填什麼。

選取要管的範圍,例如 B2:B200,打開「資料」>「資料驗證」,新增規則,條件選「自訂公式為」,填:

Google 試算表公式
fx

B 欄只接受 Email 格式

=ISEMAIL(B2)

公式要寫成範圍左上角那一格 B2,其他格會自己跟著變成 B3、B4⋯⋯。網址欄 C2:C200 同理,填 。

這個範例的資料長這樣,先看每一格公式會算出什麼:

B 欄 Email:

列B 欄
2tea@example.comTRUE
3lin@shop.com.twTRUE
4tea@FALSE
5tea.example.comFALSE
6order@drink.twTRUE

C 欄網址:

列C 欄
2https://www.example.com/menuTRUE
3https://shop.example.twTRUE
4請見官網FALSE
5not a urlFALSE
6http://example.com/a?b=1TRUE

規則的邏輯就是:公式算出 TRUE 才放行,FALSE 的話依你選的處理方式,拒絕輸入或顯示警告。這兩種怎麼選,資料驗證實戰 有講。Email 我選「拒絕輸入」,因為格式只有一種對。網址欄如果會填內部網域或較新的 TLD,建議改選「顯示警告」,避免有效的網址被擋掉。

再加一個條件:不能重複

會員的 Email 通常一個人一筆。把 COUNTIF 用 AND 接在後面:

Google 試算表公式
fx

Email 格式要對,而且整欄只能出現一次

=AND(ISEMAIL(B2), COUNTIF($B$2:$B$200, B2)=1)

COUNTIF 的部分跟之前擋訂單編號重複是同一個寫法,輸入的那一格自己也算一次,所以出現 1 次才是沒人用過。如果 B2 是 tea@example.com,B7 又有人打了同一個,B7 會算出 FALSE。

再加一個條件:看別的欄位才檢查

有些表是「通知方式」選 Email 才需要 Email,選電話就可以空著。假設 D 欄是通知方式,有「Email」跟「電話」兩種:

Google 試算表公式
fx

通知方式不是 Email 就放行,是的話 B 欄要是 Email

=OR($D2<>"Email", ISEMAIL(B2))

D2 是「電話」時,$D2<>"Email" 就是 TRUE,B2 空著也沒關係;D2 是「Email」而 B2 填了 tea@,兩邊都是 FALSE,被擋下。$D2 前面的 $ 把欄鎖住,列還是會跟著往下變。

已經髒掉的資料

資料驗證只管之後輸入的格子,舊資料和貼上來的資料它不一定擋得到。要知道現在有幾筆不合格,在旁邊補一欄(我放在 E 欄) 往下複製,再數 FALSE 的個數:

Google 試算表公式
fx

B2:B6 裡不合格的 Email 數量

=COUNTIF(E2:E6, FALSE)

E2:E6 就是那欄判斷結果,這份資料得到 2。要把不合格的挑出來清理,在 E 欄篩選 FALSE 就行了,這個動作比一格一格看快很多。

我自己的習慣是兩件事一起做:新輸入的靠資料驗證擋,舊的用一欄判斷結果掃過一遍。

試著在你的名單旁邊補一欄 ISEMAIL,看看有幾筆是 FALSE 吧!

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。