AppSheetの関数については私の探し方がまずいのか、検索してもスプレッドシートの関数がヒットするばかりで肝心のAppSheetの関数にはなかなかたどり着けません。関数の種類も少なくちょっとした計算でも複数の関数の組み合わせが必要になります。今回はいくつかの関数を組み合わせて年齢計算をしてみます。
1.今回の目標
下のサンプルは名簿の登録アプリです。一覧ビュー「シート1」から登録用のビュー「シート1_Form」に移動して、各項目を入力後 [Save] をタップすると、「シート1_Detail」に入力内容が確認表示される仕組みです。赤枠で示した部分、生年月日に年齢を併記するのが今回のゴールです。
2.仮想列の追加
「生年月日」列は入力用です。入力用の列に Formula を設定することは基本的にできないようです。仕方がないので表示用に仮想列「生年月日(年齢)」を追加して、「シート1_Detail」では「生年月日」は表示しないで仮想列を表示することにします。
(1)カラム一覧の右上 [Add Virtual Column] をクリックします。
(2)表示されたフォームの Column name に「生年月日(年齢)」を入力します(ColumnNameに括弧が使えるのは驚きです)。
(3)App fomula に表示する文字列をセットするには赤枠部分をクリックします。
(4)表示されたフォーム(Expression Assistant) に表示する文字列を関数で作成していきます。内容は次の項で説明します。
3.表示する文字列を設定する
ここで計算する年齢は世間一般に使われる「誕生日で1つ年を取る」ものとします。法律で定められた年齢「誕生日の前日に年を取る」とは違いますので注意してください。しくみは次のとおりです。
(1)number関数とtext関数を使って生年月日を8桁の数値に変換
number(text([生年月日],"yyyymmdd")) 例:1973/04/03 → 19730403
(2)同様に今日の日付を8桁の数値に変換
number(text(today(),"yyyymmdd")) 例:2022/03/10 → 20220310 (今日は2022/03/10)
(3)差を10000で割る
(number(text(today(),"yyyymmdd"))-number(text([生年月日],"yyyymmdd")))/10000 例:(20220310 - 19730403) / 10000 → 48.9907
(4)floor関数で小数点未満を切り捨てる
floor( (number(text(today(),"yyyymmdd"))-number(text([生年月日],"yyyymmdd")))/10000 ) 例:[(20220310 - 19730403) / 10000] → 48
(5)text関数で文字列に変換
text( floor( (number(text(today(),"yyyymmdd"))-number(text([生年月日],"yyyymmdd")))/10000 ) ) 例:text([(20220310 - 19730403) / 10000]) → "48"
(6)concatenate関数で生年月日と括弧つきの年齢を結合
concatenate( text([生年月日],"yyyy/mm/dd"), "(", text( floor( (number(text(today(),"yyyymmdd")) - number(text([生年月日],"yyyymmdd"))) / 10000 ) ), ")" ) 例:1973/04/03生 → "1973/04/03(48)"
(7)生年月日が未入力のときは ""(長さゼロの文字列)とする
if(isnotblank([生年月日]), concatenate( text([生年月日],"yyyy/mm/dd"), "(", text( floor( (number(text(today(),"yyyymmdd")) - number(text([生年月日],"yyyymmdd"))) / 10000 ) ), ")" ), "" )
これで完成です。フォーム右下の [Save] をクリックして保存します。
戻ったフォームで [Done] をクリックすると仮想列が追加されます。
4.ビューに表示するカラムや順序をカスタマイズする
この記事の最初に示したビュー「シート1_Detail」に表示するカラムや順序をカスタマイズするには、左ペインの UI で Views タブを選択します。もし「シート1_Detail」が見つからないときは [Show system views] をクリックします。
Ref Views の中にある「シート1_Detail」をクリックします。
「シート1_Detail」のオプション一覧が表示されます。Column order では表示するカラムや順序を自由に設定できるので、「生年月日」の代わりに仮想列「生年月日(年齢)」を設定しましょう。
これで作業はすべて終了しました。このページの先頭で示した動作がスマホで確認できるはずです。
5.最後に
AppSheet については文献がまだまだ少なく、おまけに開発環境が英語なのでなかなか取っ付きにくいと思います。私は Edge を使っていますが、英文は右クリックで翻訳しながら作業しています。最近のブラウザはすごいです。英文が表示されている同じ場所に翻訳されたものが表示されるのですから。
ノーコードについては間違いなくさらに進んでいくでしょう。これからは先達が練り上げてきたコードを利用(活用)する時代です。いわゆる車輪の再発明は必要ありません。コードは再利用するのが本当の使い方です。
ノーコード(ローコードでもいい)の将来が楽しみです。