公式資料を参照して構成した手順です。本記事の操作・コードの実行は未確認です。小さな入力例で期待結果を確かめてから利用してください。
できあがるもの
結果はA|B・C・元行2、A|B・C・元行4です。AとB|Cの行3は重複に含まれません。
始める前に
- 自分が編集できる新しい検証用Googleスプレッドシート。シート名を「入力」に変更
- 拡張機能から開く紐付きApps Script。V8ランタイムを使用し、同じプロジェクトに同名関数を置かない
- 入力は100行12列以内。出力シート名「結果」は未使用。初回実行時に対象ファイルへの権限確認が必要
入力例
入力!A1:C4は「部門,番号,内容」「A|B,C,1件目」「A,B|C,2件目」「A|B,C,3件目」です。
手順
- 新しい検証用ブックに入力例を用意します。原本や顧客情報を持つファイルでは実行せず、表と設定を小さなダミーで再現してください。空欄は文字として入れず、色・書式・非表示などを読む記事では記載の設定も手で用意します。
- 拡張機能のApps Scriptへ次の完全なコードを貼り付けて保存します。入力と結果のシート名は固定です。既存の結果があると上書きせず停止し、出力文字列には先頭アポストロフィを付けて数式としての再評価を避けます。
/** @OnlyCurrentDoc */ function recipeCompositeDuplicates() { const ss=SpreadsheetApp.getActiveSpreadsheet(); const s=ss.getSheetByName('入力'); if(!s||ss.getSheetByName('結果'))throw Error('入力シートと未使用の結果名が必要'); if(s.getLastRow()>100||s.getLastColumn()>12)throw Error('検証用100行12列以内'); const a=s.getRange('A2:C4').getDisplayValues(),m=new Map(); a.forEach((r,i)=>{const k=JSON.stringify(r.slice(0,2));if(!m.has(k))m.set(k,[]);m.get(k).push(i+2);}); const o=[['部門','番号','元行']];a.forEach((r,i)=>{if(m.get(JSON.stringify(r.slice(0,2))).length>1)o.push([r[0],r[1],i+2]);}); if(!o.length||!o[0].length||o.some(r=>r.length!==o[0].length))throw Error('出力列数を確認'); const safe=o.map(r=>r.map(v=>typeof v==='string'?"'"+v:v)); ss.insertSheet('結果').getRange(1,1,safe.length,safe[0].length).setValues(safe); } - エディタからrecipeCompositeDuplicatesを選び手動実行します。初回は自分が選んだ対象ファイルへの権限内容を確認してください。この例はトリガーを作らず、メール送信・外部通信・ファイル削除をしません。処理後に作られた「結果」を開きます。
- 区切り文字で連結するとA|B+CとA+B|Cが衝突するため、配列をJSON.stringifyしてキーにします。先に出現数を集めてから全重複行を出し、どちらを残すかは人が判断します。元行番号を残して原票へ戻れます。 結果はA|B・C・元行2、A|B・C・元行4です。AとB|Cの行3は重複に含まれません。
- 結果の行数と値を入力例の期待結果へ照合し、入力シートの値と設定が元のままか確認します。表示値で比較するため、数値1と文字列1を区別しません。業務キーの型規則を先にそろえます。 再実行するなら前回の結果を別名で保管してから実行します。入力例を変更しても既存結果は自動更新されません。
期待結果と照合する
結果はA|B・C・元行2、A|B・C・元行4です。AとB|Cの行3は重複に含まれません。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- 表示値で比較するため、数値1と文字列1を区別しません。業務キーの型規則を先にそろえます。
- このGASは接続済みGoogle環境で未実行です。構文確認と公式API照合は実機実行と異なります。入力例で期待値を確認してから範囲や業務規則を変更してください。
止める・元に戻す
出力された「結果」シートだけを必要に応じて保存してから削除し、追加した関数を外します。入力表・既存設定はコードから変更していないため、テストで手動設定した部分だけを元へ戻してください。
公式資料・対応範囲
参照日:2026-10-18。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。