GAS実行アプリ

appsheetも所謂ノーコードアプリなため機能も限定的になります。

あともう少しこれができたらいいなぁ。

 

もし、もう少しがGAS(google apps script)で実現できる機能であれば、

こういったappsheetの構成はいかがでしょうか。

 

・概要

 ①GAS実行フラグ判定用のシートを作成

 ②appsheetのBehaviorで実行フラグのcolomunを "1" に変更するBehaviorを作成

 ③appsheetのAutomationで実行フラグを条件にGASを実行

 ④呼び出したGASの処理の最後に実行フラグをリセット

 

邪道と言われるとは思いますが、なんだかんだUIを自動生成してくれるappsheet

個人的にはそれだけでもかなり優秀なツール。

一方で、この形式によるGASの実行はもう少しを解決する1つの手段だと思います。

 

〇 フラグ判定用のシートの作成

 各columunの説明

 [GAS] ただの名称。appsheetのUI上の表示用

 [flg] Automationの判定。デフォルトは0。1に変更時にフラグ判定

 [Row] flgリセットのGASの簡略化のため。リセットする行の引数

 

〇 Behaviorの設定

 Behaviorの名前はなんでもOK

 Do thisで画像のものを選択し、set the valuesとして

 実行時に[flg]に【1】を入力するルールにする。

 

〇 Automationの設定

 Automationのeventは、

 All changes とし、 Conditionを [flg] = "1"とする。

 

 processは、

 call a script とし、 対象となるGASを選択します。

 今回のサンプルではGASが実行できます、というものなので1つのGASを

 実行する形となっています。

 本来であれば、[Row]を引数としているので、呼び出すGASの最初の処理で

 Rowの値により呼び出す関数を設定することで複数のGASを実行することができます。

 

 ※GASを実行し、flgのリセットまでのGASの事例 

function myFunction(rowSet) {
  
  //ここのRow(rowSet)の値で分岐を入れ、実行するGASを分岐
  //if(rowSet == "2") {
  //  Function1;
  //} else if(rowSet == "3") {
  //  Function2;
  //}

  const ss = SpreadsheetApp.openById('appsheetのスプレッドシートのID');
  const sheet = ss.getSheetByName('シート名');
  
  //flgのcolumnの値を 1 ⇒ 0 に戻す
  sheet.getRange(rowSet3).setValue('0');

}

もし興味があれば試してみてくださいね!

 

 

 

 

 

 

 

一定期間のデータの抽出(スライス)

業務管理にappsheetを活用しているとこういう機能が必要になってくると思います。

 

スライス機能では【Row filter condition】に関数を設定することで、

データの抽出が可能です。

例えば、進捗管理をするために進捗のColumnsを作成し、

予定・対応中・完了のような進捗管理をする場合。

完了した業務は表示であれば、

 

[進捗] <> "完了"

 

と関数を入力することで実現することができます。

簡単ですね!

この関数は、『進捗』というカラムのデータが『完了』ではないという条件

を示す関数となります。

※ <>はイコールの否定です。

 

話が少し逸れましたが、同様に本題の一定期間のみ表示したい場合の関数です。

基本的には当日の日付を元にすることになると思います。

例えば、今日から前後1か月のデータのみ抽出をしたい場合です。

※以下の記載は厳密には1か月ではなく、30日です。

 

AND(

 HOUR( [日付] - TODAY() ) / 24 < 30,

 HOUR( [日付] - TODAY() ) / 24 > -30

)

 

この関数についての説明です。

『AND()』の関数は、括弧内に記載して関数を全て満たす場合という関数です。

日付の差が30より大きいか、小さいかの条件を設定しています。

ここでポイントですが、appsheetで日数の差等を計算する場合は

『HOUR()』関数を使用します。

上記の関数では、『日付』というColumnan(TypeはDate)と

当日の日付(TODAY())の差をHOUR()関数で換算し、

24時間で割ることで日数を算出することができます。

 

これはこの形で覚えてしまう方がいいかなと思いますね。

考え方としては難しくはないと思いますので、一度知ってしまえば簡単だと思います。

 

 

また、少し応用例として。

毎月の定例業務ではなく、年間の定例業務に関して管理をしたい。

そういう場合に全ての業務をappsheet内に登録をし、

翌年以降も予定が近づいた場合に自動的に表示をしたいときは

以下のようにするといいかと思います。

※実際に私が作成した社内の業務管理アプリでも使用もしています。

 

IF(

 YEAR( [日付] ) >= YEAR( TODAY() ),

 AND(

  HOUR( [日付] - TODAY() ) / 24 < 30,

  HOUR( [日付] - TODAY() ) / 24 > -30

 ),

 AND(

  HOUR( [日付] - TODAY() ) / 24 + 365 < 30,

  HOUR( [日付] - TODAY() ) / 24 + 365 > -30

 ),
)

前年実績で業務データを参照すると年度が1年ズレてしまうため

上手く計算ができません。

そのため、年度を比較して期間の判定式を分岐させることで

前年実績からも問題なく表示をすることができますね。

 

プルダウンメニュー

appsheetにおけるプルダウンメニューの作り方です。

 

作り方は2パターン

1つはエクセルやスプレッドシート等でも見られるプルダウンメニュー。

もう1つはやはりappsheetもデータベースということで、

リレーションを組む方法です。

 

1.一般的なプルダウンメニュー

これは簡単です。

 

【Data】 ⇒ 【対象のカラムの鉛筆マーク】

ここで【Type】を【Enum】に変更し、【Type Details】の【Values】に

自由にメニューを登録します。

 

2.リレーションを組む場合

概要としてはシートを2つ作成し、1方のシートがプルダウンメニューのようなもの

となります。

上記と同じメニューをリレーションを組む場合は以下のようになります。

上記のようなシート構成を作り、appsheetの画面でリレーションの設定をします。

設定したカラムの鉛筆マークをクリックし、

【Type】を【Ref】に変更し、【Type Details】の【Source table】にメニューに

該当するシート(今回だと食材のシートを選択します。

 


この2つで何が違うのか、というところはまた次回の記事でご紹介します。

目的によって選ぶことにはなりますが、やはりリレーションの構成を

上手く組めるとより見やすく、使い易いアプリが作成できるので試してみてください!

 

 

 

 

連動型のプルダウンメニュー

ある項目に連動してプルダウンメニューを限定したい!

そんな時の設定方法です。

 

設定項目は。。。

 

【Data】 ⇒ 【対象のカラム】 ⇒ 【Data Validity】 ⇒ 【Valid if】

 

ここに条件を入力しましょう。

 

条件設定に使用する関数は以下の2つです。

〇 IN()

〇 SELECT()

 

実際に項目Aと項目Bの2つの項目があり、項目Aに連動して項目Bのプルダウンメニューが表示される場合は以下のようになります。

 

IN(

 [_THIS],

 SELECT(

  項目B[ID項目B],

  [ID項目A] = [_THISROW].[ID項目A],

  TRUE

 )

)

 

具体的な事例として家計簿アプリを作る場合、

収入と支出の項目があり(上記項目Aに相当)、

収入と支出それぞれに項目があると思います。(上記項目Bに相当)

 

画像のようなデータを組んだ場合は以下のようになります。

 

IN(

 [_THIS],

 SELECT(

  小分類[ID分類],

  [ID区分] = [_THISROW].[ID区分],

  TRUE

 )

)

 

もちろん、columnの設定でtypeはrefに設定してくださいね。

ぜひ、試してみてください!