Googleスプレッドシートからノーコードで業務アプリを構築できる「AppSheet(アップシート)」で、「反響管理」「売上DB」「顧客台帳」「対応履歴」のように複数のテーブルを運用していると、「お客様のお名前や電話番号を1回入力するだけで、アプリ内のすべてのテーブルから該当データを一括検索したい」という場面がよくあります。
しかし、AppSheetの画面上部にある標準検索バー(虫眼鏡アイコン)は、「現在開いているビュー(単一のテーブルまたはスライス)」の中だけを検索対象とする仕様になっています。そのため、複数テーブルをまたいだ全域検索を実現するには、目的に合わせた設計アプローチを1つ追加してあげる必要があります。
本記事では、AppSheetでアプリ全域(複数テーブル)を横断して検索するための代表的な3つの構築アプローチと、実装前に必ず確認しておきたい検索対象カラム(Search?)の設定手順について、実際の画面イメージやコピペで使える数式とともに分かりやすく解説します。
あわせて読みたい(AppSheetの基礎設計・データ抽出ガイド)
GoogleスプレッドシートからAppSheetアプリを作成する初期手順については「GoogleスプレッドシートからAppSheetアプリを即座に作成する方法」、条件に合うレコードを式で抽出する基本については「AppSheet SELECT関数の使い方と構文・応用パターン解説」もあわせてご覧ください。
なぜAppSheetの標準検索では別テーブルがヒットしないのか
AppSheetのアプリ画面右上にある検索アイコン(虫眼鏡マーク)は、特別な設定をしなくても最初から使える便利な機能ですが、その検索範囲はあくまで「今画面に表示しているビューに紐づく1つのデータソース(テーブルまたはSlice)」に限定されています。
たとえば、「反響管理(見込み客からの問い合わせ)」と「売上DB(成約後の契約データ)」が別々のシートに分かれている場合、反響管理ビューを開いた状態で「佐藤」や「090-xxxx-xxxx」と検索しても、売上DB側に入っている佐藤様のデータは表示されません。営業現場やコールセンター業務では、画面を何度も切り替えずに1回の検索で両方の履歴を見つけたいケースが多いため、以下の3つのいずれかの仕組みを組み込むのが定石となります。

| 設計アプローチ | 動作スピード | 主なメリット | おすすめの運用シーン |
|---|---|---|---|
| スプレッドシート側で統合ビューを作成(推奨) | 非常に高速 | 標準の検索窓で即ヒットし、タップで元の詳細画面へ直接移動できる | スマホ・PC問わず素早く検索したい全般の業務アプリ |
| 検索用テーブルと連動ダッシュボードを使用 | 標準(データ同期連動) | 専用の検索入力枠から複数のテーブル一覧を1画面上で同時に絞り込める | PCやタブレットの広い画面で複数リストを見比べたい場合 |
| UserSettings(ユーザー設定)を活用 | 高速(設定保存時) | シート追加が不要で、ログインユーザーごとに独立して絞込状態を維持できる | 特定の顧客や担当案件に絞ったまま複数の画面を行き来したい場合 |
スプレッドシート側で統合ビューを作成する方法(おすすめ・高速)
実務で最もおすすめで、かつ検索レスポンスが軽快なのが、各テーブルの主要な項目(お名前・件名・担当者・日付・電話番号など)をGoogleスプレッドシート側で1つの検索専用シートに集約し、それをAppSheetに読み込む方法です。AppSheet側の複雑なフィルタ計算を増やさずに標準検索バーをそのまま使えるため、データ件数が増えてもサクサク動きます。
Googleスプレッドシートで統合シート(全体検索DB)を作成する
まず、データベースにしているGoogleスプレッドシート内に新しいシート(例:全体検索DB)を1枚追加します。1行目に見出し(元テーブル・元ID・お名前・件名・担当者・電話番号 など)を入力したあと、A2 セルに QUERY 関数と配列結合構文(波括弧 { } とセミコロン ;)を入力して各シートの主要列を縦に結合します。

最もシンプルな基本構文は次のとおりです。セミコロン(;)で区切ることで、複数の QUERY 結果を上下(縦方向)に連結できます。
={
QUERY('反響管理'!A2:Z, "SELECT '反響管理', A, B, C, D");
QUERY('売上DB'!A2:Z, "SELECT '売上DB', A, B, C, D")
}
実務で役立つ数式の記述ポイント(空白行や自動見出しの除外)
実際のスプレッドシートでは、A2:Z の途中に空白行が含まれると上部テーブルの下に大量の空行が入ってしまうことがあります。また、SELECT '反響管理' のように固定文字列を指定すると QUERY 関数が自動で見出し行を出力する場合があるため、以下のように WHERE A IS NOT NULL と LABEL 指定を添えるとデータ行だけがきれいに並びます。
={
QUERY('反響管理'!A2:E, "SELECT '反響管理', A, B, C, D, E WHERE A IS NOT NULL LABEL '反響管理' ''", 0);
QUERY('売上DB'!A2:E, "SELECT '売上DB', A, B, C, D, E WHERE A IS NOT NULL LABEL '売上DB' ''", 0)
}
AppSheetに統合テーブルを追加して全体検索ビューを作る
スプレッドシート側で 全体検索DB シートができたら、AppSheetエディタを開いて以下の手順でテーブルとビューを追加します。
- テーブルの追加:AppSheetの
Data > Tablesから全体検索DBを追加します。このシートは数式で自動生成されている検索専用テーブルなので、誤って上書きしないようAre updates allowed?をRead-Only(読み取り専用)に設定します。 - Key(主キー)の確認:元の各テーブルで
UNIQUEID()などの重複しないIDを発行している場合は、元ID列にKey?チェックを入れます(もし複数テーブル間で1, 2, 3...のような同じ連番IDが重なる場合は、スプレッドシート側で反響管理-1のようにテーブル名を結合したユニーク列を1つ作っておくと安全です)。 - 全体検索ビューの作成:
UX > Views(現行エディタのViewsメニュー)で全体検索DBをデータソースにしたビュー(DeckビューやTableビュー)を作成します。
LINKTOROWアクションで元の詳細画面へ直接ジャンプさせる
このままでも横断検索自体はできますが、全体検索DB の詳細画面を開くと「検索用に抜粋した数項目」しか表示されず、データの編集もできません。そこで、検索結果の行をタップした瞬間に「元のテーブルの本来の詳細画面(Detailビュー)」へ直接移動するアクションを設定します。

Actions で 全体検索DB に対する新規アクションを作成し、Do this に App: go to another view within this app を選択します。Target 欄には LINKTOROW([元ID], [元テーブルのビュー名]) を使って以下のように記述します。
IFS(
[元テーブル] = "反響管理", LINKTOROW([元ID], "反響管理_Detail"),
[元テーブル] = "売上DB", LINKTOROW([元ID], "売上DB_Detail")
)
最後に、先ほど作成した全体検索ビュー(DeckビューやTableビュー)の設定を開き、Behavior > Event Actions > Row Selected(行選択時の動作)にこのアクションを指定します。これで、検索結果リストをタップした瞬間に該当ページの元の詳細画面へシームレスに移動できるようになり、そのまま編集や電話発信アクションなども実行できます。
検索用テーブルと連動ダッシュボード(Interactive Dashboard)を使う方法
2つ目のアプローチは、アプリ内に「検索キーワードを入力する専用の枠」を用意し、その入力値に連動して複数のテーブル一覧を1画面上で一斉に絞り込む方法です。パソコンやタブレットの横長画面で、複数テーブルの検索結果を左右や上下に並べて同時に見比べたいケースに適しています。
検索キーワード保持用のテーブルとクイック編集ビューを作る
まず、スプレッドシートに 検索フォーム という1行だけの小さなテーブルを作成します。カラムは主キー用の ID と キーワード の2列を用意し、2行目にあらかじめ初期データ(例:ID に 1、キーワード は空欄)を1行だけ入れておきます。
- テーブル権限の設定:行が増えたり消えたりしないよう、
検索フォームテーブルの権限はUpdates(更新のみ許可)にしておきます。 - Quick Edit(クイック編集)の有効化:
検索フォームを元にしたDetailビューを作成し、Quick edit columnsにキーワードカラムを追加します。これで編集画面を開かなくても、ダッシュボード上で直接文字を打ち込める検索ボックスになります。
各テーブルでキーワード連動用のSlice(スライス)を作成する
続いて Data > Slices を開き、横断検索に含めたい各テーブル(例:反響管理・売上DB)のSliceをそれぞれ作成します。Row filter condition(行の抽出条件)には、以下の式を設定します。
OR(
ISBLANK(INDEX(検索フォーム[キーワード], 1)),
CONTAINS([お名前], INDEX(検索フォーム[キーワード], 1)),
CONTAINS([メモ], INDEX(検索フォーム[キーワード], 1))
)
この式は、「検索フォームの1行目が空欄のときは全件を表示し、キーワードが入力されているときは『お名前』または『メモ』にその文字を含む行だけを残す」という動きをします。電話番号や案件名なども対象にしたい場合は、CONTAINS([電話番号], INDEX(検索フォーム[キーワード], 1)) の行を OR(...) の中に追加するだけで拡張できます。
Dashboardビューに配置して一斉絞り込みを動かす
各Sliceを元にした一覧ビューを作成したら、UX > Views で View type を dashboard に設定した親ビューを作成し、View entries に「検索フォームのビュー」と「各スライスのビュー」を追加します。

複数メンバーで同時利用する場合のワンポイント工夫
ダッシュボードの Interactive mode をONにしておくと、Ref(参照)関係にある親子テーブル間のクリック連動もあわせて機能します。なお、1行だけの 検索フォーム シートを社内全員で共有すると、Aさんが入力した検索ワードがBさんの画面にも反映されるため、複数人で同時に検索するアプリでは 検索フォーム にメールアドレス列を持たせて USEREMAIL() で本人行だけを参照する設計にするか、次に紹介する UserSettings を使うと干渉を防げます。
UserSettings(ユーザー設定)でアプリ全体を絞り込む方法
3つ目のアプローチは、AppSheetに標準搭載されている「UserSettings(ユーザー設定)」画面で検索ワードを指定し、アプリ内の複数ビューに横断フィルターを適用する方法です。新しいスプレッドシートを追加する必要がなく、さらに端末・ログインユーザーごとに設定値が独立して保持されるのが大きな強みです。
Data > UserSettingsを有効化して「検索ワード」項目を作る
AppSheetエディタの Data > User Settings(または左メニューの Settings 内にある User Settings 項目)を開き、用意されている Option 1 の名前を 検索ワード、データ型(Type)を Text に変更し、Show? チェックボックスをONにします。
各表示用Sliceの抽出条件にUSERSETTINGS関数を設定する
横断検索の対象にしたい各テーブルの表示用Sliceを開き、Row filter condition に以下の式を設定します。
OR(
ISBLANK(USERSETTINGS("検索ワード")),
CONTAINS([お名前], USERSETTINGS("検索ワード")),
CONTAINS([メモ], USERSETTINGS("検索ワード"))
)
メニューのSettingsからアプリ全体をフィルタリングする運用手順
利用者はアプリのメニュー内にある Settings を開き、検索ワード 欄にキーワードを入力して Save を押します。すると、そのSliceを使っているすべてのビューが一斉に該当キーワードで絞り込まれた状態になります。
画面を切り替えても条件が消えずに残るため、「特定の顧客やプロジェクトに関するデータだけを全タブでずっと表示しながら作業したい」という場面で特に重宝します(元の全件表示に戻すときは、Settings の検索ワードを空欄にして再度 Save します)。
実装前に確認しておきたい検索対象カラム(Search?)の設定
横断検索(特に最初の統合ビュー方式や、普段の標準検索バー)を実装する際に、忘れずに確認しておきたいのが各テーブルの「検索対象カラム(Search?)」のチェック状態です。
左:User Settingsでの「検索ワード」有効化画面 / 右:Data > Columnsで検索対象に含めたい列の「Search?」がONになっているかを確認Data > Columnsで「Search?」チェックボックスをONにする
AppSheetの標準検索バーに入力したキーワードは、Data > Columns で Search?(虫眼鏡マークのSearchable属性)がONになっている列だけを走査します。「データはあるはずなのに電話番号や担当者名で検索しても出てこない」というトラブルの大半は、該当列の Search? チェックが外れていることが原因です。
- ONにしておくべき列:お名前、会社名、件名、電話番号、メールアドレス、担当者、住所、対応メモなど、現場スタッフが検索手がかりに使う項目。
- OFFにしておくとよい列:システム内部用のランダムなID(
UNIQUEID())、画像ファイルパス、タイムスタンプなど、キーワード検索の対象にする必要がない列。不要な列のSearch?を外しておくことで、意図しない誤ヒットが減り、検索処理も軽くなります。
目的・運用シーン別の選び方ガイド
ここまで紹介した3つのアプローチのうち、自分のアプリにどれを取り入れるべきか迷ったときは、次の基準で選ぶとスムーズに運用へ定着します。

- 迷ったら「スプレッドシート統合ビュー」が第一候補:外出先のスマホ操作でも社内PCでも標準検索窓から一瞬でヒットし、
LINKTOROWアクションで元の編集・詳細画面へ直行できるため、最も直感的で高速に運用できます。 - デスク業務で複数テーブルを横並び比較するなら「連動ダッシュボード」:受付窓口やインサイドセールスなど、PCモニター上で「問い合わせ履歴」と「過去受注リスト」と「対応タスク」を1画面に並べて同時に見渡したい場合に力を発揮します。
- シートを増やさず個人別の絞込状態をキープするなら「UserSettings」:既存のスプレッドシート構成に手を加えたくない場合や、担当者名・案件名などでアプリ全体をしばらく固定フィルタリングしながら作業したい場合に手軽で便利です。
まとめ
AppSheetで複数テーブル(アプリ全域)を横断して検索するための3つの設計アプローチと、事前チェックのポイントを解説しました。最後に本記事の要点を振り返ります。
本記事のポイントまとめ
- 標準検索の仕様:AppSheetの標準検索機能は「現在開いている単一ビュー(テーブル/Slice)」のみを対象とするため、アプリ全域の検索には横断用の設計を追加する。
- 統合ビュー方式(おすすめ・高速):スプレッドシート側で
QUERY関数を使って主要項目を全体検索DBに結合して読み込み、タップ時にLINKTOROW([元ID], [元ビュー名])アクションで元の詳細画面へ遷移させる。 - 連動ダッシュボード方式:1行の
検索フォームテーブル(Quick Edit)とCONTAINS条件のSliceを組み合わせ、Dashboardビュー上で複数一覧を一斉に絞り込む。 - UserSettings方式:
Data > User Settingsに検索ワードを作成し、USERSETTINGS("検索ワード")を各Slice条件に設定することで、ユーザー別にアプリ全体の絞り込みを維持する。 - Search?列の事前確認:実装前に各テーブルの
Data > Columnsを開き、検索にヒットさせたい列のSearch?チェックボックスがONになっているか必ず確認しておく。
テーブル数が増えてきた業務アプリでも、横断検索の導線が1つ整うだけで「あの顧客データはどこに入っていたっけ?」と探す時間が大幅に減り、現場での使いやすさが一段と高まります。ぜひアプリの運用スタイルに合った方法を取り入れてみてください。
