Ref型で値が入っていない時の対処法:LabelとKeyの正しい使い方

データ型
AppSheetDataデータ型未分類

AppSheetでは、別のテーブルを参照するためにRef型をよく使います。
しかし、Ref型を設定した際に「値が入っていない」「正しく選択肢が表示されない」といったトラブルが起きることがあります。

その原因は多くの場合、LabelとKeyの扱い方にあります。この記事では、Ref型でLabelをうまく使うための正しい設定方法と、よくあるつまずきポイントを解説します。


前提と課題

以下のような構成を考えてみましょう

  • 「顧客テーブル(Customers)」では、CustomerIDUNIQUEID() を使って一意なKeyを生成
  • 「注文テーブル(Orders)」では、CustomerName(例:「佐藤一郎」)を選択、表示させたい

Customers 顧客テーブル

CustomerID (Key)CustomerName (Label)
a1b2c3d4佐藤一郎
e5f6g7h8鈴木花子

Orders 注文テーブル

OrderID (Key)Customer (ref)Customer (表示)
aa11bb22a1b2c3d4佐藤一郎
cc33dd44e5f6g7h8鈴木花子

正しい設定方法

① 参照先テーブル(例:Customers)の設定

  • [CustomerID]Key設定(値は UNIQUEID() で生成)
  • [CustomerName]Label設定

※一般的にマスターテーブルと呼ばれます。


② 参照元テーブル(例:Orders)の設定

  • [Customer]を TypeをRef型 に設定
  • Source table に Customers を指定

この設定でAppSheetが自動的に、Label(CustomerName)を選択肢として表示されます。値はKey (CustomerID)が保持されます。

▼ 顧客を選択
└ 佐藤一郎

└ 鈴木花子


☝️Ref型では、内部的にはKey(CustomerID)が保存されますが、ユーザーにはLabel(CustomerName)が表示されます。

保存される値は CustomerID ですが、ユーザーには CustomerName が見えるのでわかりやすいですね。


よくある間違いと注意点

次のようなケースはうまく動作しません

  • CustomersにCustomerIDが設定されていない
  • OrdersのCustomerにCuctomerNameを入れようとしている
  • Label(CustomerName)を入力しただけで、Ref型列(Customer)が空のまま

「CustomerNameを見て自動でRefを設定してほしい」と思いがちですが、Ref型はKeyを使ってLabelを参照する仕組みです。

App Formulaで自動変換する方法もありますが、

  • 常に再計算される
  • 手動編集できない
  • 同姓同名のケースがある

など実運用には向きません。


解決策:Ref型列を別に作るのが安全!

最も確実なのは、以下のようにRef型列とLabel列を分けて管理する方法です。
システムを作る上で非常に重要な考え方になります。

ExcelやSpredSheetで運用していた時には、顧客名が入った状態で運用していたかと思います。
こうしたファイルをAppSheetに移行する際には、データを整備する必要があります。

  1. Customersがなければ作成
  2. CustomerIDを設定(Key)
  3. CustomerName (Label)を設定
  4. OrdersにCustomer を追加
  5. Customer 列(Ref)を設定
  6. CustomerNameからKeyを変換して、Customer列に明示的にセット

この変換・セット処理は、以下の方法である程度支援できます

  • AppSheet Bot
  • Google Apps Script(GAS)
  • SpreadSheetのVLOOKUP

まとめ

Ref型を正しく使うためには、以下の点を押さえておきましょう

  • Ref型の内部値は「Key」
  • ユーザーに見せる表示は「Label」
  • Labelだけを入力しても、Ref型列は自動で埋まらない

この仕組みを理解すれば、AppSheetでのデータ参照がぐっと安定します。システムの拡張性や保守性も向上するので、ぜひマスターしましょう!