AppSheetの便利な関数の一つにLOOKUP関数があります。ここではこのLOOKUP関数の使い方について解説しています。
LOOKUP関数の基本構文
LOOKUP関数は、スプレッドシートのvlookupと同じく、値と列を指定することでテーブルの中の行を指定し、その中の指定したカラムの値を取得する関数です。
AppSheet Help公式の基本構文は以下のようになっています。
LOOKUP(値, データセット, 列, 戻り値の列)
データセットというのがわかりにくいですが、ひとまとまりのデータと言う意味で、AppSheet上ではテーブルのことを指します。
なので、もう少しわかりやすく書き換えると次のようになります。
LOOKUP(検索値, 検索テーブル名, 検索カラム名, データ取得するカラム名)
使い方の実例
使い方の実例としては以下のようなものがあります。
LOOKUP("脳内革命", "本一覧", "書籍名", "全数")
LOOKUP([書籍名], "本一覧", "書籍名", "全数")
LOOKUP([_THISROW], "本一覧", "書籍名", "全数")
LOOKUP([_THISROW].[書籍名], "本一覧", "書籍名", "全数")
以下で注意点なども含めもう少し細かく解説します。
LOOKUPの注意点
AppSheetでLOOKUPを使うときに注意しなければいけないことがあります。それは、第1引数以外は文字列で指定しなければいけないということです。
SELECTなどの場合はテーブルとカラム名を指定するときは テーブル名[カラム名]
としますが、LOOKUPの場合は「テーブル名」と「カラム名」は別々に指定し、それぞれ文字列で記述します。
つまり、検索テーブル名、検索カラム名、データ取得するカラム名はダブルクオーテーションで囲んで文字列とする必要があります。
実例1:文字列で指定する
第1引数は文字列かカラム名で指定することができます。
初めに、文字列で指定する実例です。例えば、以下のようなカラムを持った「本一覧」というテーブルがあるとします。
この中で「脳内革命」の全数を取得する式をLOOKUP関数を使って記述すると以下のようになります。
LOOKUP("脳内革命", "本一覧", "書籍名", "全数")
この場合は、常に1つの値を返します。
AppSheetでよく使うSELECT関数などと違ってカッコの中が文字列だらけです。
エラーの実例
文字列で指定するべきところを、[テーブル名]や[カラム名]のように指定した場合次のようなエラーが発生します。
Column ‘在庫’ in Table ‘貸出管理マスター_Schema’ of Column Type ‘Number’ has an invalid expression in the Formula field.’=LOOKUP([_THISROW].[書籍名], [本一覧], “書籍名”, “残数”)’. Function ‘LOOKUP’ must be passed constant values for its tableName, lookupColumn, and returnColumn parameters: LOOKUP(lookupValue, tableName, lookupColumn, returnColumn). Consider wrapping the constant parameters in double quotes to ensure correct parsing.
エラーの内容は「数式が間違っています。テーブル名、カラム名は定数(constant values)である必要があります。ダブルクオテーションで囲ってみてください」です。親切に、ダブルクォーテーションで囲むところまで示唆してくれています。
実例2:[カラム名]を使う
第1引数を現在のテーブルのカラムで指定する場合、カラム名のみで指定することもできます。
LOOKUP([書籍名], "本一覧", "書籍名", "全数")
この場合は、書籍名カラムの値に応じて値が変わります。
実例3:[_THISROW]を使う
より実用的に使う方法に[_THISROW]を使う方法があります。
[_THISROW]とは、現在の行という意味です。実際の使い方は後ろにカラム名をくっつけます。カラム名も同じくカッコで囲みます。
[_THISROW].[カラム名]
例えば、今いる行の書籍名カラムの値に該当する全数を取得したい場合は以下のように記述します。
LOOKUP([_THISROW].[書籍名], "本一覧", "書籍名", "全数")
これをカラムのFORMULA(App formula)に記述すれば、自動で値を取得してくれます。
SELECTとLOOKUPどちらを使うか
AppSheetで非常によく使う関数にSELECTがあります。どちらも指定したカラムからデータを取得してくる処理になります。
SELECTとLOOKUPのどちらを使えばいいかは、ほしい値がリスト(複数)なのか、1つなのかで決まります。
SELECTの戻り値はリスト(複数のデータ)です。一方、LOOKUPは1つの値を返します。
ANY(SELECT)とLOOKUPは同じ
ちなみに、ANY関数とSELECT関数を組み合わせることで、LOOKUPと全く同じ処理を行うことができます。
ANY関数は複数の値から1番上の1つの値のみを返す関数です。SELECTは指定したカラムの中で、指定した値に該当するものをリストで抜き出します。
書き換えの実例として、以下のLOOKUP使った処理を、SELECTとANYで書き換えたものを紹介します。
LOOKUP("脳内革命", "本一覧", "書籍名", "全数")
LOOKUP([_THISROW], "本一覧", "書籍名", "全数")
LOOKUP([_THISROW].[書籍名], "本一覧", "書籍名", "全数")
書き換え例1
「本一覧」テーブルの中のカラム「書籍名」で「脳内革命」に一致する行の「全数」カラムの値を返すという内容です。
LOOKUP("脳内革命", "本一覧", "書籍名", "全数")
↓
ANY(SELECT( 本一覧[全数], [書籍名] = "脳内革命"))
SELECTは本一覧テーブルの「書籍名」カラムの値が「脳内革命」になっている行の「全数」カラムの値を全て取得するという処理です。ANYで、その取得した値の1番上の値を返します。
書き換え例2
「本一覧」テーブルの中のカラム「書籍名」で現在の行名(_THISROW)に一致する行の「全数」カラムの値を返すという内容です。
LOOKUP([_THISROW], "本一覧", "書籍名", "全数")
↓
ANY(SELECT( 本一覧[全数], [書籍名] = [_THISROW] ))
SELECTは本一覧テーブルの「書籍名」カラムの値が現在の行名(_THISROW)になっている行の「全数」カラムの値を全て取得するという処理です。ANYで、その取得した値の1番上の値を返します。
書き換え例3
「本一覧」テーブルの中のカラム「書籍名」で、現在の行のカラム「書籍名」の値(_THISROW)に一致する行の「全数」カラムの値を返すという内容です。
LOOKUP([_THISROW].[書籍名], "本一覧", "書籍名", "全数")
↓
ANY(SELECT( 本一覧[全数], [書籍名] = [_THISROW].[書籍名] ))
SELECTは本一覧テーブルの「書籍名」カラムの値が現在の行のカラム「書籍名」の値(_THISROW)になっている行の「全数」カラムの値を全て取得するという処理です。ANYで、その取得した値の1番上の値を返します。