在庫管理を効率化するには、スプレッドシートを活用する方法が便利です。
本記事では、Google Apps Script(以下、GAS)を使用して、スプレッドシートの2つ以上のシートを比較し、共通項目や非共通項目を効率的に処理する方法を解説します。
実際のシートに合わせて、コードを編集する箇所も記載しているのでぜひ試してみてください!

GAS剤師
比較対象を組み合わせることで様々なリストを簡単に作成できます
この記事で解決できること
2つ以上のシートを比較して、共通する(しない)データを簡単に抽出
- 共通する項目を抽出
- 共通しない項目を抽出
事前準備
- Googleスプレッドシートを用意
- シート1(例:在庫リストA)
- シート2(例:在庫リストB)
- シート3(例:在庫リストC)※結果出力シート
比較したいデータの見出しは(例:商品コードなど)設定してください。
- GASエディタを開く
- スプレッドシートを開き、
拡張機能 > Apps Script
を選択します。
- スプレッドシートを開き、
- スクリプトを貼り付ける
以下のコードをそのままコピーして、GASエディタに貼り付けてください。
共通する項目を抽出


以下のコードを貼り付けてください
function copyCommonItemsToSheetC() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetA = ss.getSheetByName("在庫リストA");
const sheetB = ss.getSheetByName("在庫リストB");
const sheetC = ss.getSheetByName("在庫リストC") || ss.insertSheet("在庫リストC");
if (!sheetA || !sheetB) {
throw new Error("指定されたシートが見つかりません。");
}
// 見出し行を転記
const header = sheetA.getRange(1, 1, 1, sheetA.getLastColumn()).getValues();
sheetC.getRange(1, 1, 1, header[0].length).setValues(header);
const dataA = sheetA.getRange(2, 1, sheetA.getLastRow() - 1 || 0, sheetA.getLastColumn() || 1).getValues();
const dataB = sheetB.getRange(2, 1, sheetB.getLastRow() - 1 || 0, sheetB.getLastColumn() || 1).getValues();
if (dataA.length === 0 || dataB.length === 0) {
SpreadsheetApp.getUi().alert("どちらかのシートにデータが存在しません。");
return;
}
const commonItems = dataA.filter(rowA => dataB.some(rowB => rowA[0] === rowB[0]));
if (commonItems.length > 0) {
sheetC.getRange(2, 1, commonItems.length, commonItems[0].length).setValues(commonItems);
SpreadsheetApp.getUi().alert("共通項目が「在庫リストC」に転記されました。");
} else {
SpreadsheetApp.getUi().alert("共通するアイテムはありませんでした。");
}
}


コードのイメージ説明です
共通しない項目を抽出


以下のコードを貼り付けてください
function copyUniqueItemsToSheetC() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetA = ss.getSheetByName("在庫リストA");
const sheetB = ss.getSheetByName("在庫リストB");
const sheetC = ss.getSheetByName("在庫リストC") || ss.insertSheet("在庫リストC");
if (!sheetA || !sheetB) {
throw new Error("指定されたシートが見つかりません。");
}
// 見出し行を転記
const header = sheetA.getRange(1, 1, 1, sheetA.getLastColumn()).getValues();
sheetC.getRange(1, 1, 1, header[0].length).setValues(header);
const dataA = sheetA.getRange(2, 1, sheetA.getLastRow() - 1 || 0, sheetA.getLastColumn() || 1).getValues();
const dataB = sheetB.getRange(2, 1, sheetB.getLastRow() - 1 || 0, sheetB.getLastColumn() || 1).getValues();
if (dataA.length === 0 || dataB.length === 0) {
SpreadsheetApp.getUi().alert("どちらかのシートにデータが存在しません。");
return;
}
// シートAにのみ存在する項目を抽出
const uniqueToA = dataA.filter(rowA => !dataB.some(rowB => rowA[0] === rowB[0]));
// シートBにのみ存在する項目を抽出
const uniqueToB = dataB.filter(rowB => !dataA.some(rowA => rowA[0] === rowB[0]));
// 両方のシートに共通しない項目をまとめる
const uniqueItems = uniqueToA.concat(uniqueToB);
if (uniqueItems.length > 0) {
sheetC.getRange(2, 1, uniqueItems.length, uniqueItems[0].length).setValues(uniqueItems);
SpreadsheetApp.getUi().alert("共通しないアイテムが「在庫リストC」に転記されました。");
} else {
SpreadsheetApp.getUi().alert("非共通項目なし。");
}
}

コードのイメージ説明です
コードを応用するための補足

コードを編集することでいろいろな表に応用できます

実際の編集方法は以下のサイトで解説してますので必要であれば是非見てください
実行方法

コードの転記が終わったら実際に実行して結果がうまく出るか確認します
- GASエディタで「実行」ボタンを押します。
- 初回実行時に「このアプリは確認されていません」という警告が表示されたら、「詳細」→「安全でないページに移動」を選択します。
- 実行したい関数(例:
copyAndHighlightCommonItems
)を選んで実行します。
まとめ
この記事では、GASを使ってスプレッドシート間で在庫データを比較し、共通項目や非共通項目を効率的に処理する方法を紹介しました。
応用するための編集ポイントも解説していますので、必要に応じてカスタマイズしてみてください。
在庫管理の手間を減らし、正確なデータ管理を実現しましょう!