APPSHEETは、スプレッドシートなど表計算ソフトを基にしたアプリ作成ツールです。
そのため、表計算ソフトと同じくテーブルのカラムに関数を設定できます。
ただ、初めは慣れていないので、どうすればいいかわからないと思います。
慣れている人も、Excelやスプレッドシートでは使えるけれど、APSHEETでは使えないものがあって戸惑うでしょう。
そこで、APPSHEETでセットされている関数一覧やこれだけは理解しておいてほしい関数の使い方を紹介していこうと思います。
APPSHEET公式サイトで未回答な関数も載せています。
もし内容が間違っていたらごめんなさい…
そもそも関数って何です?
入れた内容から決まった結果を出す式のことだよ
関数をなんで使うの?
条件設定に沿って適切な内容を返してくれるから使う人が楽になるよ
記事の内容
1.関数の入力は、データのカラム画面で『FORMULA』と『INITIAL VALUE』にセットするのが基本です。
2.関数入力時にexampleで表示される関数一覧を説明付きで記載しています。
3.多すぎて嫌になるという人は、必須の関数をピックアップしました。
関数の入力箇所
APPSHEETではデータのカラム画面から関数を入力していきます。
カラムはAPPSHEETのメイン画面ですので早めに理解しておきましょう。
(※カラムの細部説明は別記事で)
カラム画面で関数を入力する箇所は次の2カ所です。
FORMURA(方式) 設定した関数の結果を自動で入力フォームに表示(入力不可)
INITIAL VALUE(初期値) 初期値として設定した関数の結果を自動で入力フォームに表示(編集可能)
入力時に設定した内容で記入されるのはどちらも同じですが、記載情報を修正するかしないかで使いわけてます。
どういった場合に使い分けるの?
入力者で変更させたくないデータはFORMURA、編集できるようにする場合はINITIAL VALUEを使うよ
具体的な使い分けの例を教えて?
作成日などはデータを開くたびに日付が変わってほしくないので、FORMURAに入れますね
逆に、更新日はINITIAL VARUEに入れておけば、編集のたびに入力日付が入ります
(作成日がごまかせなくなるんだな……ちっ!)
主キー(レコード(行)を個別に判別するためのテキスト)は、必ずINITIAL VALUEに『=UNIQUEID()』と入力してください
入力欄をクリックするとExpression Assistantがポップアップされます。
そこで、上の入力欄に直接入力をするか、「Examples」から選択して関数を入力します。
「Date explorer」に切り替えると各テーブルのカラム一覧が表示されます。
各テーブルのカラムを入れる際に便利です。
カラム画面以外でも、action設定画面で関数を入れることがあります。
(例:input()など)
これだけは理解してほしい関数
自分と同じように関数が多すぎてよくわからないと思う人もいると思います。
そんな人に向けて最低これだけ覚えればなんとかなると思った関数をピックアップしました。
今回紹介した関数を覚えれば複数シートのアプリ作成が可能になりますよ。
とにかくすぐにでも使ってみたい人はまずこれを覚えてほしい
6種類の関数
① UNIQUEID()
② REF_ROWS()
③ SELECT(テーブル名[カラム名],[ID]=[_THISROW].[ID])
④ [外部キー].[カラム名]
⑤ IF()やIFS()の条件文
⑥ TEXT()
UNIQUEID()
UNIQUEID()は、8桁の乱数がランダムで入る関数です。
(例:239b168f や 7221c198 など )
この関数は、APPSHEETを利用するうえで必ず使用します。
理由は、一意のIDを設定しないと各テーブルのリレーションを行えないからです。
この意味が理解できない場合、データモデリングの基礎について勉強したほうが、APPSHEETをうまく使えるようになります。
(データモデリングの説明は別記事にします。)
1や2といった順番で入れたほうがIDがわかりやすいと思います!
APPSHEETはオフラインで入力した情報をあとでデータ化します。
IDをランダムにしないと重複する可能性があるのでダメなんです。
どゆこと?
オフラインで別の人が同時期にデータ作成すると同じIDを使う可能性があります。
だから自動的にIDを振るように関数で予め設定しておかないといけないんですよ。
わかりました!
APPSHEETでは、カラム(列の項目)に半角英字で"ID"と入れると、自動的にINITIAL VALUEにUNIQUEID()が入るので便利です
REF_ROWS ()
REF_ROWS は、別テーブルで参照した際に元テーブルに設定される関数です。
参照側のテーブルでタイプをref(参照)と選択すると、自動的に元テーブルに『Related {参照テーブル名}s』という名前がついたカラムが追加されて、関数にREF_ROW(" {参照テーブル名} ", " {元テーブル名}ID")が入ります。
通常カラムは一列ですが、REF_ROWSでは指定テーブルの列をあたかもカラムにあるかのように見せているんです。
よくわからないです
テーブルとテーブルをつなげるためにバーチャルカラム(仮想列)を作ってるんです
まだよくわからないです
「いつの間にかカラムが出来るけど無視していい」と思っておけばとりあえずOKです
わかりました。無視します!!
・・・・・・・
わからないうちは「そういうものなんだろう」と無視してましたが、使っていくと理解するようになるから不思議です。
実際の画面遷移と合わせて理解したほうがわかると思うので、UXでのView、detail、Form、inlineの使い分けを理解したあとに、改めて関数の意味を理解すればいいと思います。
(UXの説明は別記事で説明します。)
SELECT(テーブル名[カラム名],[ID]=[_THISROW].[ID])
これはセットで覚えてほしいので式で紹介します。
SELECT()は、指定テーブルのカラムから指定条件に一致する値を取り出す関数になります。
[ID]=[_THISROW].[ID] は、「このレコード(行)のIDと同じID」です。
この式では「現在入力中のIDと同じレコードを取り出す処理」が行われます。
トランザクション(一時的な一連処理)データの集計に利用
具体例で説明します。
例 題
(やりたいこと)
商品テーブルには原価などの商品情報があり、見積テーブルへ商品原価の合計を出したい。
その場合の式はどうなるでしょうか?
(前提)
見積テーブルと商品テーブルを準備。
商品テーブルは見積テーブルの見積IDを外部キー(※)にして連携。
※見積テーブルのキーであるIDを商品テーブルで一つ選択して、商品IDと1対1になっている見積IDのこと
商品IDが商品テーブルの主キーに対して商品テーブルの見積IDは外からとってきたキーなので「外部キー」
【回答】
SUM(
SELECT(
商品[原価],
[見積ID]=[_THISROW].[見積ID]
)
【意味】
すべてを合計
以下の条件を選択
商品テーブルの原価カラムから取得
見積IDは作成中の見積IDと同じレコードの条件
この結果、作成中の見積にだけ関係する商品の原価の合計がそのセルに出るようになります。
こうすることで、商品テーブルで作成されたデータから該当するデータだけを集計して出すことが可能です。
なんでテーブルをわけるの?
データを管理しやすくするためだよ
一つのテーブルのほうがいろいろ移動しなくてわかりやすいです!
一個だけ作成するならそうだね。
何度も利用したり一括で変更するには、別テーブルにしたほうがいいんですよ。
ふ~ん・・・理解できました
(わかってないだろうなぁ・・・)
マスタデータとトランザクションデータなどリレーショナルデータベースを理解すれば、さらに複雑なデータ構築もできそうです。
[ 外部キー ].[カラム名]
これは外部キーテーブルのカラム値を表す式です。(関数でない?)
[外部キー].[カラム名] で『外部キーのテーブルに主キーの入っているレコード』から『指定したカラム』にある値を取り出します。
例 題
(前 提)
見積テーブルと顧客テーブルを準備
見積テーブルは顧客IDを外部キーにして連携
顧客テーブルには顧客名のカラムがある
(やりたいこと)
顧客テーブルにある氏名を見積テーブルのバーチャルカラムに出すのはどうするでしょうか?
(回 答)
[顧客ID].[顧客名]
特定のカラムは、関数入力画面のDeta Explorerでもカラムを指定できます。
テーブル名やカラム名は日本語をそのまま使用可能
IF() やIFS()の条件文
IF()やIFS()は、スプレッドシートなどでもよく利用される条件分岐の関数です。
IF文を重ねていけば複雑な条件分岐をどこまでも設定することができます。
APPSHEETも見た目がアプリなだけで中身は表計算ソフトです。
IF文を多用することが多いと思います。
連続IF文の一例
IF(条件文,true文,IF(条件文,IF(AND(条件1,条件2),true文,false文) ,false文))
TEXT()
TEXT()は、タイプの異なるデータを文字列にする関数です。
データを連携する際に関数を利用するうえでタイプが同種類である必要があります。
APPSHEETで頻出するエラーも「タイプの異なるカラムの使用」が多いです。
そのエラーを解決する一手段としてTEXT関数を使うことがあります。
Excelでもセルの書式設定を文字列にして入力値そのままで出した経験がないでしょうか。
APPSHEETでも、同じような場面に出くわした際には、TEXT関数でエラー回避を考えてみてください。
この6種類を理解すれば複数のシートを使ったアプリ作成を始められると思います。
他の関数が必要になったらAPPSHEET公式サイトで関数検索してみてください。
(なんでLOOKUPがないんだ!とかいろいろツッコみがありそうです…)
既存セットの関数
APPSHEETでは既存セットの関数がいくつも用意されています。
表計算ソフトで使用できる関数がそのまま使えないこともあります。
初めは参照しながら、少しずつ慣れていきましょう。
また、APPHEET公式サイトに詳しい関数の説明があります。
スティーブコイルさんという人が定期的に説明を挙げてくれているので、詳しい情報が知りたい方は以下のボタンから調べてみてください。
公式サイトでまとまった一覧がなかったので、ここでAPPSHEET関数をタイプ別にまとめました。
それぞれについて概略の説明を入れているので参考にしてみてください。
カラムタイプと合わないとエラーになるものがあるので、タイプと併せて理解すると使い方が早く覚えられます。
YES/NO
Yes/Noは、正しいか正しくないかを返すデータタイプになります。
Yes/Noでセットされている関数リストは以下のとおりです。
パターン | タイプ 結果 | 例 | 意味 |
---|---|---|---|
{constant} | Yes/No | TRUE | 常に”Yes”で返す |
{constant} | Yes/No | FALSE | 常に”No”で返す |
{value_1} = {value_2} | Yes/No | [test] = "text value" | 指定セルと指定セルが一致しているか返す |
{value_1} <> {value_2} | Yes/No | [test] <> "text value" | 指定セルと指定セルが一致しないか返す |
{value_1} > {value_2} | Yes/No | [test] > 100 | 指定セルより大きいか返す |
{value_1} >= {value_2} | Yes/No | [test] >= 100 | 指定セル以上か返す |
{value_1} < {value_2} | Yes/No | [test] < 100 | 指定セル未満か返す |
{value_1} <= {value_2} | Yes/No | [test] <= 100 | 指定セル以下か返す |
AND({cond_1}, .., {cond_n}) | Yes/No | AND([test] > 100, [test2] >= 10) | 指定セルの条件がどちらも満たすか返す |
OR({cond_1}, .., {cond_n}) | Yes/No | OR([test] > 100, [test2] >= 10) | 指定セルの条件がいずれか満たすか返す |
NOT({cond_1}) | Yes/No | NOT([test] > 100) | 指定セルの条件を満たさないか返す |
ISBLANK(value-or-list) | Yes/No | ISBLANK([test]) | 参照セルが空白であるかどうかを検証して返す |
ISNOTBLANK(value-or-list) | Yes/No | ISNOTBLANK([test]) | 参照セルが空白でないかどうかを検証して返す |
IN(value-to-match, list-to-check) | Yes/No | IN([test], LIST(value1, value2)) | 一致する値があるかリストからチェックして返す |
CONTAINS(text-that-contains, text-to-be-contained) | Yes/No | CONTAINS([test], "value_1") | 指定テキストが指定されたテキストに含まれかを返す |
STARTSWITH(text-that-starts-with, text-to-be-started-with) | Yes/No | STARTSWITH([test], "value_1") | 指定テキストの開始語句が同じかどうかを返す |
ENDSWITH(text-that-ends-with, text-to-be-ended-with) | Yes/No | ENDSWITH([test], "value_1") | 指定テキストの終了語句が同じかどうかを返す |
Yes/No関数は、IF関数と組み合わせて条件分岐で入れることが多いです。
複数の関数と組み合わせて要件に沿った条件分岐を設定してみましょう。
Math
Mathは計算用にセットされている関数がそろっています。
タイプがnumberとDecimalのカラムに適用されることが多いですね。
NumberとDecimalの使い分けはどうするんですか?
整数の場合はNumber、小数点の場合はDecimalにしますよ
カラムタイプがNumberとDecimal以外では計算できないんですか?
Priceやtextとかでも使えますね。時間の計算はTimeに準備されてますよ
カラムのタイプがTimeやDurationだと、直接NumberやDecimalのカラムで計算するとエラーになります
Mathで セットされている関数リストは以下のとおりです。
パターン | タイプ 結果 | 例 | 意味 |
---|---|---|---|
{constant} | Number | 1 | 常に” ”内の整数を返す (例:1) |
{constant} | Decimal | 1.12 | 常に” ”内の値を返す (例:1.12) |
LOG(value, [log-base]) | Decimal | LOG(100, 10) | 指定した数を底とする数値の対数を返す (例:対数”10を何乗したら100になるか”) |
LN | Decimal | LN(100) | オイラー数 e を底とする数値の対数を返す (例:4.605170186) |
LOG2(value) | Decimal | LOG2([値]) | 2を底とする数値の対数を返す |
LOG10(value) | Decimal | LOG10([値]) | 10を底とする数値の対数を返す |
MOD(dividend, divisor) | Number | MOD(5, 2) | 除算の剰余を返す (例:1 (5÷2=2…1)) |
CEILING(number-to-round-up) | Number | CEILING(126.85) | 小数点以下を切り上げ (例:127) |
FLOOR(number-to-round-down) | Number | FLOOR(126.85) | 小数点以下を切り捨て (例:126) |
ROUND(number-to-round) | Number | ROUND(826.645) | 小数点以下を四捨五入 (例:827) |
POWER(base, exponent) | Decimal | POWER(2, 4) | 指数でべき乗した数値を返す (例:16 (2の4乗)) |
ABS(numeric-value) | Number | ABS(-3.68) | 数値の絶対値を返す (例:3.68) |
SQRT(numeric-value) | Decimal | SQRT(16) | 正の数値の正の平方根を返す (例:4 (4の2乗)) |
DISTANCE(location1, location2) | Decimal | DISTANCE ("24.84, -122.35", "24.84, -122.35") | 2次元の2点(x1,y1),(x2,y2)間の距離を返す |
RANDBETWEEN(lower-bound, upper-bound) | Number | RANDBETWEEN(1, 100) | 下限以上、上限以下の整数の一様乱数を返す (例:56など) |
COUNT(list-to-count) | Number | COUNT(LIST(value1, value2)) | データセット内の数値の個数を返す |
SUM({List}) | Number | SUM([test]) | 一連の数値またはセルの合計を返す |
AVERAGE({List}) | Number | AVERAGE(LIST(value1, value2)) | データセット内の値の平均値を返す (テキストは無視される) |
MIN(list-to-choose-min-value-from) | Number | MIN(LIST(value1, value2)) | 数値のデータセットにおける最小値を返す |
MAX(list-to-choose-max-value-from) | Number | MAX(LIST(value1, value2)) | 数値のデータセットにおける最大値を返す |
STDEVP({List}) | Number | STDEVP(LIST(value1, value2)) | 母集団全体に基づいて標準偏差の推定値を計算 |
NUMBER(value-to-convert-to-number) | Number | NUMBER([test]) | 指定した値を整数に変換して返す |
DECIMAL(value-to-convert-to-decimal) | Decimal | DECIMAL([test]) | 指定した値を10進数に変換して返す |
セットに足し算などの例がありません。
スプレッドシートと同様に式を入れれば計算されます。
計算
・足し算:+ (例:[test1]+[test2])
・引き算:- (例:[test1]-[test2])
・掛け算:* (例:[test1]*[test2])
・割り算:/ (例:[test1]/[test2])
text
textは言葉のとおりテキスト用にセットされている関数です。
文字内の情報から指定条件で値を返す関数になります。
Textで セットされている関数リストは以下のとおりです。
パターン | タイプ 結果 | 例 | 意味 |
---|---|---|---|
"{constant}" | Text | "text value" | 常に” ”内のテキストを返す |
LEN(text) | Number | LEN([test]) | 指定文字列の文字数を返す |
CONCATENATE(text-value1, [text-value2, ...]) | Text | CONCATENATE(hello, [" ","world "]) | 文字列を別の文字列に結合 (例:hello world) |
LEFT(text-value, number-of-characters) | Text | LEFT([test], 1) | 指定した文字列の先頭から部分文字列を返す |
RIGHT(text-value, number-of-characters) | Text | RIGHT([est], 1) | 指定した文字列の末尾から部分文字列を返す |
FIND({Fragment}, {TextValue}) | Number | FIND("text value", [test]) | 大文字小文字を区別して、特定の文字列がテキスト内で最初に現れる位置を返す |
INITIALS(name) | Text | INITIALS("John Doe") | 指定した文字列のイニシャルを返す (例:JD) |
UPPER(text-to-convert-to-upper-case) | Text | UPPER(["otanisan") | 指定した文字列を大文字に変換 (例:OTANISAN) |
LOWER(text-to-convert-to-lower-case) | Text | LOWER(OTANISAN) | 指定した文字列を小文字に変換 (例:otanisan) |
SUBSTITUTE(text-to-search, text-to-replace, replacement-text)) | Text | SUBSTITUTE("Google Docs", "ogle", "od", 1) | 文字列内の既存のテキストを新しいテキストに置き換え(例:Good Docs) |
SPLIT(text-to-split, delimiter) | List | SPLIT("Google", "oo") | 指定した文字または文字列の前後でテキストを分割し、各部分を同じ行の別のセルに表示 (例:G ,gle) |
TRIM(text-to-trim) | Text | TRIM(" Google Docs") | 指定した文字列内の先頭と末尾のスペースを削除(例:Google Docs) |
MID(text, start-position, number-of-characters) | Text | MID("Google Docs", 8, 3) | 文字列のセグメントを返す (例:Doc) |
EXTRACT(thing-to-extract, text-to-extract-from) | List | EXTRACT([test], "value_1") | 指定した文字列から指定セルを選択 |
EXTRACTPRICES(text-to-extract-from) | List | EXTRACTPRICES([test]) | 指定したセルから価格を抜き出す |
EXTRACTCHOICE({*}) | List | EXTRACTCHOICE([test]) | 指定したセルから選択を抜き出す |
EXTRACTMENTIONS({*}) | List | EXTRACTMENTIONS([test]) | 指定したセルから@以下を抜き出す |
EXT(value-to-convert-to-text, [format-string]) | Text | TEXT("01/09/2012", "mm/dd,yyyy") | 指定した表示形式に従って、数値をテキストに変換(例:01/09,2012) |
APP({*}) | App | ? | 公式の説明待ち |
さまざまなタイプがあるので、カラム画面でのタイプ設定は注意
Time
timeは、時間の値を処理する際に使用する関数になります。
NumberやDecimalとの相性が悪く、併用できないので工夫が必要です。
Timeでセットされている関数リストは以下のとおりです 。
パターン | タイプ 結果 | 例 | 意味 |
---|---|---|---|
"{HH:MM:SS}" | Time | "07:15:33" | 常に指定時間を返す |
"{MM/DD/YYYY HH:MM:SS}" | DateTime | "04/22/1970 12:15:44" | 常に指定時間を返す |
"{MM/DD/YYYY}" | Date | "04/22/1970" | 常に指定時間を返す |
"{HHH:MM:SS}" | Duration | "002:00:00" | 常に指定期間を返す |
NOW() | DateTime | NOW() | 現在日時を返す |
UTCNOW() | DateTime | UTCNOW() | グリニッジ標準日時を返す |
TODAY() | Date | TODAY() | 現在日付を返す |
TIMENOW() | Time | TIMENOW() | 現在時刻を返す |
EOMONTH(start-date, number-of-months-away) | Date | EOMONTH([test], 1) | 起算日から指定した月数だけ先(マイナスなら後)の月の最終日の日付を返す |
EWOMONTH(start-date, number-of-months-away) | Date | EWOMONTH([test], 1) | 起算日から月の最後の平日の日付を返す |
EOWEEK(date) | Date | EOWEEK([test]) | Dateからの週の最終日の日付を返す |
WORKDAY(start-date, number-of-days-away) | Date | WORKDAY([test], 1, LIST(value1, value2)) | 非就業日を除く計算日を返す |
DATE(value-to-convert-to-date) | Date | DATE([日時]) | 日付、日時、または時刻からの日付を返す |
TIME(value-to-convert-to-time) | Time | TIME([日時]) | 日付、日時、または時刻からの時刻を返す |
DATETIME(value-to-convert-to-date-time) | DateTime | DATETIME([作成日]) | 日付、日時、または時刻からの日時を返す。 (日付のみの場合は午前12:00:00) |
{date} + {number-of-days} | Date | [作成日] + 1 | 日付に指定数を足して日付で返す |
{date} + {duration} | Date | [作成日] + "002:00:00" | 日付に指定期間を足して日付で返す |
{date} - {number-of-days} | Date | [作成日] - 1 | 日付に指定数を引いて 日付で 返す |
{date} - {duration} | Date | [作成日] - "002:00:00" | 日付に指定数を引いて 日付で 返す |
{date} - {date} | Duration | [作成日] - (TODAY() + 1) | 日付に指定日付を引いて期間で 返す |
{datetime} + {number-of-days} | DateTime | [最終更新日] + 1 | 日時に指定数を足して日時で返す |
{datetime} + {duration} | DateTime | [最終更新日] + "002:00:00" | 日時に指定期間を足して日時で返す |
{datetime} - {number-of-days} | DateTime | [最終更新日] - 1 | 日時に指定数を引いて日時で返す |
{datetime} - {duration} | DateTime | [最終更新日] - "002:00:00" | 日時に指定期間を引いて返す |
{datetime} - {datetime} | Duration | [最終更新日] - (NOW() + 1) | 日時に指定日時を引いて期間で返す |
{duration} + {number-of-hours} | Duration | "002:00:00" + 1 | 期間に指定時間を足して返す |
{duration} + {duration} | Duration | "002:00:00" + "002:00:00" | 期間に指定期間を足して返す |
{duration} - {number-of-hours} | Duration | "002:00:00" - 1 | 期間に指定時間を引いて返す |
{duration} - {duration} | Duration | "002:00:00" - "002:00:00" | 期間に指定期間を引いて返す |
{time} + {number-of-hours} | Time | "07:15:33" + 1 | 時間に指定時間を足して返す |
{time} + {duration} | Time | "07:15:33" + "002:00:00" | 時間に指定期間を足して返す |
{time} - {number-of-hours} | Time | "07:15:33" - 1 | 時間に指定時間を引いて返す |
{time} - {duration} | Time | "07:15:33" - "002:00:00" | 時間に指定期間を引いて返す |
{time} - {time} | Duration | "07:15:33" - (TIMENOW() + 1) | 時間に指定時間を引いて返す |
HOUR(duration) | Number | HOUR("002:15:30") | 期間から”〇”時を返す (例:2) |
MINUTE(duration) | Number | MINUTE("002:12:20") | 期間から”〇”分を返す (例:12) |
SECOND(duration) | Number | SECOND("002:56:45") | 期間から”〇”秒を返す (例:45) |
TOTALHOURS(duration) | Decimal | TOTALHOURS("002:30:00") | 期間を時間換算で返す(例:2.5) |
TOTALMINUTES(duration) | Decimal | TOTALMINUTES("002:00:00") | 期間を分換算で返す(例:120) |
TOTALSECONDS(duration) | Number | TOTALSECONDS("002:00:00") | 期間を秒換算で返す(例:7200) |
DAY(date) | Number | DAY([作成日]) | 日付から”〇”日を返す |
MONTH(date) | Number | MONTH([作成日]) | 日付から”〇”月を返す |
YEAR(date) | Number | YEAR([作成日]) | 日付から”〇”年を返す |
WEEKDAY(date) | Number | WEEKDAY([作成日]) | 曜日数(1=日曜日)を返す |
WEEKNUM(date) | Number | WEEKNUM([作成日]) | 週番号(1=1/1,53=12/31)を返す |
ISOWEEKNUM(date) | Number | ISOWEEKNUM([作成日]) | ISO週番号を返す |
EOMONTH(start-date, number-of-months-away) | Date | EOMONTH([作成日], 1) | 起算日から指定した月数だけ先(マイナスなら後)の月末日の日付を返す |
EWOMONTH(start-date, number-of-months-away) | Date | EWOMONTH([作成日], 1) | 起算日から月の最後の平日の 月末日の日付を返す |
EOWEEK(date) | Date | 既出 | |
WORKDAY(start-date, number-of-days-away) | Date | 既出 | |
DATE(value-to-convert-to-date) | Date | 既出 | |
TIME(value-to-convert-to-time) | Time | 既出 | |
DATETIME(value-to-convert-to-date-time) | DateTime | 既出 |
時間計算は整数とは異なるので、タイプを合わせることを忘れないでください。
Lists
Listは列のデータをまとめて取り出す処理に使用する関数になります。
通常はセルには一つの値が入りますが、Listは複数の値を一つにしてまとめてくれる機能です。
Listは複数の値があるので、それぞれの値の順番で番号を1,2,3~と持っています。
Listでセットされている関数リストは以下のとおりです。
パターン | タイプ結果 | 例 | 意味 |
---|---|---|---|
{constant} | List | LIST(value1, value2) | 常にリストを返す |
table_name[{column_name}] | List | 社員[ID] | 常にカラムリストを返す |
table_name[{column_name}] | List | 社員[かな] | 常にカラムリストを返す |
SPLIT(text-to-split, delimiter) | List | SPLIT([test], " ") | テキストを指定値で分割して返す |
EXTRACT(thing-to-extract, text-to-extract-from) | List | EXTRACT("prices", "[test]") | テキストから指定内容と一致する値を抽出 |
EXTRACTPRICES(text-to-extract-from) | List | EXTRACTPRICES([見積内容]) | テキストから値段を抽出 |
EXTRACTNUMBERS({*}) | List | EXTRACTNUMBERS([ID]) | テキストから数字を抽出 |
EXTRACTPHONENUMBERS({*}) | List | EXTRACTPHONENUMBERS([得意先情報]) | テキストから電話番号を抽出 |
EXTRACTCHOICE({*}) | List | EXTRACTCHOICE([作成日]) | テキスト内に一つのはい/いいえを抽出 |
EXTRACTDATES({*}) | List | EXTRACTDATES("March") | テキスト値内の日付のリストを抽出 |
EXTRACTTIMES({*}) | List | EXTRACTTIMES("14th at 4pm.") | テキスト値内の時間値のリストを抽出 |
EXTRACTDATETIMES({*}) | List | EXTRACTDATETIMES("tomorrow at 4pm.") | テキスト値内のDateTime値のリストを抽出 |
EXTRACTDOMAINS({*}) | List | テキスト値内のDomain値のリストを抽出 | |
EXTRACTDURATIONS({*}) | List | テキスト値内のDuration値のリストを抽出 | |
EXTRACTEMAILS({*}) | List | テキスト値内のEmail値のリストを抽出 | |
EXTRACTHASHTAGS({*}) | List | テキスト値内のHashtag値のリストを抽出 | |
EXTRACTMENTIONS({*}) | List | テキスト値内のMention値のリストを抽出 | |
LIST([list-element1, list-element2, ...]) | List | LIST(7, 4, 95) | カンマでリストを作成 |
SORT(list-to-sort, from-high-to-low?) | List | 昇順/降順でリストを並び替える | |
SELECT(list-to-search, select-condition, [omit-duplicate-results?]) | List | SELECT(Students[First Name], TRUE) | テーブルまたはスライスの行から列の値を収集 |
REF_ROWS(table-name, reference-column-name) | List | REF_ROWS("Order Details", "Order ID") | テーブルまたはスライスから関連する行を収集 |
FILTER(table-name, filter-expression) | List | FILTER("Products", ([Price] < 100)) | テーブルまたはスライスの行を選択 |
ORDERBY(key-or-ref-list, order-by-column1, [use-descending-order1, order-by-column2, use-descending-order2, ...]) | List | ORDERBY(Products[Product ID], [Product Name]) | 行参照を並べ替える |
TOP(list, number-of-top-elements-to-take) | List | TOP(LIST("Red", "Yellow", "Green"), 2) | 指定数のリスト項目を上から抽出 |
UNIQUE(list) | List | UNIQUE(LIST(1, 1, 2, 1, 3)) | リスト内のユニーク値を抽出 例:1,2,3 |
INTERSECT(list1, list2) | List | INTERSECT(LIST("Red", "Blue", "Green"), LIST("Orange", "Blue")) | 2つのリストに共通する項目を抽出 |
ANY(list-to-choose-one-value-from) | List | ANY(Students[Name]) | 任意のリスト項目1つを抽出 |
GCAL_MEETINGS_FROM({Text},{Email}) | List | 送信されたEmailから出席依頼を検索して抽出 | |
GCAL_MEETINGS_WITH({Text},{Email}) | List | 顧客が出席者である会議出席依頼を検索して抽出 | |
GCAL_MEETINGS_AT({Text},{Text}) | List | ? | 公式の説明待ち |
List関数は、タイプList以外では使用できないので注意してください。
Deep Links
DeepLinkは、現在のアプリの別ビューや別アプリに移動するために使用する関数になります。
別アプリと連携するには必須の関数です。
パターン | タイプ結果 | 例 | 意味 |
---|---|---|---|
{constant} | APP | "#view=XXXXXXXXXX" | 常に指定APPに移動 |
{constant} | APP | "#view=Assistant" | 常に指定APPに移動 |
LINKTOAPP(app-name-or-id) | APP | LINKTOAPP("AppGallery-XXXXX") | 指定したアプリIDに移動 |
LINKTOVIEW(view-name, [app-id]) | APP | LINKTOVIEW("My Apps", "AppGallery-XXXXX") | 指定したアプリIDへのビューに移動 |
LINKTOROW(row-key, view-name, [app-id]) | APP | LINKTOROW("row1234", "Some Detail View", "MyApp-XXXXX") | 指定アプリIDのビューのキー列の値を持つ行に移動 |
LINKTOFORM(form-view-name, [column-name1, column-value1, column-name2, column-value2, ...], [app-id: TEXT]) | APP | LINKTOFORM("Some Form View", "Date", TODAY(), "Color", [_THISROW].[Color]) | 指定アプリIDの入力フォームに移動 |
LINKTOFILTEREDVIEW(view-name, filter-condition) | APP | LINKTOFILTEREDVIEW("Some Table View", [Date Column] = TODAY()) | 指定行の値と一致する行のみを含むビューに移動 |
LINKTOPARENTVIEW() | APP | LINKTOPARENTVIEW() | 親ビューに移動 |
作成したアプリ同士を繋げたりできるので複雑なシステム構築を目指すためには必須になってきます。
セキュリティーや利用者をアプリで分別する際には便利な機能です。
個人的には同じブック内でリレーション(シートを連結)したほうが、読み込み速度が速くていいと思いました。
(あくまで個人的な意見です)
DEEPLINKSの関数は、別アプリとの接続で入力した関数に問題があってもエラー表示されないので注意
Other
Otherは、上記タイプに分類されないタイプに分類される関数です。
例としてはLatlong(地図情報)とかになります。
パターン | タイプ 結果 | 例 | 意味 |
---|---|---|---|
INDEX(list-to-search, position-of-item) | * | INDEX(LIST(value1, value2), 1) | リストから特定の値を返す |
MAXROW({Text},{Text},{Yes/No}) | Ref | MAXROW("Products", "Discount") | 列の値が最大の行を返す |
MINROW({Text},{Text},{Yes/No}) | Ref | MINROW("Products", "Discount") | 列の値が最小の行を返す |
USERNAME() | Name | USERNAME() | 現在のユーザー名を返す (空白で返る場合が多い) |
USEREMAIL() | USEREMAIL() | 現在のユーザーのメアドを返す | |
USERLOCALE() | Text | USERLOCALE() | 現在のユーザーのロケール(使用言語とか)を返す |
USERTZOFFSET() | Number | USERTZOFFSET() | 現在のユーザーの UTC(世界時)を返す |
USERROLE() | Text | USERROLE() = "Admin" | 現在のユーザーの管理権限を取得 |
IF(condition-to-check, value-if-true, value-if-false) | * | 同左 | 条件に対して正否の場合に指定した値を返す |
IFS(condition1, value1, [condition2, value2, ...]) | * | 同左 | 複数条件を順に調べた結果に応じた値を返す |
SWITCH(value-to-compare, match-value1, match-result1, [match-value2, match-result2, ...], default-result) | * | 同左 | 指定した値と一致する場合かどうかで指定した計算式の結果を返す |
LOOKUP(match-value, table-name, match-column, return-column) | * | LOOKUP([_THISROW], "Managers", "Location", "Name") | テーブルの行から列の値を取得 |
UNIQUEID({Text}) | Text | UNIQUEID() | ユニーク(他と被らない任意の値)IDを返す |
HERE() | LatLong | HERE() | 現在の位置情報を返す |
LAT(latlong-or-xy-value) | Decimal | 緯度を返す | |
LONG(latlong-or-xy-value) | Decimal | 経度を返す | |
HYPERLINK(target-url, link-text) | Url | HYPERLINK("https://www.google.com", "Google") | リンクが入る |
LINKTEXT(hyperlink) | Text | 文字がリンクになるテキストを抽出 | |
LINKURL(hyperlink-value) | Text | URLがリンクになるテキストを抽出 | |
ENCODEURL(text-in-url) | Text | URLエンコード(URLで認識できる値に変換)されたテキストを返す | |
USERSETTINGS(setting-name) | * | 名前付きのユーザー設定 値を返す | |
INPUT({Text},{*}) | * | INPUT(Quantity, 0) | 一意の入力名にこの式に関連するデフォルト値を返す |
TEXT_ICON(text-to-convert-to-icon) | Thumbnail | 入力テキストを灰色正方形または円の画像で返す | |
SNAPSHOT(deep-link) | Image | SNAPSHOT(LINKTOVIEW("MAP")) | ビューのスクリーンショットを作成し、ドキュメントに埋め込む |
CONTEXT(context-option) | Text | CONTEXT("View") | 実行中のアプリに関するコンテキスト情報を返す |
OCRTEXT(image) | Text | OCRTEXT([Your Image Column]) | 画像からすべてのテキストを抽出 |
LATLONG(latitude, longitude) | LatLong | 緯度経度の数値を返す | |
XY(x-coordinate, y-coordinate) | XY | ? | 公式の説明待ち |
Qther関数は、DeepLink関数と同様で、表計算ソフトで見慣れない関数が多いです。
このタイプの関数を使いこなせるようになればAPPSHEET関数は卒業といっていいでしょう。
APPSHEETは基本的にスプレッドシートの関数を知っていれば応用できるんですね。
そうですね。Excelなどの表計算に慣れている人がすんなりアプリ作成できるのがいいところです。
だったら逆に慣れている人はVBAで構築したほうがいんじゃないの?
DEEPLINKやOTHERの機能などは表計算ソフトではできないですよ。
UIの優れたアプリを使ってクラウドで業務データが管理できるのはAPPSHEETの利点じゃないかな
じゃあAPPSHEETを覚えて自慢してやろう
ほどほどにしないと嫌われるよ・・・
まとめ
今回はAPPSHEETの関数を紹介しました。
Excelやスプレッドシートと同じ関数を応用できるものもあります。
慣れている人であれば、さほど違和感なく活用できるのではないでしょうか。
一方で、APPSHEET独自の関数や表計算ソフトと若干異なる式のものもあります。
利用しながら自分がよく使う関数を覚えていってください。
それでは~。