(書きかけ)【Appsheet】よく使ってる数式

2022/12/14 18:30
さらに追記。
データ取得・リスト取得に追加
判定・分岐を追加
一部の数式が見やすくなるように改行・インデントを追加しました。

THE 書きかけです
更新するかは不明なので期待しないでください。
あと、間違っていたり情報不足がある可能性もあります。

Appsheet Helpに記載されているものも含まれているので
英語が苦じゃない、自動和訳でも読めるならそちらも参照。

あと、判定結果を TRUE/FALSE で記載していますが
Appsheetだと Yes/No 表記だったりします。

・ユニークキー
UNIQUEID()
16進数8桁(00000000~FFFFFFFF)の値を登録する。
値はランダムでテーブルKEYにも使いやすい。
英字部分は小文字(a~f)で表示される
EXCEL数式だと =LOWER(DEC2HEX(RANDBETWEEN(1,2^32-1),8))
重複なしみたいな動作になる。

・ログ記録用の数式
CONTEXT("device")
Universally unique identifer(UUID)と呼ばれる識別番号を取得する。

CONTEXT("view")
処理を行った画面の名前を取得する。
DisplayNameを使用した場合に反映されるかは不明

CONTEXT("host")
処理を行った時のアプリもしくは端末の種類が取得される。
ブラウザから入力した場合は「Browser」、
アプリから入力した場合は「Device」、
Automationで自動登録した場合は「Server」となる

CONTEXT("AppName")
アプリを作成した際に生成されたフォルダ名を取得すると思われる。
格納フォルダ名はアプリの編集メニューの

Info -> Propeties タブ -> App Properties -> Default App Folder

で確認できる
※Google Driveなら /appsheet/data 配下のフォルダで
 アプリ名-1234567 の形式で作成されている

CONTEXT("Table")
パラメータ通り、処理中のテーブル名を取得する。
他テーブルで処理を行う場合に誤認しやすいので注意

HERE()
GPSから緯度経度を 緯度, 経度 を取得する
ただし、取得方法の仕様により(時間の)1分くらいの誤差が出る模様
GPSを起動していない場合、「0.000000, 0.000000」が登録される

USEREMAIL()
使用者のメールアドレスを取得する。 

※NOW()は時間系の方に移動しました

・テキスト系
CONCATENATE(arg1, arg2・・・argN)

いわゆる文字連結。
argごとに列、または、文字列を指定することで繋げた文字が生成される
EXCEL数式と同様に & でも文字連結が可能だが一部使用できない場面がある為、覚えておくと回避策として利用できる。

RIGHT("0000" & [数値列], 4)
RIGHT関数は指定の文字数(それ以下の場合文字列全部)を右から取得する関数。
上記の関数は数値列をゼロ埋めで取得したい場合に使用する。
今回は前ゼロで4桁取得する。
上記の例では[数値列]の値が 15 だった場合は、 0015 で取得できる
※EXCELでも使えるし、REPT("0", 4)を使えばで0を複数入力する必要が無くなる(ただしREPT関数はAppsheetでは使えない)

TEXT([日時], "YYYY/MM/DD HH:MM:SS")
日時を指定のフォーマットで変換する
Appsheetが海外のツールな為なのか
日付の形式が M/D/YYYY、時間の形式が HH:MM:SS AM/PM 
表示されるので日本でよく使う西暦始めにする場合は、
上記の数式で Text 変換で処理する必要がある。
ちなみにDate型、DateTime型に「Use long Date Format」という項目が
あるがスラッシュが取れて月の名前に変わるだけである。
(例:12/6/2022  ⇒  Dec 6, 2022)

また、Appsheetの第2引数はDate、DateTime、Timeの
日付・時刻系のデータ型のみ使用可能。
EXCELのような使い方は上記の型を除いて別の手法を検討する必要がある。

・時間系
NOW()
その名の通り現在日時を取得する。

SECOND(TIME(NOW()) - "00:00:00")
現在時刻や日時の秒を取得するときに使用する。

DATETIME(
  TEXT([日時列] , "YYYY/MM/DD HH:MM") & ”:” &
  RIGHT("00" & [秒列],2)
)
日時列を秒入力可能な状態で YYYY/MM/DD HH:MM:SS に変換するための数式。
スマホ版Appsheetは初期値を除いて手入力による秒の設定ができない為、
厳密な時間を記録したい場合は日時列と秒列と表示列を用意し、表示列側に上記の式を当てはめる必要がある。
なお、PC版ブラウザでは秒入力が可能なため運用環境によって使い分けするか判断すること。

・データ取得、リスト取得
LOOKUP(検索値, "テーブル名", "検索列", "取得列")
自・他テーブルから検索をかけて値を取得する。
検索値は [_THISROW].[列名] もしくは固定値で検索をかける。
行指定が無いLOOKUPそのもの
ANY(SELECT(テーブル名[取得列], [検索列] = 検索値, TRUE))と同等の処理とのこと

SELECT(テーブル名[取得列], 抽出条件, Distinct可否)
SQLのSELECT文のように列と条件を指定して該当データのListを取得する。
抽出条件にて処理元テーブルの値を呼び出す際は、
[_THISROW].[条件列] に指定しないと抽出側のテーブル項目が指定される
(大体エラーになるが、同名の項目があると通ってしまうので注意)
抽出条件には結果的にTrue/False(もしくはYes/No)になるならば、
ANDやOR、IF()やIN()が使える
Distinct可否は重複データを排除するならTRUE、許容する(全取得)なら
無指定または、FALSEを指定する。

ANY(SELECT(テーブル名[取得列], 抽出条件, Distinct可否))
LOOKUPと同等だがこちらは条件を複数指定できるので、
単一条件ならLOOKUP、複数条件ならANY・SELECTと使い分けると良い

FILTER("テーブル名", 抽出条件)
SELECT(テーブル名[KEY項目], 抽出条件, TRUE)
と同等。
主にRef列の[Valid If]で他テーブルKEYを絞り込むときに必要。
簡易的な記述ができるため、SELECTが必要ない場合はこれで対応する。

ORDERBY(
  FILTER("テーブル名", 抽出条件),
  [ソート項目1],  逆順指定1,
  [ソート項目2],  逆順指定2,
  ・・・,
  [ソート項目N], 逆順指定N
)
上記のFILTER()の場合、並びがバラバラになるので整列させるのに使用する。SQLのORDERBY句と同じもの
逆順指定はTRUEが逆順(DESCending)、FALSEが正順(ASCending)になるのでSQLのORDERBYの指定イメージと異なるので注意。
なお、オプション値かつデフォルト値がFALSEなので指定しなければ正順のままになる。

LIST("文字列1", "文字列2", [列], ・・・)
カンマ区切りの一覧データを作成する関数。
EnumやEnumListを作成する際に[Valid If]にSELECTやLIST関数を使うと選択肢を逐一入力する必要が無くなる。
使用した関数はメモ帳やEXCELにメモしておくと再利用しやすい

・判定・分岐
ISBLANK([列])
ISNOTBLANK([列])

該当列または、情報が空白であることを判定するための数式。
[列] = ""[列] <> "" でも代用可能
[Show?]や[Editable?]で使用すると表示/非表示、編集可否を設定するときにも使用する。
IFやIFSでも多用するので何かと使用する機会が多い数式である。

SWITCH(
  検証項目,
  ケース1, ケース1がTRUEの結果,
  ケース2, ケース2がTRUEの結果,
 ・・・,
  デフォルト値
)
VBAのSelect~Case文, C系などのSwitch~Case文と同等の処理
検証する項目の値によって結果を変えたい場合に使用する。
IFS()でも同様の処理ができるがこちらは複数の判定項目・判定式がある場合に使用する。
最後のデフォルト値は必須項目。すべてのケースがFALSE(該当しない)の場合に結果として出力される。

IF(検証式, 検証式がTRUEの結果, 検証式がFALSEの結果)
IFS(
  検証式1, 検証式1がTRUEの結果,
  検証式2, 検証式2がTRUEの結果,
 ・・・,
  検証式N, 検証式NがTRUEの結果
)
条件式の定番のIF
IFSはEXCEL2019から使用可能。Google SpreadSheet でも使用可能。
IFの場合は、一つの検証結果からTRUE時とFALSE時で結果を出力するが
IFSの場合は、複数の検証式にて最初にTRUEとなった結果を出力する。
IFSでELSEを表現したい場合は最後の検証式を TRUE にすることで対応可能

この記事が気に入ったらサポートをしてみませんか?