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
留言分享你的想法!
喜特先生 Mr. Sheet -avatar-img
發文者
2023/11/06
trimWhitespace():裁切多餘空白提及了這篇文章,趕快過去看看吧!
avatar-img
喜特先生官方沙龍
18.2K會員
152內容數
簡潔,快速,有效, 讓你的日常生活、工作生產力大提升! ___ 快按「加入」,馬上追蹤所有喜特先生的更新,有 Google 試算表教學、Google Apps Script 的研究、數據分析課程的開箱,還有 Google 試算表疑難雜症的解題分享唷!💪
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目敘述 題目會給我們一個輸入整數陣列arr,和一個初始化的刪除次數k? 我們可以任意選擇從arr中刪除k個陣列元素,請問最後留下來的數字,最少會有幾個不同的數字? 註: 最後不同的數字越少越好。 題目的原文敘述 測試範例 Example 1: Input: arr = [5,5
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
Thumbnail
題目 : 83. Remove Duplicates from Sorted List
Thumbnail
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,
Thumbnail
題目敘述 題目會給我們一個整數陣列,裡面包含各種正整數,每回合可以消去兩個相同的數字,或者消去三個相同的數字。問最少需要幾次消去,才能讓陣列為空? 如果無解,則返回-1 詳細的題目可在這裡看到 測試範例 Example 1: Input: nums = [2,3,3,2,2,4,2,3,
Thumbnail
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
成對的數字裡出現一個落單的邊緣人,我有六種方法找出它,你會幾種呢?
Thumbnail
成對的數字裡出現一個落單的邊緣人,我有六種方法找出它,你會幾種呢?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News