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