やりたいこと
GASでスプシを読み込んで、スプシのデータに対してvlookup的なことをしたい
サンプル
ID | 品名 | 単価(円) | 在庫数 |
---|---|---|---|
1 | トマト | 80 | 20 |
2 | キャベツ | 160 | 10 |
3 | レタス | 120 | 13 |
4 | きゅうり | 40 | 35 |
5 | ピーマン | 50 | 30 |
6 | じゃがいも | 35 | 40 |
実装
コード
lookupTest.gs
function lookupTest() {
//シートを宣言
const Sheet = SpreadsheetApp.openById("hoge").getSheetByName("シート1");
//キー配列を取得
const keys = Sheet.getRange(2, 1, Sheet.getLastRow() -2+1).getDisplayValues().flat();
//データ配列を取得
const data = Sheet.getRange(2, 1, Sheet.getLastRow() -2+1, Sheet.getLastColumn()).getDisplayValues();
const inner_row = {id:1, name:2, price:3, stock:4};
//例…IDが4の品の在庫数を取得
const example1 = data[keys.indexOf("4")][inner_row.stock -1];
console.log("IDが1の品の在庫数:"+ example1);
}
結果
IDが1の品の在庫数:35
メモ
・vlookupでいう検索キーを1次元配列で別に抜いておいて、データ全体の2次元配列からindexOfの返り値で行番号を指定するイメージ
・vlookupと違ってkeysの列がデータ内のどこでもいい、データの範囲外でもいい
・行方向はindexOfそのままでいいけど、列方向はスプシの列番号 -1しないとずれる