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

スプレッドシート データ内の重複する行を削除するために使用できる Google 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 (const 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. [Save] プロジェクトを保存するアイコン をクリックします。

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

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

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

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

  10. ライブラリの説明を入力します(例: Remove duplicate rows )。ライブラリにアクセスできるユーザーは、この説明を表示できます。

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

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

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

スクリプトを実行する

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

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

  1. 重複する行を含むデータがある Google スプレッドシートを開きます。サンプル スプレッドシートを使用するには、Sample duplicate rowsスプレッドシートのコピーを作成します。
  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 回呼び出しを行い、すべてのデータを取得します。シートを 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 が作成しました。Romain の Twitter アカウントは @romain_vialardです。

このサンプルは、Google デベロッパー エキスパートの協力のもと、Google によって管理されています。

次のステップ