PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやデータ分析などもやっています。

【Googleスプレッドシート】完全一致した行の重複を削除する方法

行自体の重複を削除する方法

f:id:PeaceJet:20170826160539p:plain
※例によって個人情報の生成は疑似個人情報データ生成サービスを使用させていただきました。

Googleスプレッドシートで、データを管理している方は多いかと思いますが。
上記のように重複している行自体を削除したいという需要は結構あるのではないかと考えています。

しかし、なかなかネットで探してもセルの重複削除自体は出てくるのですが・・・
行そのものが完全一致したものの重複を除く方法がありませんでした。

そこで、「Google Apps script duplicate delete」などと検索したところgoogleの開発者向けドキュメントサイトで見つかりましたので紹介します。

解説

  1. 使用されているセルをgetDataRangeで配列に格納(2次元配列)
  2. 配列から一つずつ取り出し、それをdata.joinして文字列とします。
  3. newDataという新しい配列を用意し、newDataの配列要素をjoinして文字列とし、data.joinと比較します。
  4. データがなければ配列に追加し、あればスルーするという動作を繰り返すことで、ユニークなデータを保持します。
  5. 最後に、シート自体をクリアして貼り付けます。
function removeDuplicates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  //配列比較用
  var newData = new Array();
  for(i in data){
    //2次元配列の要素(配列)をrowに代入
    var row = data[i];
    var duplicate = false;
    for(j in newData){
      if(row.join() == newData[j].join()){
        //重複していた場合、true
        duplicate = true;
      }
    }
    //もしも、newDataの中にデータがなければ(duplicate=false)なら、rowを追加。
    if(!duplicate){
      newData.push(row);
    }
  }
  sheet.clearContents();
  sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

感想

対象のデータ(配列)をjoinして文字列にし、比較するというアイデアは自分になかったので新鮮でした。

参考:
Tutorial: Removing Duplicate Rows in a Spreadsheet  |  Apps Script  |  Google Developers