GASでVLOOKUPを自在に!複数シートから配列まで完全ガイド

スプレッドシートでVLOOKUPにお世話になってきたけど、GASでも使えるの?
猫男
猫男
catman
catman
おし、catmanがGASの世界を案内しよう!

GASでVLOOKUPを再現しよう

GASにVLOOKUP関数があるわけではありません。

しかし、全く同じ処理を再現できます。

それではGASコードを使ってどう書くのか見ていきましょう。

GASでVLOOKUPを再現する基本構文

VLOOKUPを実現するには、スプレッドシートのデータを取得し、JavaScriptを使って検索処理をします。


function vlookupExample(searchKey, sheetName, range, columnIndex) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  const data = sheet.getRange(range).getValues();

  for (let i = 0; i < data.length; i++) {
    if (data[i][0] == searchKey) {
      return data[i][columnIndex - 1];
    }
  }
  return "Not Found";
}

const result = vlookupExample("検索キー", "シート名", "A1:B10", 2);
Logger.log(result);

SpreadsheetApp.getActiveSpreadsheet(): 現在のスプレッドシートを取得します。
sheet.getRange(range).getValues(): 指定した範囲のデータを配列として取得します。
forループ: 指定されたキーが見つかるまで、データ配列を検索します。

GASで別シートのデータを処理する方法

GASでは簡単に別シートからデータを参照できます。

別のシートからデータを使い、VLOOKUPのように検索可能です。


function vlookupDifferentSheet(searchKey) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("別シート名");
  const range = sheet.getRange("A1:C10");
  const data = range.getValues();

  // データの中から検索キーを探し、対応する値を返す
  for (let i = 0; i < data.length; i++) {
    if (data[i][0] === searchKey) {
      return data[i][1];  // 必要に応じて列番号を変更
    }
  }
  return "Not Found";
}

const result = vlookupDifferentSheet("検索キー");
Logger.log(result);

getSheetByName(“別シート名”): 特定の名前のシートを取得します。

配列を使ってカスタムVLOOKUPを実現する

GASでVLOOKUPを使う際に、配列を利用してデータを自由に扱うことができます。


function arrayVlookup(searchKey, dataArray) {
  for (let i = 0; i < dataArray.length; i++) {
    if (dataArray[i][0] == searchKey) {
      return dataArray[i][1];  // インデックスを適切に調整
    }
  }
  return "Not Found";
}

// 使用するデータ配列
const dataArray = [
  ["キー1", "値1"],
  ["キー2", "値2"],
  ["キー3", "値3"]
];

const result = arrayVlookup("キー2", dataArray);
Logger.log(result);

forループ: 与えられたデータの配列の中で検索キーに該当する値を探す処理です。

練習問題

1. 「従業員名」というシートから「ID」をキーに「部署名」を取得するスクリプトを書いてみましょう。
2. 複数のシート(「シート1」と「シート2」)のデータをつなぎ合わせ、特定のキーに基づいて検索するスクリプトを書いてみましょう。

解答・解説


function getDepartmentById(employeeId) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("従業員名");
  const range = sheet.getRange("A2:C10");  // AにID, Cに部署名があると仮定
  const data = range.getValues();

  for (let i = 0; i < data.length; i++) {
    if (data[i][0] === employeeId) {
      return data[i][2]; // 部署名を返す
    }
  }
  return "Not Found";
}

function combineSheetsAndSearch(searchKey) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet1 = ss.getSheetByName("シート1");
  const sheet2 = ss.getSheetByName("シート2");
  const data1 = sheet1.getRange("A1:B10").getValues();
  const data2 = sheet2.getRange("A1:B10").getValues();
  
  const combinedData = data1.concat(data2);

  for (let i = 0; i < combinedData.length; i++) {
    if (combinedData[i][0] === searchKey) {
      return combinedData[i][1];
    }
  }
  return "Not Found";
}

getRange(“A2:C10”): 特定の範囲のデータを取得しています。
concat: 二つの配列をつなぎ合わせます。データが複数のシートにある場合に有効です。