Airtableで重複データを削除!最新の1件を残すスクリプト

Airtableを使ってデータ管理をしていると、同じデータが重複して登録されてしまうことがあります。特に、最新のデータだけを残して古いものを削除したいというケースは多いのではないでしょうか?

そこで今回は、AirtableのScripting Appを使って、重複データの中から最新の1件を残し、古いデータを削除する方法を解説します。

やりたいこと

この記事を読むことで、以下のことができるようになります:

  • AirtableのScripting Appを利用して、特定のテキストフィールド(例:「【貼り付け用】従業員コード」)を基準に重複をチェックする
  • 作成日が最新の1件のみを残し、古いデータを自動削除する
  • スクリプトを使って定期的にデータクレンジングを自動化する

スクリプトの概要

このスクリプトは、Airtableの「Scripting App」を使って以下の手順で動作します。

  1. Airtableのテーブル(例:「勤怠」)の全レコードを取得
  2. 「【貼り付け用】従業員コード」ごとにデータをグループ化
  3. 作成日が最新の1件のみを残し、それより古いデータを削除
  4. 不要なデータを削除してクリーンなデータ管理を実現

Airtableスクリプト

// テーブルの取得
let table = base.getTable("勤怠");

// フィールド名の設定(適宜変更)
let employeeCodeField = "【貼り付け用】従業員コード";  // ここを基準に重複チェック
let createdDateField = "作成日";  // 作成日

// 全レコードを取得
let query = await table.selectRecordsAsync({ fields: [employeeCodeField, createdDateField] });

// 従業員ごとのレコードを管理するマップ
let recordsByEmployee = new Map();

// 各レコードをループして、従業員コードごとにグループ化
for (let record of query.records) {
    let employeeCode = record.getCellValue(employeeCodeField);
    let createdDateRaw = record.getCellValue(createdDateField);

    if (!employeeCode || !createdDateRaw) {
        continue;  // データが不完全な場合はスキップ
    }

    let createdDate = new Date(createdDateRaw);
    if (isNaN(createdDate.getTime())) {
        console.log(`無効な作成日: ${createdDateRaw} - レコードID: ${record.id}`);
        continue;
    }

    // マップに保存(リストとして管理)
    if (!recordsByEmployee.has(employeeCode)) {
        recordsByEmployee.set(employeeCode, []);
    }
    recordsByEmployee.get(employeeCode).push({ recordId: record.id, createdDate: createdDate });
}

// 削除対象のレコードを格納する配列
let recordsToDelete = [];

// 最新の1件だけを残し、残りは削除リストに追加
recordsByEmployee.forEach((records, employeeCode) => {
    // 作成日で降順ソート(最新のものが最初に来る)
    records.sort((a, b) => b.createdDate - a.createdDate);

    // 最新の1件を除いたものを削除リストに追加
    let latestRecord = records.shift();  // 先頭を取得し、それ以外を削除対象にする
    recordsToDelete.push(...records.map(r => r.recordId));
});

// 削除処理(最大50件ずつ)
while (recordsToDelete.length > 0) {
    let batch = recordsToDelete.splice(0, 50);
    console.log(`削除するレコード:`, batch);
    await table.deleteRecordsAsync(batch);
}

output.text("古いレコードが削除されました ✅");

手順:スクリプトの実行方法

  1. Airtableの「Extensions」から「Scripting App」を追加
  2. スクリプトを貼り付けて「Run」ボタンをクリック
  3. 不要なデータが削除され、最新の1件のみが残る!

注意点

  • 「【貼り付け用】従業員コード」のフィールド名が正しく設定されているか確認してください
  • 「作成日」のデータ型が「日付型」になっていることを確認してください(文字列型の場合は適宜変換)
  • 削除対象のレコードは「50件ずつ削除」することでAirtableの制約を回避

まとめ

この記事では、Airtableのスクリプトを活用して、最新の1件を残して古いデータを削除する方法を解説しました。

このスクリプトを活用することで、

✅ データの重複を自動削除

✅ 最新のデータのみを保持

✅ データクレンジングの自動化 が可能になります!

Airtableでのデータ管理をもっと便利にするために、ぜひ活用してみてください!🚀

この記事を書いた人

tsubasatwi( つばさ)

国立工業高専卒業(新居浜工業高等専門学校)
「イベント×IT×営業」のカスタマーサクセスマネージャーとして活躍。セールス→構築管理運用まで全体プロジェクト管理の豊富な経験あり。

・主にITに関するイベント集客/法人営業/開発を担当
・大手通信会社を中心にエンタープライズのIT導入を担当(B2B)

DMMで日本初の NoCodeサロン を運営
「NoCodeCamp プログラミングを使わないIT開発 」
https://lounge.dmm.com/detail/2549/