AppSheetで「承認ボタンを押したらステータスを変更したい」「登録後に指定した画面へ移動したい」「1回の操作で更新と履歴追加をまとめて実行したい」と思っても、Actionの種類や設定項目が多く、どれを選べばよいか迷いがちです。Actionは、利用者の操作を減らし、入力ミスや処理漏れを防ぐための中心的な機能です。一方で、表示条件や実行順序を考えずに作ると、ボタンが表示されない、意図しないデータが更新されるといった問題も起こります。基本のボタン設定から画面遷移、複数処理、実務での設計方法まで、初心者にもわかる形で整理します。

👑承認ボタンを作りたいのですが、Actionの種類が多くて迷ってしまいます。

🤖最初は「データを変える」「画面を移動する」「外部機能を開く」の3つに分けると理解しやすくなります。

👑複数の処理を、1つのボタンにまとめることもできますか?

🤖Grouped Actionを使えば可能です。ただし、処理の順番と画面遷移を置く位置に注意が必要です。
AppSheetのActionとは
AppSheetのActionとは、ボタンのタップや行の選択をきっかけに、データ更新、画面遷移、メールアプリの起動などを実行する機能です。
例えば、案件管理アプリで「対応完了」ボタンを押したとき、ステータス列を「完了」に変更できます。さらに、完了日時を記録し、履歴テーブルへ新しい行を追加したあと、完了案件一覧へ移動することも可能です。
公式ヘルプでは、Actionは大きくNavigation、Data-change、External、Groupedの4種類に整理されています。Actionは利用者がボタンを押したときだけでなく、行の選択やフォーム保存などのイベントから実行することもできます。
ActionとBotの違い
| 比較項目 | Action | Bot |
|---|---|---|
| 主な実行場所 | アプリ画面上の操作 | AppSheetの自動化処理 |
| きっかけ | ボタン、行選択、フォーム保存 | データ変更、スケジュールなど |
| 向いている処理 | 承認、編集、画面移動、電話発信 | 通知、帳票作成、定期処理 |
| 利用者の操作 | 必要な場合が多い | 操作なしで実行できる |
利用者が判断して実行する処理はAction、条件を満たしたら自動実行したい処理はBot、と考えると整理しやすくなります。
ただし、Actionでデータを更新したことをきっかけにBotを起動する設計も可能です。例えば、担当者が承認Actionを押したあと、Botが承認通知メールやPDFを作成する流れです。
Actionが役立つ実務シーン
- 申請データを承認済みに変更する
- 在庫の入庫数や出庫数を更新する
- タスクの完了日時を記録する
- 顧客の電話番号から電話アプリを開く
- 選択した顧客に関連する案件だけを表示する
- 現在の行を別テーブルへ履歴として追加する
- 複数の更新処理を1つのボタンにまとめる

👑Actionは「見た目を変えるボタン」ではなく、利用者が行う業務手順そのものをアプリへ組み込む機能です。先に実際の作業手順を書き出してから設定すると迷いにくくなります。

Actionの主な種類と使い分け
Actionを設定するときは、最初に「何を変えたいのか」を明確にします。種類を暗記するより、目的から逆算したほうが正しく選べます。
Navigation Action
Navigation Actionは、フォームや詳細画面、一覧画面などへ移動するためのActionです。
代表的な処理には、現在の行を編集する、現在の行をコピーして編集する、別のViewへ移動する、新規登録フォームを開くといったものがあります。
画面遷移先を細かく指定したい場合は、TargetにDeep Link式を設定します。
| 式 | 用途 | 設定例 |
|---|---|---|
| LINKTOVIEW() | 指定したViewへ移動 | LINKTOVIEW(“未対応案件”) |
| LINKTOROW() | 指定した行の詳細画面へ移動 | LINKTOROW([案件ID], “案件詳細”) |
| LINKTOFORM() | 新規登録フォームを開く | LINKTOFORM(“対応履歴_Form”, “案件ID”, [案件ID]) |
| LINKTOFILTEREDVIEW() | 条件に合う行だけを表示 | LINKTOFILTEREDVIEW(“案件一覧”, [顧客ID]=[_THISROW].[顧客ID]) |
LINKTOVIEW()は指定したViewへ移動するDeep Linkを返し、LINKTOFILTEREDVIEW()は条件に一致する行だけを表示するViewへのリンクを作成します。
Data-change Action
Data-change Actionは、行の追加、更新、削除など、アプリ内のデータを変更するために使います。
- 現在の行の列を更新する
- 現在の行を削除する
- 別テーブルに新しい行を追加する
- 条件に合う複数行へ別のActionを実行する
実務で最も使いやすいのが「Data: set the values of some columns in this row」です。現在の行にあるステータス、担当者、更新日時などを、ボタン操作でまとめて変更できます。
一方で、キー列、App formulaが設定された列、一部の変更記録用列などは、このActionから直接値を設定できません。更新対象に選べない場合は、列設定を確認してください。
External Action
External Actionは、AppSheetの外部機能を開くためのActionです。
- Webサイトを開く
- 保存されたファイルを開く
- メールアプリを起動する
- 電話アプリを起動する
- SMSアプリを起動する
「External: start an email」は、AppSheetからメールを自動送信する機能ではありません。利用端末のメールアプリを開き、宛先、件名、本文を入力した状態にする機能です。送信自体は利用者が確認して行います。自動送信が必要な場合はBotを検討します。
Grouped Action
Grouped Actionは、作成済みの複数Actionを指定した順番で実行する機能です。
例えば、承認処理を次の4段階に分けられます。
- 申請ステータスを「承認済み」に変更する
- 承認者と承認日時を記録する
- 承認履歴テーブルへ行を追加する
- 承認済み一覧へ移動する
1つのActionに多くの役割を持たせるのではなく、小さなActionを作り、最後にGrouped Actionでまとめるのが基本です。

👑Grouped Actionは複雑な機能に見えますが、「更新」「履歴追加」「画面移動」を別々に作って並べるだけです。小さく作るほど、失敗した場所を見つけやすくなります。
基本的なActionボタンの作り方
ここでは、タスク管理テーブルに「完了」ボタンを作り、ステータスと完了日時を更新する例で設定手順を確認します。
事前に用意する列
| 列名 | 型 | 用途 |
|---|---|---|
| タスクID | Text | キー列 |
| タスク名 | Text | 作業内容 |
| ステータス | EnumまたはText | 未着手、対応中、完了 |
| 完了日時 | DateTime | 完了した日時 |
完了Actionを作成する手順
- AppSheetエディタで対象アプリを開く
- Actionsを開く
- 上部の追加ボタンから新しいActionを作成する
- For a record of this tableでタスクテーブルを選ぶ
- Do thisでData: set the values of some columns in this rowを選ぶ
- ステータス列に「完了」を設定する
- 完了日時列にNOW()を設定する
- 表示名、アイコン、表示位置を設定する
- アプリを保存して動作確認する
現在のエディタではActionsパネルから作成します。旧ナビゲーションを利用している場合は、Behavior、Actionsから作成します。画面構成は更新される可能性があるため、表示が異なる場合は公式ヘルプも確認してください。
列へ設定する値
| 更新する列 | 設定値 |
|---|---|
| ステータス | “完了” |
| 完了日時 | NOW() |
文字列を直接設定する場合は、値をダブルクォーテーションで囲みます。列の値を引き継ぐ場合は、[列名]の形で指定します。
Actionの式は、基本的にボタンが押された行を基準に評価されます。そのため、現在の担当者を別の列へコピーする場合は、[担当者]と記述できます。
ボタンの表示位置を設定する
| Position | 主な表示方法 | 向いている用途 |
|---|---|---|
| Primary | 画面上部やフローティングボタン | 新規登録など頻繁に使う操作 |
| Prominent | 詳細画面上部のボタン | 承認、完了、受付など |
| Inline | 行や列に関連付けて表示 | 電話、メール、詳細確認など |
| Hide | 画面には表示しない | Grouped Actionから呼び出す内部処理 |
Grouped Actionの中だけで使う更新処理は、利用者が誤って単独実行しないようにHideへ設定します。
なお、Inline Actionをテーブルの特定列に設定すると、表示方法によっては元の列内容の代わりにActionアイコンが表示されます。元の値も見せたい場合は、Action表示用の仮想列などを別に用意する方法があります。

条件付きでActionボタンを表示する方法
承認済みのデータに承認ボタンが残っていると、二重処理の原因になります。Only if this condition is trueへ式を設定し、実行可能な行だけにActionを表示します。
未完了の行だけに完了ボタンを表示する
[ステータス]<>”完了”
ステータスが完了ではない行だけにボタンが表示されます。
申請中の行だけに承認ボタンを表示する
[申請ステータス]=”申請中”
管理者だけに削除ボタンを表示する
USEREMAIL()=”admin@example.com”
実務ではメールアドレスを式へ直接書くより、ユーザーマスタに権限列を用意し、ログイン中の利用者が管理者かどうかを判定する設計が管理しやすくなります。
複数条件を組み合わせる
AND([申請ステータス]=”申請中”, [申請者]<>USEREMAIL())
この式では、申請中であり、申請者本人ではない場合だけActionを表示できます。
特定の画面だけに表示する
CONTEXT(“VIEWTYPE”)=”Detail”
詳細画面だけに表示したい場合に使えます。Actionの表示条件は行ごとに評価されるため、ステータスや担当者によって表示を切り替えられます。

👑ボタンを見せない設定は、見た目を整えるだけではありません。実行してはいけない状態で操作させないことが、入力ミスや二重承認を防ぐ対策になります。
Actionで画面遷移を作る方法
画面遷移Actionを使うと、利用者がメニューを探す手間を減らせます。顧客詳細から関連案件を開く、商品詳細から入出庫フォームを開くといった動線に向いています。
指定したViewへ移動する
Do thisでApp: go to another view within this appを選び、Targetへ次の式を設定します。
LINKTOVIEW(“未対応案件”)
ダブルクォーテーション内は、テーブル名ではなくView名です。View名の入力ミスがあると正しく移動できません。
現在の行に関連する一覧を開く
顧客詳細画面から、その顧客に関連する案件だけを表示する例です。
LINKTOFILTEREDVIEW(“案件一覧”, [顧客ID]=[_THISROW].[顧客ID])
左側の[顧客ID]は移動先の案件テーブル、[_THISROW].[顧客ID]はActionを実行した顧客行を指します。
[_THISROW]を付けずに両方を[顧客ID]と書くと、比較対象が曖昧になり、すべての行が表示されることがあります。
値を初期入力したフォームを開く
商品詳細から入出庫履歴の登録フォームを開き、商品IDと区分を自動入力する例です。
LINKTOFORM(“入出庫履歴_Form”, “商品ID”, [商品ID], “入出庫区分”, “出庫”)
LINKTOFORM()には、フォームView名、列名、設定値の順番で指定します。入力項目を減らせるため、スマートフォンでの現場作業に向いています。
行選択時の動作を変更する
テーブル、デッキ、ギャラリーViewでは、行を選択したときに実行するActionを設定できます。
- 対象Viewの設定を開く
- Behaviorを開く
- Event ActionsのRow Selectedを確認する
- 実行したいActionを選択する
Row SelectedへActionを設定すると、通常の詳細画面への移動が置き換わります。画面遷移を含まない更新Actionを設定した場合、行を押しただけで値が変わるため、利用者が意図せず操作しないか十分に確認してください。イベントに設定できるのは、原則としてViewと同じデータソースを対象にしたActionです。
Grouped Actionで複数処理を実行する方法
Grouped Actionは、複数のActionを1つのボタンにまとめる仕組みです。承認処理、受付処理、在庫更新など、実務で複数の記録を同時に変更したい場面で役立ちます。
承認処理をまとめる例
次の3つのActionを個別に作成します。
- 申請データのステータス、承認者、承認日時を更新するAction
- 承認履歴テーブルへ新しい行を追加するAction
- 承認済み一覧へ移動するAction
その後、Do thisでGrouped: execute a sequence of actionsを選び、作成したActionを実行順に登録します。
| 順番 | Action名 | 処理内容 |
|---|---|---|
| 1 | 申請を承認済みに更新 | ステータス、承認者、承認日時を更新 |
| 2 | 承認履歴を追加 | 履歴テーブルへ行を追加 |
| 3 | 承認済み一覧へ移動 | 指定したViewを開く |
画面遷移Actionは最後に置く
Grouped Actionでは、データ更新を先に、Navigation Actionを最後に配置するのが基本です。
現在のデスクトップブラウザや新しいモバイルフレームワークでは、複数のNavigation ActionまたはExternal Actionを登録しても、実行されるのは1つだけです。また、Navigation ActionやExternal Actionが実行されると、Grouped Actionの処理が終了します。
そのため、次の順番は避けます。
- 承認済み一覧へ移動する
- ステータスを更新する
- 履歴を追加する
画面遷移が先に実行されると、後続の更新が期待どおりに動作しない可能性があります。
子Actionは非表示にする
Grouped Actionから呼び出す更新Actionや履歴追加Actionは、PositionをHideにします。利用者には、最終的な「承認する」ボタンだけを表示します。
子Actionが画面に残っていると、履歴を追加せずステータスだけ更新するなど、不完全な処理が行われる恐れがあります。
確認メッセージを設定する
承認、削除、確定など取り消しにくい処理では、Needs confirmationを有効にします。
確認メッセージは「実行しますか」だけでなく、「この申請を承認済みに変更します。よろしいですか」のように、何が変わるのかを明確にします。
ただし、Grouped Actionの各子Actionすべてに確認を付けると、何度も確認画面が表示される可能性があります。通常は、利用者が押す親Actionだけに確認を設定します。


👑複数処理では「どのデータを、どの順番で、どこまで変更するか」を表にしてから作ると安心です。最後に画面移動を置くことも忘れないでください。
複数行へActionを実行する方法
複数のタスクをまとめて完了にする、同じ顧客に関連する案件を一括更新する場合は、複数行を対象にしたActionを利用します。
利用者が行を選択して実行する
テーブル、デッキ、ギャラリーViewでは、利用者が複数行を選択してActionを実行できます。
ただし、選択したすべての行で実行可能なActionだけが表示されます。Only if this condition is trueの条件を一部の行が満たしていない場合、Actionが表示されないことがあります。
式で対象行を選んで実行する
Data: execute an action on a set of rowsを使うと、式で抽出した行へ、指定したActionを実行できます。
例えば、現在の顧客に関連する未完了案件をすべて完了にする場合は、Referenced Rowsへ対象行のキー一覧を返す式を設定します。
SELECT(案件[案件ID], AND([顧客ID]=[_THISROW].[顧客ID], [ステータス]<>”完了”))
Referenced Actionには、案件テーブルに作成した「完了に更新するAction」を指定します。
複数行更新は作業時間を大幅に減らせますが、条件式を間違えると広い範囲が更新されます。最初はテスト用データで、SELECT()が返すキーを確認してから実行してください。
Actionで起こりやすい失敗と対処法
ボタンが表示されない
- Actionの対象テーブルがViewのテーブルと違う
- PositionがHideになっている
- Only if this condition is trueがFALSEになっている
- Sliceで表示可能なActionが制限されている
- 対象Viewでは表示されないAction形式になっている
最初にOnly if this condition is trueを一時的に空欄へ戻し、表示されるか確認します。表示された場合は、条件式を小さく分解して調べます。
ボタンを押しても値が変わらない
- 更新対象がキー列になっている
- 更新対象列にApp formulaが設定されている
- 列やテーブルが更新不可になっている
- 対象行を判断する式が空の値を返している
- 同期前の画面を見ている
特に、App formulaが設定された列は計算結果を表示する列であり、Actionから直接書き換える用途には向きません。利用者が変更する値は通常列へ保存し、その値から計算する設計に分けます。
画面遷移先が見つからない
LINKTOVIEW()やLINKTOFORM()に指定する名称は、テーブル名ではなくView名です。全角と半角、空白、記号も含めて一致しているか確認します。
View名を後から変更すると、Action内の式が追従しない場合があります。画面名を変更したあとは、Deep Link式も確認してください。
Grouped Actionが途中までしか動かない
- Navigation Actionが途中に入っている
- 子Actionの条件がFALSEになっている
- 更新後の値によって後続Actionの条件が変わっている
- 追加先テーブルの必須列が不足している
- 列の型と設定値が合っていない
Grouped Actionをまとめてテストする前に、子Actionを一つずつ単独で動かします。その後、2個、3個と段階的にまとめると、止まっている場所を特定しやすくなります。
同じ処理が二重に実行される
承認ボタンを連続して押せる状態では、履歴が二重登録される可能性があります。
承認Actionの表示条件を[ステータス]=”申請中”とし、1回目の実行後はボタンが表示されないようにします。履歴IDにはUNIQUEID()を使い、必要に応じて元データのIDと処理区分を組み合わせて重複判定を行います。
実務で失敗しにくいAction設計
1つのActionに1つの役割を持たせる
「ステータス更新」「履歴追加」「画面移動」を、それぞれ別のActionに分けます。処理を分けることで再利用しやすくなり、修正時の影響範囲も小さくできます。
Action名に対象と処理を書く
「更新1」「Action_test」のような名前では、後から目的がわかりません。
- 申請_承認済みに更新
- 申請_承認履歴を追加
- 申請_承認済み一覧へ移動
- 申請_承認処理を実行
Grouped Actionの子処理には、対象テーブルと処理内容がわかる名前を付けます。
表示条件と実行条件を分けて考える
Only if this condition is trueは、Actionを表示する行を制御します。ただし、機密データへのアクセス制御をActionの表示条件だけに任せてはいけません。
権限のない利用者へデータ自体を配信しない必要がある場合は、Security Filterやテーブル権限も組み合わせます。ボタンを隠す設定は、画面操作を整理するための仕組みとして扱います。
人間の確認を残す処理を決める
日付の記録、担当者の転記、履歴追加など、判断を伴わない処理はActionへ任せやすい部分です。
一方で、金額の確定、申請の最終承認、顧客への送信、データ削除などは、人間が内容を確認してから実行する設計が安全です。
本番データとは別にテストする
- テスト用の行を用意する
- 子Actionを単独で実行する
- 更新前後の値を確認する
- Grouped Actionを実行する
- 履歴の重複や空欄を確認する
- スマートフォンとパソコンの両方で確認する
特に削除や複数行更新は、対象条件を間違えると元に戻すのが難しくなります。本番運用前にコピーしたアプリやテストテーブルで確認してください。

👑Actionは設定できた時点で完成ではありません。誤操作した場合、連続で押した場合、権限の違う人が開いた場合まで試すことで、実務で使えるボタンになります。
Actionが向いているケースと向いていないケース
| Actionが向いているケース | 別の方法を検討したいケース |
|---|---|
| 利用者が内容を確認して実行する | 毎日決まった時刻に処理する |
| 現在表示している行を更新する | 人の操作なしで通知を送る |
| 登録フォームや関連画面へ移動する | 大量データを定期的に集計する |
| 電話やメールアプリを開く | 複雑な外部システム連携を行う |
| 複数の小さな処理をまとめる | 長時間かかるバックグラウンド処理を行う |
自動通知や帳票作成はBot、表計算側の複雑な集計はスプレッドシート関数やGAS、利用者が画面上で判断して実行する操作はActionというように役割を分けます。
よくある質問
Actionボタンは無料プランでも作れますか?
アプリの編集環境でActionを作成して動作を確認できます。ただし、利用人数、外部公開、自動化、組織での運用などにはプランごとの条件があります。実際に業務展開する前に、最新の料金と利用条件を公式サイトで確認してください。
Actionを押したら自動でメール送信できますか?
External Actionはメールアプリを開く機能であり、通常は利用者が送信操作を行います。確認なしで自動送信したい場合は、Actionによるデータ更新をきっかけにBotを動かす方法を検討します。
Actionボタンの色を自由に変えられますか?
Action単体の色を細かく自由指定する用途には制約があります。アイコン、表示名、Position、Format Rulesなどを組み合わせ、利用者が役割を判断しやすい表示に整えます。
1つのボタンで複数テーブルを更新できますか?
可能です。テーブルごとにActionを作成し、Grouped Actionで順番に実行します。別テーブルへ新しい行を追加する場合は、Data: add a new row to another tableを使います。
Grouped Actionの途中で条件分岐できますか?
子ActionごとにOnly if this condition is trueを設定すると、条件を満たすActionだけを実行できます。複雑な分岐は動作確認が難しくなるため、処理を分けてテストしてください。
Actionを特定の利用者だけに表示できますか?
USEREMAIL()やユーザーマスタを使って表示条件を設定できます。ただし、表示条件だけではデータの安全なアクセス制御になりません。必要に応じてSecurity Filterや権限設定も組み合わせます。
フォーム保存後に指定画面へ移動できますか?
フォームViewのEvent Actionsに、画面遷移Actionを設定できます。Form SavedへNavigation Actionを設定すると、保存後の標準的な移動先を置き換えられます。
作成したActionがEvent Actionsの一覧に出ないのはなぜですか?
ViewとActionの対象テーブルが異なる可能性があります。Event Actionsでは、基本的にViewと同じデータソースを対象とするActionを選択します。ActionのFor a record of this tableを確認してください。
おすすめAIツール
AppSheetのActionを設計するときは、ChatGPTやGeminiなどの生成AIを、式のたたき台作成やテスト項目の洗い出しに利用できます。
- 業務手順をAction単位へ分解する
- Only if this condition is trueの条件式案を作る
- LINKTOFILTEREDVIEW()の式を整理する
- 正常系と異常系のテスト項目を作る
- 利用者向けの操作説明文を整える
ただし、生成された式が実際の列名、データ型、キー構成に合っているとは限りません。そのまま本番へ入れず、Expression Assistantとテストデータで確認します。
顧客情報、従業員情報、売上データなどをAIへ相談するときは、実データを貼り付けず、「顧客ID」「担当者」のような仮の情報へ置き換えてください。
関連記事
まとめ
- Actionは、データ更新、画面遷移、外部機能の起動などをボタン操作で実行する機能
- 承認や完了処理では、Only if this condition is trueで実行可能な行だけにボタンを表示する
- 複数処理は小さなActionに分け、Grouped Actionでデータ更新から画面遷移の順にまとめる
- 本番運用前に、単独実行、連続操作、権限違い、複数行更新までテストする
最初から複雑な承認フローを作る必要はありません。まずは「ステータスを変更するボタン」を1つ作り、表示条件、日時記録、履歴追加、画面遷移の順に機能を加えていくと理解しやすくなります。実際の業務手順を小さなActionへ分解し、利用者が迷わず安全に操作できるアプリへ整えていきましょう。


