スプレッドシート データ内の重複行を削除するために使用できる Apps Script ライブラリを作成します。
目標
- スクリプトを設定します。
- スクリプトを実行します。
前提条件
このサンプルを使用するには、次の前提条件を満たしている必要があります。
- Google アカウント(Google Workspace アカウントの場合、管理者の承認が必要となる可能性があります)。
- インターネットに接続できるウェブブラウザ。
スクリプトを設定する
ライブラリをビルドする手順は次のとおりです。
- Google アカウントにログインします。
- スクリプト エディタを開くには、script.google.com にアクセスします。
- 左上の [新しいプロジェクト] をクリックします。
スクリプト エディタ内のコードを削除して、以下のコードを貼り付けます。
[保存] をクリックします。
左上の [無題のプロジェクト] をクリックします。
スクリプトの名前を「Remove duplicate rows」に変更し、[名前を変更] をクリックします。
[Deploy] > [New deployment] をクリックします。
[種類の選択] の横にある [デプロイタイプを有効にする] > [ライブラリ] をクリックします。
ライブラリの説明(重複する行を削除など)を入力します。この説明は、ライブラリにアクセスできるすべてのユーザーが閲覧できます。
[デプロイ] をクリックします。
左側の [プロジェクト設定] をクリックします。
[ID] で、スクリプト ID をコピーして、次の手順で使用します。
スクリプトを実行する
ライブラリを使用するには、少なくともその Apps Script プロジェクトの表示権限が必要です。ライブラリを作成したユーザーには、そのライブラリを使用する権限が付与されます。他のユーザーにライブラリを使用できるようにするには、そのユーザーに Apps Script プロジェクトの表示権限を付与します。
ライブラリを使用する手順は次のとおりです。
- 重複する行を含むデータを含む Google スプレッドシートを開きます。サンプル スプレッドシートを使用するには、重複する行のサンプル スプレッドシートのコピーを作成します。
- [拡張機能] > [Apps Script] をクリックします。
- [ライブラリ] の横にあるライブラリを追加アイコン をクリックします。
- [スクリプト ID] セクションに、前のセクションでコピーしたライブラリの Apps Script プロジェクトのスクリプト ID を貼り付けます。
- [Look up] をクリックします。
- [バージョン] セクションで [1] を選択します。
- [追加] をクリックします。
スクリプト エディタ内のコードを削除して、以下のコードを貼り付けます。
function runLibrary() { Removeduplicaterows.removeDuplicates(); }
関数のプルダウンで [runLibrary] を選択します。
[実行] をクリックします。
スプレッドシートに戻り、重複する行のない更新されたデータを表示します。
コードを確認する
このソリューションの Apps Script コードを確認するには、下の [ソースコードを表示] をクリックします。
ソースコードの表示
まず、スクリプトはスプレッドシートを 1 回呼び出して、すべてのデータを取得します。シートを行単位で読み取ることもできますが、JavaScript オペレーションはスプレッドシートなどの他のサービスと通信するよりもはるかに高速です。呼び出し回数が少ないほど、処理が速くなります。これは、各スクリプトの実行時間は最大 6 分であるため重要です。
変数 data
は、シート内のすべての値を含む JavaScript 2 次元配列です。newData
は空の配列で、スクリプトは重複していないすべての行をここに格納します。
最初の for
ループは、data
2 次元配列の各行を反復処理します。2 つ目のループは、行ごとに、newData
配列に一致するデータを含む別の行がすでに存在するかどうかをテストします。重複していない場合、行は newData
配列に push されます。
最後に、スクリプトはシートの既存のコンテンツを削除し、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 によって管理されています。