【初心者向け】GASのシート名と比較する列をカスタマイズする方法

GAS

はじめに

Googleスプレッドシートで複数のリストを比較し、共通するデータだけを抽出したい場面はありませんか?

例えば、在庫管理や顧客リストの照合などです。

この記事ではシート名比較する列をカスタマイズする方法について詳しく解説します!
基本のコードの使い方は別のブログ記事で紹介していますのでそちらを参照ください。


基本のスクリプト

以下のスクリプトは、2つのシート(”在庫リストA” と “在庫リストB”)を比較し、共通する項目を “在庫リストC” に転記するものです。

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("共通するアイテムはありませんでした。");
  }
}

シート名を変更する場合

編集方法

シート名を変更したい場合は、次の部分を編集します:

const sheetA = ss.getSheetByName("在庫リストA");
const sheetB = ss.getSheetByName("在庫リストB");
const sheetC = ss.getSheetByName("在庫リストC") || ss.insertSheet("在庫リストC");
  • 例:
    • "在庫リストA""商品リスト1"
    • "在庫リストB""商品リスト2"
    • "在庫リストC""共通リスト"

編集後のコード例:

const sheetA = ss.getSheetByName("商品リスト1");
const sheetB = ss.getSheetByName("商品リスト2");
const sheetC = ss.getSheetByName("共通リスト") || ss.insertSheet("共通リスト");

これで新しいシート名に対応できます!


比較する列を変更する場合

編集方法

デフォルトでは1列目rowA[0]rowB[0])が比較されています。

  • 1列目を比較: rowA[0] === rowB[0]
  • 2列目を比較: rowA[1] === rowB[1]

2列目を比較する場合のコード:

const commonItems = dataA.filter(rowA => dataB.some(rowB => rowA[1] === rowB[1]));

ポイント:

  • 0: 1列目
  • 1: 2列目
  • 2: 3列目
ポイント

在庫リストAの1列目と在庫リストBの2列目を比較したい場合
編集結果: rowA[0] === rowB[1]

比較したい列に応じて番号を調整しましょう。


スクリプトを実行する

  1. Googleスプレッドシートを開く。
  2. 拡張機能 > Apps Script を選択。
  3. 上記スクリプトを貼り付ける。
  4. 保存して実行。

注意:

  • 初回実行時には承認が必要です。
  • エラーが発生した場合はエラーメッセージを確認してください。

まとめ

編集ポイントのまとめです

  1. シート名を変更getSheetByName の引数を編集。
  2. 比較する列を変更rowA[0]rowB[0] の番号を編集。

これで、さまざまなリスト比較に応用できるスクリプトになりました!

ぜひスクリプトを活用して、日常業務の効率化を進めてみてください!