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

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

目標

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

前提条件

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

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

スクリプトを設定する

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

  1. Google アカウントにログインします。
  2. スクリプト エディタを開くには、script.google.com にアクセスします。
  3. 左上の [New project] をクリックします。
  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」という名前を付け、[Rename] をクリックします。

  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 回呼び出して、すべてのデータを取得します。シートを行単位で読み取ることもできますが、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 ループは、2 次元配列 data の各行を反復処理します。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 Expert の Romain Vialard が作成したものです。Romain の Twitter アカウント @romain_vialard をフォローする。

このサンプルは、Google Developer Experts の支援により Google によって管理されています。

次のステップ