スプレッドシートのデータから重複する行を削除するために使用できる Apps Script ライブラリを構築します。
目標
- スクリプトを設定します。
- スクリプトを実行します。
前提条件
このサンプルを使用するには、次の前提条件を満たしている必要があります。
- Google アカウント(Google Workspace アカウントの場合、管理者の承認が必要となる可能性があります)。
- インターネットにアクセスできるウェブブラウザ。
スクリプトを設定する
ライブラリをビルドする手順は次のとおりです。
- Google アカウントにログインします。
- スクリプト エディタを開くには、script.google.com にアクセスします。
- 左上の [新しいプロジェクト] をクリックします。
スクリプト エディタ内のコードを削除して、以下のコードを貼り付けます。
[保存] をクリックします。
左上の [無題のプロジェクト] をクリックします。
スクリプトに「Remove duplicate rows」という名前を付けて、[名前を変更] をクリックします。
[Deploy] > [New deployment] をクリックします。
[種類の選択] の横にある [デプロイタイプを有効にする]
> [ライブラリ] をクリックします。
ライブラリの説明(重複する行を削除するなど)を入力します。ライブラリにアクセスできるユーザーは、この説明を表示できます。
[デプロイ] をクリックします。
左側の [プロジェクト設定]
をクリックします。
[ID] で、スクリプト 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
配列にプッシュされます。
最後に、スクリプトはシートの既存のコンテンツを削除し、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 氏が作成しました。Twitter で @romain_vialard をフォローしてください。
このサンプルは、Google デベロッパー エキスパートの協力を得て Google が管理しています。