ライブラリのクイックスタート

スプレッドシートのデータから重複する行を削除するために使用できる Apps Script ライブラリを構築します。

目標

  • スクリプトを設定します。
  • スクリプトを実行します。

前提条件

このサンプルを使用するには、次の前提条件を満たしている必要があります。

  • Google アカウント(Google Workspace アカウントの場合、管理者の承認が必要となる可能性があります)。
  • インターネットにアクセスできるウェブブラウザ。

スクリプトを設定する

ライブラリをビルドする手順は次のとおりです。

  1. Google アカウントにログインします。
  2. スクリプト エディタを開くには、script.google.com にアクセスします。
  3. 左上の [新しいプロジェクト] をクリックします。
  4. スクリプト エディタ内のコードを削除して、以下のコードを貼り付けます。

    sheets/removingDuplicates/removingDuplicates.gs
    /**
     * Removes duplicate rows from the current sheet.
     */
    function removeDuplicates() {
      const sheet = SpreadsheetApp.getActiveSheet();
      const data = sheet.getDataRange().getValues();
      const uniqueData = {};
      for (let row of data) {
        const key = row.join();
        uniqueData[key] = uniqueData[key] || row;
      }
      sheet.clearContents();
      const newData = Object.values(uniqueData);
      sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
    }
  5. 保存アイコン[保存] をクリックします。

  6. 左上の [無題のプロジェクト] をクリックします。

  7. スクリプトに「Remove duplicate rows」という名前を付けて、[名前を変更] をクリックします。

  8. [Deploy] > [New deployment] をクリックします。

  9. [種類の選択] の横にある [デプロイタイプを有効にする] デプロイタイプを有効にするアイコン > [ライブラリ] をクリックします。

  10. ライブラリの説明(重複する行を削除するなど)を入力します。ライブラリにアクセスできるユーザーは、この説明を表示できます。

  11. [デプロイ] をクリックします。

  12. 左側の [プロジェクト設定] プロジェクト設定のアイコン をクリックします。

  13. [ID] で、後の手順で使用するスクリプト ID をコピーします。

スクリプトを実行する

ライブラリを使用するには、その Apps Script プロジェクトに対する閲覧権限が必要です。ライブラリを作成したユーザーには、そのライブラリを使用するために必要な権限が付与されています。他のユーザーがライブラリを使用できるようにするには、Apps Script プロジェクトの閲覧権限を付与します。

ライブラリを使用する手順は次のとおりです。

  1. 重複する行を含むデータがある Google スプレッドシートを開きます。サンプル スプレッドシートを使用するには、重複する行のサンプル スプレッドシートのコピーを作成します
  2. [拡張機能] > [Apps Script] をクリックします。
  3. [ライブラリ] の横にある [ライブラリを追加] をクリックします。
  4. [スクリプト ID] セクションに、前のセクションでコピーしたライブラリ Apps Script プロジェクトのスクリプト ID を貼り付けます。
  5. [Look up] をクリックします。
  6. [バージョン] セクションで [1] を選択します。
  7. [追加] をクリックします。
  8. スクリプト エディタ内のコードを削除して、以下のコードを貼り付けます。

    function runLibrary() {
     Removeduplicaterows.removeDuplicates();
    }
    
  9. 関数プルダウンで、[runLibrary] を選択します。

  10. [実行] をクリックします。

  11. スプレッドシートに戻り、重複する行のない更新されたデータを表示します。

コードを確認する

このソリューションの Apps Script コードを確認するには、下の [ソースコードを表示] をクリックします。

ソースコードの表示

まず、スクリプトはスプレッドシートに 1 回だけ呼び出しを行い、すべてのデータを取得します。シートを行ごとに読み取ることもできますが、JavaScript オペレーションは、スプレッドシートなどの他のサービスとの通信よりもはるかに高速です。呼び出しの回数が少ないほど、処理が速くなります。これは、各スクリプトの最大実行時間が 6 分であるため重要です。

sheets/removingDuplicates/removingDuplicates.gs
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();

変数 data は、シート内のすべての値を含む JavaScript の 2 次元配列です。newData は、スクリプトが重複しないすべての行を配置する空の配列です。

sheets/removingDuplicates/removingDuplicates.gs
const newData = Object.values(uniqueData);

最初の for ループは、data 2 次元配列の各行を反復処理します。各行について、2 番目のループは、一致するデータを持つ別の行が newData 配列にすでに存在するかどうかをテストします。重複していない場合、行は newData 配列にプッシュされます。

sheets/removingDuplicates/removingDuplicates.gs
uniqueData[key] = uniqueData[key] || row;

最後に、スクリプトはシートの既存のコンテンツを削除し、newData 配列のコンテンツを挿入します。

sheets/removingDuplicates/removingDuplicates.gs
sheet.clearContents();
const newData = Object.values(uniqueData);
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);

修正

ライブラリは、必要に応じて何度でも編集できます。以下はオプションの変更です。

一部の列でデータが一致する行を削除する

完全に一致する行を削除するのではなく、1 つまたは 2 つの列で一致するデータを含む行を削除することもできます。これを行うには、条件ステートメントを変更します。

サンプルコードで、次の行を更新します。

    if(row.join() == newData[j].join()){
      duplicate = true;
    }

この行を次のコードに置き換えます。

    if(row[0] == newData[j][0] && row[1] == newData[j][1]){
      duplicate = true;
    }

上記の条件ステートメントは、シートの 1 列目と 2 列目に同じデータが 2 行あるたびに重複を見つけます。

寄稿者

このサンプルは、Google デベロッパー エキスパートの Romain Vialard 氏が作成しました。Twitter で @romain_vialard をフォローしてください。

このサンプルは、Google デベロッパー エキスパートの協力を得て Google が管理しています。

次のステップ