【コードの解説付き】GASでシート間のデータを簡単に比較する方法

スプレッドシート

在庫管理を効率化するには、スプレッドシートを活用する方法が便利です。

本記事では、Google Apps Script(以下、GAS)を使用して、スプレッドシートの2つ以上のシートを比較し、共通項目や非共通項目を効率的に処理する方法を解説します。

実際のシートに合わせて、コードを編集する箇所も記載しているのでぜひ試してみてください!

GAS剤師
GAS剤師

比較対象を組み合わせることで様々なリストを簡単に作成できます


この記事で解決できること

2つ以上のシートを比較して、共通する(しない)データを簡単に特定

  • 共通する項目を抽出
  • 共通しない項目を抽出

事前準備

  1. Googleスプレッドシートを用意
    • シート1(例:在庫リストA)
    • シート2(例:在庫リストB)
      比較したいデータは同じ列(例:商品コード列など)に配置してください。
  2. GASエディタを開く
    • スプレッドシートを開き、拡張機能 > Apps Scriptを選択します。
  3. スクリプトを貼り付ける
    以下のコードをそのままコピーして、GASエディタに貼り付けてください。

GASコードと説明

共通する項目を抽出

使える場面

自店舗の在庫で長期収載品がどれくらいあるかをリスト化する
・在庫リストA:自店舗の在庫
・在庫リストB:長期収載品にかかわる選定療養の対象医薬品

function removeNonCommonItems() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetA = ss.getSheetByName("在庫リストA");
  const sheetB = ss.getSheetByName("在庫リストB");
  
  const dataA = sheetA.getRange(2, 1, sheetA.getLastRow() - 1, sheetA.getLastColumn()).getValues();
  const dataB = sheetB.getRange(2, 1, sheetB.getLastRow() - 1, sheetB.getLastColumn()).getValues();
  
  const commonItems = dataA.filter(rowA => dataB.some(rowB => rowA[0] === rowB[0]));
  sheetA.getRange(2, 1, sheetA.getLastRow() - 1, sheetA.getLastColumn()).clear();
  sheetA.getRange(2, 1, commonItems.length, commonItems[0].length).setValues(commonItems);
}

共通しない項目を抽出

使える場面

自店舗にはあるがグループ店にない医薬品をリスト化し在庫不足に注意する
・在庫リストA:自店舗の在庫
・在庫リストB:他店舗のグループ店の在庫

function removeCommonItems() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheetA = ss.getSheetByName("在庫リストA");
  const sheetB = ss.getSheetByName("在庫リストB");
  
  const dataA = sheetA.getRange(2, 1, sheetA.getLastRow() - 1, sheetA.getLastColumn()).getValues();
  const dataB = sheetB.getRange(2, 1, sheetB.getLastRow() - 1, sheetB.getLastColumn()).getValues();
  
  const nonCommonItems = dataA.filter(rowA => !dataB.some(rowB => rowA[0] === rowB[0]));
  sheetA.getRange(2, 1, sheetA.getLastRow() - 1, sheetA.getLastColumn()).clear();
  sheetA.getRange(2, 1, nonCommonItems.length, nonCommonItems[0].length).setValues(nonCommonItems);
}

コードを応用するための補足

  1. シート名の変更
    sheetAsheetB の行にある getSheetByName("シート名")"シート名" を任意の名前に変更してください。
    • 例:const sheetA = ss.getSheetByName("商品一覧");
  2. 列の指定
    比較する列を変更したい場合は、以下の部分を編集してください。
    rowA[0] === rowB[0]
    • [0] は列番号を表します(0が1列目、1が2列目)。
    • 例:商品名(2列目)を比較する場合は [1] に変更します。

実行方法

  1. GASエディタで「実行」ボタンを押します。
  2. 初回実行時に「このアプリは確認されていません」という警告が表示されたら、「詳細」→「安全でないページに移動」を選択します。
  3. 実行したい関数(例:copyAndHighlightCommonItems)を選んで実行します。

まとめ

この記事では、GASを使ってスプレッドシート間で在庫データを比較し、共通項目や非共通項目を効率的に処理する方法を紹介しました。

応用するための編集ポイントも解説していますので、必要に応じてカスタマイズしてみてください。

在庫管理の手間を減らし、正確なデータ管理を実現しましょう!

タイトルとURLをコピーしました