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

スプレッドシート データ内の重複行を削除するために使用できる 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 配列に push されます。

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 Developer エキスパートの Romain Vialard によって作成されました。Romain の Twitter アカウント @romain_vialard をフォローしてください。

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

次のステップ