removeDuplicates():移除重複資料

更新於 發佈於 閱讀時間約 5 分鐘

之前在三招移除重複資料的教學,介紹了用三種方式來把工作表上的重複資料移除,各自有各自適合的場景,其實還有一招是 Apps Script 上可以操作的,就是今天要介紹的 removeDuplicates() 這個方法(method)。

removeDuplicates() 就是「移除重複內容功能」的 Apps Script 版,會刪除指定範圍內,任何跟前一列重複的列,隱藏列、或是篩選器篩出來的值如果有重複也會被移除。至於怎樣算是重複,Apps Script 官方文件的定義是「就算大小寫不同、格式不同、算式或函式不同,只要值相同就算是重複」。

所以按照這個定義,我來舉一些會被視為重複值的例子給你參考:

  • Abc、abc、aBc
  • 3 + 3 < 6、4 + 4 < 8、10 + 10 > 20(因為結果都是 FALSE
  • 紅底黑字的 123 、綠底白字的 123




使用場景

當然就是清理數據的時候了!我喜歡在這種腳本的開頭、或是末端加入 removeDuplicates(),大概像是這樣:

function dataCleaning() {

// 宣告變數;
​range.removeDuplicates();
// 清理步驟一;
// 清理步驟二;
// 清理步驟三;
​range.removeDuplicates();

}

以上面的例子來看,腳本會先在進入清理步驟之前把眼前的範圍清理重複資料,然後跑完所有的清理步驟後、再移除重複資料,這麼一來就可以確保每筆資料都是不重複的了。

我也喜歡把它跟可以裁切多餘空白的 trimWhitespace() 方法一起用,像這樣:

function dataCleaning() {

// 宣告變數;
range.trimWhitespace();
​range.removeDuplicates();
// 後續步驟...

}

最後要注意 removeDuplicates() 只能移除靜態的資料,沒辦法移除某些函式輸出的動態資料,像是 QUERYIMPORTRANGEGOOGLEFINANCE 等函式,這時會建議搭配 UNIQUE 或是其他可以整理陣列的函式。

如果你需要複習上面的這些函式,傳送門這邊請:




語法講解

removeDuplicates()

這個方法(method)是在 range 的類別(class)底下,要先定義範圍才可以用這個方法來去除重複資料。語法相當簡單,在範圍後面寫 removeDuplicates() 就可以了。舉例:

function dataCleaning() {

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");

range.removeDuplicates();

}

這個就會對目前正在編輯的工作表中,A 欄到 E 欄的範圍裡移除重複的資料了。


removeDuplicates([要分析的第 N 欄位])

就像「移除重複內容」功能,你還可以指定要分析的欄是什麼:

以這圖來說,目前勾選的就是指定分析 A、C 跟 E 欄位是否有重複資料。

以這圖來說,目前勾選的就是指定分析 A、C 跟 E 欄位是否有重複資料。

語法也很簡單,只要在方法的括號裡面輸入方括號與欄位的索引數字就可以,像是這樣:

function dataCleaning() {

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");

// 分析指定範圍的第一個欄位
range.removeDuplicates([1]);

}

我在這邊寫的是 [1],代表要讓 removeDuplicates() 方法分析指定範圍(A:E)內的第一欄,也就是 A 欄了。

如果你有兩個以上的欄位要分析,也當然沒問題,輸入的數字用逗號隔開就可以了。像是這樣:


function dataCleaning() {

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const range = sheet.getRange("A:E");

// 分析指定範圍的第一個、第三個、第五個欄位
range.removeDuplicates([1, 3, 5]);

}

這邊寫的是 [1, 3, 5],就是指定範圍的第一個、第三個跟第五個欄位,也就是對應到指定範圍的 A 欄、C 欄跟 E 欄了。

如果你的指定範圍不是從 A 欄開始,記得小心算一下,免得分析到錯的欄位喔。




移除重複資料的 Apps Script 是不是沒有你想像中來得那麼難呢?希望經過我的解釋,有讓你覺得比較安心。


如果你喜歡這次的文章,歡迎你透過這些方法支持我:

  • 按下愛心、按下儲存
  • 留言告訴我你的想法
  • 加入喜特先生的官方沙龍,即時看到我發布的教學
  • 付費訂閱喜特先生的官方沙龍,加入每月小額訂閱方案
  • 追蹤喜特先生的 Facebook
  • 這邊小額贊助我的創作!

想要看更多文章的話,歡迎來到我的 Notion 頁面找找有沒有你需要的資源喔!

我是喜特先生,Mr. Sheet,我們下個教學見!



avatar-img
14.5K會員
148內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
本篇參與的主題活動
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
先前麥克買了在預算及性能方面都十分複合需求的NXTPAPER 11平板,但拿到辦公室使用後便發現因為時不時有簡報需求,主機本身不支援有線視訊輸出實在是非常不方便,因又開始尋找新歡。最終麥克選擇了算是還滿熟悉的品牌小米旗下的小米平板6,以下為麥克這一個月下來的使用心得。
從預計的十月底出貨經過重重波折,Pubu自家開發的10寸彩色閱讀器Pubook Pro終於是送到第一批集資者手中了。究竟這台閱讀器有沒有本事撼動目前的電子紙閱讀器市場?有達到集資時承諾的各項功能嗎?且讓身為首批集資者之一的麥克跟大家談談收到主機後使用數天的感想。
Steam Deck 迎來大改版,最重要的更新就是換成 OLED 螢幕。使用 OLED 螢幕帶來更好看的顏色,大小還小幅提升到 7.4 吋。關係續航力的電池也從 40 瓦小時升級到 50 瓦小時, 3A 大作都可以多玩一小時呢!這麼香的更新,怎麼不給他買下去呢 😄
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
這系列會以實際的資料來教學並練習,這篇資料取自Tableau的 Superstores 裡的Orders工作表,我們在做實際的數據分析以前,想要先來了解自己的資料。第一眼望去,總共有9994筆內容(+1筆欄位名),第一個問題來了,資料筆數會等於總訂單數嗎?更精確地說,到底有多少不重複的訂單?
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
本文介紹瞭如何使用BAT腳本和CMD指令來自動執行檔案和空目錄的刪除作業。通過設定各種參數和指令,可以快速、有效地執行定期刪除作業,節省硬體空間並提升工作效率。
Thumbnail
Visual Basic for Applications(VBA)是一種功能強大的程式語言,廣泛用於自動化 Microsoft Office 應用程式中的重複性任務。在這篇教學文章中,我們將介紹如何使用 VBA 來新增、刪除和移動檔案。
Thumbnail
資料中如果有特定的內容需要移除,並且是有一定的規則,EXCEL會蠻多種解決方案。 用一個資料進行舉例: 這份資料中每個課程後面都有一個括號備註日期。 如何把括號中的日期快速刪除,分享幾種常見的方法 取代法 剖析法 CTRL+E法 函數法 【💡取代法】 選取資料範圍
Thumbnail
如何運用函數來讓資料產生空白列,而且當輸入多少數字,就會插入多少空白列。 <插入空白列> E5=TOCOL(EXPAND(B5:B9,,C3+1,"")) 📝函數說明 ✍🏾EXPAND陣列擴展函數 函數說明=EXPAND(範圍,展開的列,展開的欄,要展開的內容)
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
這系列會以實際的資料來教學並練習,這篇資料取自Tableau的 Superstores 裡的Orders工作表,我們在做實際的數據分析以前,想要先來了解自己的資料。第一眼望去,總共有9994筆內容(+1筆欄位名),第一個問題來了,資料筆數會等於總訂單數嗎?更精確地說,到底有多少不重複的訂單?
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
本文介紹瞭如何使用BAT腳本和CMD指令來自動執行檔案和空目錄的刪除作業。通過設定各種參數和指令,可以快速、有效地執行定期刪除作業,節省硬體空間並提升工作效率。
Thumbnail
Visual Basic for Applications(VBA)是一種功能強大的程式語言,廣泛用於自動化 Microsoft Office 應用程式中的重複性任務。在這篇教學文章中,我們將介紹如何使用 VBA 來新增、刪除和移動檔案。
Thumbnail
資料中如果有特定的內容需要移除,並且是有一定的規則,EXCEL會蠻多種解決方案。 用一個資料進行舉例: 這份資料中每個課程後面都有一個括號備註日期。 如何把括號中的日期快速刪除,分享幾種常見的方法 取代法 剖析法 CTRL+E法 函數法 【💡取代法】 選取資料範圍
Thumbnail
如何運用函數來讓資料產生空白列,而且當輸入多少數字,就會插入多少空白列。 <插入空白列> E5=TOCOL(EXPAND(B5:B9,,C3+1,"")) 📝函數說明 ✍🏾EXPAND陣列擴展函數 函數說明=EXPAND(範圍,展開的列,展開的欄,要展開的內容)
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目敘述 題目會給定一個pandas DataFrame作為輸入,要求我們以原有的資料表email欄位為比較基準,刪除重複的列 data rows,只保留最早第一次出現的。 題目的原文敘述 Example 1: Input: +-------------+---------+--------
Thumbnail
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,