「あれ、さっきまで動いていたのに……」「数式を入力したのに、なぜか文字がそのまま表示される」「合計のはずがゼロになる」——Googleスプレッドシートの関数が突然動かなくなったとき、焦りと苛立ちで頭が真っ白になりますよね。しかも締め切り前や会議直前に限ってこういうトラブルが起きるものです。
でも安心してください。Googleスプレッドシートの関数が正しく動かない原因は、ほぼ決まったパターンに収まります。この記事では、初心者の方でも小学生でもわかるやさしい言葉で、原因と対処法を丁寧に解説します。さらに中上級者が見落としがちな「データ型の罠」や「GASカスタム関数の落とし穴」まで、2026年5月時点の最新情報を盛り込んで完全網羅しました。
この記事を読むと、こんなことが解決できます。
- 関数が文字のまま表示される・ゼロになる・エラーになる症状の原因が特定できる
- 全角文字・書式設定・自動計算オフなど、よくある原因を順番に素早くチェックできる
- VLOOKUPやARRAYFORMULAなど特定の関数でハマりやすいポイントを事前に回避できる
- まず最初に確認すること——「入力の基本」が8割の原因を占める
- 「関数がそのまま文字で表示される」ときの直し方
- 「計算結果がゼロになる・合計がおかしい」ときの直し方
- エラーコードが表示されたときの原因と対処法
- 値を変えても関数の結果が更新されないときの対処法
- VLOOKUPとARRAYFORMULAのよくある落とし穴
- Excelから移行したファイルで関数が動かないときは
- 日付や時刻の関数がおかしい結果を返すとき
- Google Apps Script(GAS)のカスタム関数が動かないとき
- 共有設定の「罠」——知らないと情報漏洩が起きる権限設計の本当の話
- ExcelからGoogleスプレッドシートへの移行——「ほぼ同じ」は大嘘、これが本当の互換性問題
- GASコード実務集——コピペしてすぐ使えるスクリプト4選
- QUERY・ARRAYFORMULA・IMPORTRANGE——便利さの裏にある「計算量爆発」の正体
- BigQuery・Looker Studioとの連携——スプレッドシートを「データ活用基盤」に昇格させる方法
- Google Workspaceプラン別——「できること・できないこと」完全比較表
- 現場の「あるある困った」実体験解決集——情シス担当が実際に対応したトラブル6選
- ぶっちゃけこうした方がいい!
- Googleスプレッドシートの関数が動かない場合のよくある質問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ——関数が動かないときの黄金解決ステップ
まず最初に確認すること——「入力の基本」が8割の原因を占める
Googleスプレッドシートのトラブルを長年サポートしてきた経験から言えるのは、関数が動かない原因の約8割は、ほんの小さな入力ミスだということです。複雑なシステム不具合を疑う前に、次の3つを必ず最初に確認しましょう。
「=」(イコール)が全角になっていないか?
Googleスプレッドシートの関数は、必ず半角のイコール「=」から始めなければなりません。日本語入力モードのままうっかり入力すると、全角の「=」が入ってしまい、関数として認識されずそのまま文字列として表示されます。
正しい入力例
=SUM(A1:A5)
間違いの例
=SUM(A1:A5)
(全角イコール)
Excelと違い、Googleスプレッドシートは全角記号を自動的に半角に変換してくれません。この点は特に注意が必要です。関数を入力するときは、まず「半角/全角」キーや「英数」キーを押して入力モードを切り替える習慣をつけましょう。
括弧・カンマが全角になっていないか?
イコールだけでなく、括弧やカンマも全角・半角の区別が重要です。日本語入力モードでうっかり「(」「,」を入力してしまうと、関数が正しく動きません。
| 記号 | 正しい(半角) | 間違い(全角) |
|---|---|---|
| 括弧(開く) |
(
|
(
|
| 括弧(閉じる) |
)
|
)
|
| カンマ |
,
|
,
|
| ダブルクォーテーション |
"
|
"
|
数式バーで関数全体を選択し、フォントを「Courier New」などの等幅フォントに一時的に変更すると、全角と半角の違いが視覚的に見分けやすくなります。これはプロのテクニックです。
関数名のスペルを間違えていないか?
「VLOOKUP」を「VLOKUP」、「SUMIF」を「SUMIFI」のようにスペルを1文字でも間違えると、「#NAME?」エラーが表示されます。このエラーは「Googleスプレッドシートがその関数名を認識できない」というサインです。
関数名のスペルミスを防ぐ一番の方法は、サジェスト(自動候補)機能を活用することです。「=SU」と入力するだけで候補が表示されるので、候補から選ぶと確実です。キーボードの矢印キーで候補を選んでTabキーを押すと、スペルミスなしで入力できます。
「関数がそのまま文字で表示される」ときの直し方
入力した関数が計算結果ではなく「=SUM(A1:A5)」という文字列のまま表示される——これは初心者の方がもっとも多く経験するトラブルです。原因は主に2つです。
「数式を表示」モードがオンになっている
Googleスプレッドシートには、セルに入力された数式をそのまま表示する「数式表示モード」があります。このモードが意図せずオンになっていると、すべてのセルで関数が文字として表示されます。
確認・解除の手順は、メニューバーの「表示」をクリックし、「表示」サブメニューの「数式」にチェックが入っていたら、そこをクリックして外すだけです。キーボードショートカットは
Ctrl + `
(バッククォート)で、素早くオン・オフを切り替えられます。
セルの書式設定が「テキスト(文字列)」になっている
これが最も見落とされやすい原因のひとつです。セルの書式が「テキスト」に設定されていると、Googleスプレッドシートはその中の内容を計算の対象とせず、すべて文字列として扱います。そのため、どんなに正しい関数を入力しても、計算されずに文字のまま表示されてしまいます。
修正の手順は次の通りです。
- 問題のセルを選択する。
- メニューバーの「表示形式」をクリックし、「数字」→「自動」または「数値」を選択する。
- セルをダブルクリックして編集モードに入り、Enterキーを押して確定する。
ステップ3の「ダブルクリックしてEnter」が重要です。書式を変更しただけでは反映されないことがあるため、セルを一度「再確定」させる操作が必要です。
「計算結果がゼロになる・合計がおかしい」ときの直し方
SUM関数などで合計を計算しているのに、結果がゼロになったり、明らかにおかしな数字が出たりする場合は、データの形式(数値と文字列の混在)が原因であることが非常に多いです。
数値に見えて実は「文字列」になっているデータの見分け方
セルに入力されている「100」が、本当に数値なのか文字列なのかを見分ける簡単な方法があります。セル内での配置を見てください。数値は自動的にセルの右端に揃い、文字列は左端に揃います。合計がうまくいかないセルの数字が左寄りになっていたら、それは文字列として扱われているサインです。
確認するにはGoogleスプレッドシートの組み込み関数を使う方法もあります。
=ISNUMBER(A1)
と入力して「TRUE」が返れば数値、「FALSE」が返れば文字列です。また
=ISTEXT(A1)
で「TRUE」なら確実に文字列です。
文字列として入っている数値を数値に変換する方法
文字列になってしまった数値を数値に戻す方法はいくつかあります。最も手軽なのは
=VALUE(A1)
という関数を使う方法で、A1セルの内容を数値に変換してくれます。また、数式の参照先に
*1
を掛ける方法、例えば
=A1*1
と書くことでも、強制的に数値として扱わせることができます。
外部ファイルやウェブからデータをコピーしてきたときに、見た目は数字でも実は文字列になっているケースがよく起きます。特に「1,000」のようにカンマ区切りが入った数字や、PDFからコピーしたデータは要注意です。
=CLEAN(A1)
や
=TRIM(A1)
を組み合わせて使うと、余分な空白や特殊文字を除去した上でクリーンなデータにできます。
全角数字は計算できない
日本語キーボードで全角入力モードのまま数字を打ち込んでしまうと、見た目は数字でもGoogleスプレッドシートは「文字列」として扱います。「1」(全角)と「1」(半角)は別物です。SUM関数は全角数字を計算の対象から外すため、合計が意図した値より小さくなったりゼロになったりします。データを入力するときは必ず半角数字で入力することを徹底しましょう。
エラーコードが表示されたときの原因と対処法
関数が動かないとき、ただ空白になるのではなく「#VALUE!」や「#REF!」などのエラーコードが表示されることがあります。このエラーコードはトラブルシューティングの重要なヒントです。Googleスプレッドシートが「何が問題なのか」を教えてくれているメッセージだと思ってください。
| エラーコード | 主な意味 | よくある原因と対処法 |
|---|---|---|
| #VALUE! | データ型の不一致 | 数値を期待している引数に文字列が入っている。VALUE関数やTRIM関数でデータを整える。 |
| #REF! | 参照先が存在しない | 参照していたセルや行・列が削除された。数式を確認して参照先を修正する。ARRAYFORMULAの出力先にデータが入っている場合も発生する。 |
| #NAME? | 関数名が認識できない | スペルミスか、Googleスプレッドシートに存在しない関数名(Excel専用関数など)を使っている。 |
| #N/A | 検索結果が見つからない | VLOOKUPなどで検索値が見つからない。データ型(数値と文字列)の不一致が多い原因。 |
| #DIV/0! | ゼロでの割り算 | 割り算の分母がゼロまたは空白。IFERROR関数で回避するか、分母の値を確認する。 |
| #ERROR! | 数式の構文エラー | 括弧の数が合わない、全角記号が混入しているなど。数式バーをじっくり見直す。 |
特に「#N/A」エラーは、VLOOKUPを使うユーザーが最もよく遭遇するエラーです。検索キーが数値なのに検索範囲の値が文字列(または逆)だと、値が一致しないと判断されてエラーになります。また、VLOOKUPの第4引数(最後の引数)を省略するかTRUEにすると「近似一致」検索になり、意図しない結果を返すことがあります。完全一致で検索したいときは必ずFALSEを指定してください。
値を変えても関数の結果が更新されないときの対処法
数値を書き換えたのに、関数の計算結果が変わらない——この症状は、自動計算機能がオフになっている可能性が高いです。
計算設定を「変更時」に戻す
Googleスプレッドシートには、計算の実行タイミングを設定する機能があります。この設定が「手動」になっていると、値を変更しても関数は再計算されません。
確認・変更の手順は、「ファイル」メニューから「設定」を開き、「計算」タブをクリックします。「再計算」の項目が「変更時」になっているか確認してください。「手動」や他の設定になっていたら「変更時」に変更して「設定を保存」をクリックします。
ブラウザの更新・キャッシュのクリアが効くケース
Googleスプレッドシートはクラウドで動作するため、ブラウザの状態に大きく左右されます。F5キーでブラウザをリロードするだけで解決することも多いです。それでも改善しない場合は、
Ctrl + Shift + Delete
(Macは
Command + Shift + Delete
)でキャッシュをクリアしてみましょう。長時間使用していたり拡張機能を多数インストールしている場合は、ブラウザのキャッシュが溜まって動作が不安定になることがあります。
また、シークレットウィンドウ(プライベートブラウズ)でスプレッドシートを開いて正常に動くなら、拡張機能が干渉していると判断できます。その場合は「chrome://extensions/」にアクセスして拡張機能を一つずつ無効化し、原因を特定してください。
VLOOKUPとARRAYFORMULAのよくある落とし穴
中上級者でもハマりやすい特定の関数の落とし穴を解説します。
VLOOKUPで「#N/A」が出るときのチェックポイント
VLOOKUPのトラブルで最も多いのは、検索キーのデータ形式が検索範囲と一致していないケースです。例えば、社員番号「001」を文字列として検索しているのに、検索範囲には数値の「1」として入っている——これでは一致しないと判断され「#N/A」が返ります。
対処法として、検索値を数値に統一するなら
=VLOOKUP(VALUE(A1), B:C, 2, FALSE)
のようにVALUE関数でラップする方法があります。逆に文字列として統一するなら
=VLOOKUP(TEXT(A1,"000"), B:C, 2, FALSE)
のようにTEXT関数で形式を合わせます。
また、VLOOKUPの第4引数のFALSEを忘れるミスも非常に多いです。省略すると近似一致モードになり、「検索範囲の1列目が昇順に並んでいる」という前提で動くため、意図しないデータが返ることがあります。完全一致検索が目的なら常にFALSEを明示的に書く習慣をつけてください。
ARRAYFORMULAで「#REF!」エラーが出るとき
=ARRAYFORMULA()
は複数のセルに同時に計算結果を出力できる便利な関数ですが、出力先のセル範囲に1文字でもデータや空白スペースが入っていると「#REF!」エラーが発生します。スペースキーを誤って押してしまっただけでエラーになるため、出力先のセルが完全に空白であることを確認してください。ARRAYFORMULAを使う前に、出力先の列全体を選択してDeleteキーで内容を消去することをお勧めします。
IFERROR関数は「最後の砦」として使う
=IFERROR(元の数式, "エラー時に表示するもの")
という書き方で、エラーが出た場合に代わりのメッセージや値を表示できます。例えば
=IFERROR(VLOOKUP(A1, B:C, 2, FALSE), "該当なし")
のように使うと、検索結果がない場合に「#N/A」ではなく「該当なし」と表示されて見た目がすっきりします。ただし、IFERRORはエラーの原因そのものを解決するわけではなく、エラーを「隠す」だけです。乱用すると本来検知すべきデータの不整合を見逃すことになるので、原因を特定・解決した上で最終的な仕上げとして使いましょう。
Excelから移行したファイルで関数が動かないときは
ExcelのファイルをGoogleスプレッドシートで開いたとき、一部の関数が動かなくなる場合があります。ExcelにはあってGoogleスプレッドシートにはない関数が存在するからです。代表的なものでいえば、ExcelのXLOOKUP関数はGoogleスプレッドシートでも使えるようになりましたが、Excel専用の古い関数の中にはサポートされていないものがあります。
「#NAME?」エラーがExcelから移行したファイルで多発する場合は、その関数名をGoogleスプレッドシートの公式ヘルプで検索し、対応する代替関数を探してください。また、Excelのセル書式設定がうまく引き継がれず、数値が文字列として取り込まれるケースもあるため、移行後はデータ形式を再確認することをお勧めします。
日付や時刻の関数がおかしい結果を返すとき
=TODAY()
や
=NOW()
が想定と異なる日付を返す、または日付の計算がおかしくなる——これはGoogleスプレッドシートのタイムゾーンとロケールの設定が原因のことがあります。
「ファイル」メニューの「設定」を開いてみてください。「タイムゾーン」が「(GMT+09:00) Tokyo」になっているか、「ロケール」が「日本」になっているか確認しましょう。設定が異なると、TODAY()関数が日本時間ではなく別のタイムゾーンの「今日」を返すことがあります。複数人で共有しているファイルでは、ファイル作成者の設定が反映されることが多いので、共有ファイルを使う際は必ず確認することを習慣にしてください。
また、Googleスプレッドシートでは日付を内部的に「シリアル値」という数値で管理しています。1899年12月30日を基準(シリアル値0)として、1日ごとに1加算される仕組みです。日付のセルを数値形式に変更したら「45000」などの大きな数字が表示されてびっくりした経験がある方も多いかもしれませんが、これは正常な動作です。日付として表示するには書式を「日付」に戻してください。
Google Apps Script(GAS)のカスタム関数が動かないとき
通常の関数では実現できない処理をGoogle Apps Scriptで作った「カスタム関数」が動かない場合は、通常の関数とは異なる制限が原因です。
カスタム関数はスプレッドシート上から「関数のように」呼び出せますが、メール送信・外部サービスへのアクセス・ファイル操作などの副作用を伴う処理は実行できません。カスタム関数は「入力を受け取って値を返す計算処理のみ」に限定されます。これらの制限に引っかかっている場合は、処理をボタンやメニューから実行するトリガー型のスクリプトに書き直す必要があります。
また、カスタム関数の実行時間には制限があります(1回あたり最大30秒)。大量のデータを処理しようとしてタイムアウトが発生している可能性もあります。デバッグには
try { ... } catch(e) { return e.message; }
のようにエラーメッセージをセルに返す方法が有効です。
共有設定の「罠」——知らないと情報漏洩が起きる権限設計の本当の話
このセクションを読むと、Googleスプレッドシートの共有設定でやってはいけないことと、組織でのベストプラクティスが明確にわかります。15年以上の法人運用で、共有設定の誤りが原因の情報漏洩を何件も目撃してきたからこそ、ここは絶対に伝えたい部分です。
※以下の手順は2026年5月時点のPC版Google Chrome上のGoogleスプレッドシートを基準にしています。
「リンクを知っている全員」設定——これが一番怖い
ぶっちゃけこれが一番多い事故パターンです。「社内で共有したいから共有リンクを作った」という善意の操作が、設定を1つ間違えるとインターネット上の誰でも閲覧できる状態になります。具体的に言うと、スプレッドシートの共有ダイアログで「リンクを知っている全員」かつ「インターネット上の全員」を選択すると、そのURLさえあれば社外の人間でも、Googleアカウントを持っていない人でもアクセスできてしまいます。
実際に対応したケースを挙げると、ある会社の営業担当が取引先に見積書をGoogleスプレッドシートで送る際、「リンクを知っている全員」で共有しました。問題はその後、同じスプレッドシートの別シートに全顧客の個人情報と売上データが入っていたことです。取引先がURLを別の会社に転送した結果、情報が流出しました。このケースでは「シートを分けていれば」「権限を絞っていれば」と何十回も後悔することになりました。
【絶対にやってはいけない共有設定】
「リンクを知っている全員」+「インターネット上の全員」の組み合わせは、事実上のパブリック公開です。社外秘・個人情報を含むファイルには絶対に使用しないでください。社内共有であれば「自分のorganizationのメンバー全員」に限定するか、特定のメールアドレスに個別付与する方式にしてください。
4つの権限レベルと「与えすぎ」のリスク
Googleスプレッドシートの権限には4段階あります。これを誤って設定すると、意図しない操作が起きます。
| 権限レベル | できること | 与えるべき対象 | リスク |
|---|---|---|---|
| オーナー | 全操作+他者の権限変更+削除 | 管理責任者のみ | 誤ってファイルを削除・共有設定変更 |
| 編集者 | 編集・共有設定変更・シート保護解除 | 実際に編集する人だけ | 意図しないデータ削除・共有範囲の拡大 |
| コメント可 | 閲覧+コメント追加のみ | フィードバックをもらいたい人 | 比較的安全だが履歴には残る |
| 閲覧者 | 閲覧のみ | 参照するだけの人・社外の人 | ダウンロードは可能なため注意 |
見落とされやすいのが「編集者に共有設定の変更権限がある」という点です。つまり編集者は、勝手に「リンクを知っている全員に公開」に変更できてしまいます。これを防ぐには、
共有 > 設定(歯車アイコン)
から「編集者が権限を変更したり、共有できる範囲を制限する」のチェックを外すことで、編集者の権限変更を制限できます。これを知らずに運用している組織が非常に多いです。
共有ドライブ(旧チームドライブ)とマイドライブの使い分け
個人のマイドライブにファイルを置いて共有する運用は、組織として最も危険なパターンです。なぜかというと、担当者が退職した瞬間にそのファイルへのアクセスが問題になるからです。退職者のアカウントを無効化すると、マイドライブのファイルも見えなくなります(管理者が移管しない限り)。
業務で使うスプレッドシートは必ず共有ドライブ(Shared Drive)に置くのが鉄則です。共有ドライブはメンバーではなく「組織」がファイルを所有するため、担当者の変更があっても継続してアクセスできます。ただし共有ドライブはGoogle Workspace有料プランが必要で、個人の無料Googleアカウントでは利用できません。
IMPORTRANGEの権限連鎖リスクを知らないと危ない
Googleの公式ドキュメントには書いていないんですが、
=IMPORTRANGE("スプレッドシートURL", "範囲")
を使って別のスプレッドシートのデータを参照すると、裏でこんなことが起きています。
IMPORTRANGEを含むスプレッドシートを開いた別のユーザーが「アクセスを許可」ボタンを押した時点で、そのユーザーは参照元スプレッドシートへの閲覧権限が付与されます。つまり、「集計シートだけ共有したのに、参照元の生データシートも見られるようになった」という事態が起きるのです。
【IMPORTRANGEを使う前に確認すること】
参照元スプレッドシートに機密情報が含まれていないか確認してください。部署間データ連携でIMPORTRANGEを使う場合は、参照元の「保護されたシート」設定と組み合わせるか、GASで定期的にデータをコピーする方式に切り替えることを検討してください。
変更履歴で「誰かが消したデータ」を復元する方法と限界
Googleスプレッドシートには、Excelにはない「変更履歴(バージョン履歴)」があります。
ファイル > 変更履歴 > 変更履歴を表示
で過去の状態に戻すことができます。この機能、「誰かがデータを誤って削除してしまった」という事故対応で何度助けられたかわかりません。
ただし正直に言うと、変更履歴にはできないことがあります。特定のセルだけを過去の状態に戻す操作は標準機能ではサポートされていません。変更履歴から復元するとファイル全体が過去の状態に戻るため、その後に加えた他の変更も消えてしまいます。セル単位での復元がしたい場合は、変更履歴の画面で過去の版を参照しながら手動でコピー&ペーストするしかありません。
再発防止の恒久策として、重要なシートには「保護された範囲」設定を使ってください。
データ > シートと範囲を保護
から設定でき、特定のセル範囲を「編集できるユーザーを限定する」ことができます。編集権限を持っていても保護範囲は変更できないため、誤操作やいたずら防止に効果的です。
ExcelからGoogleスプレッドシートへの移行——「ほぼ同じ」は大嘘、これが本当の互換性問題
ExcelユーザーがGoogleに移行したときに必ず引っかかる罠を、「知らなかった」では済まない実例とともに解説します。このセクションは、Excel移行支援を何十社も担当してきた経験から書いています。
Excel VBAマクロ → GASへの移行の本当の話
問題名Excelのマクロ(VBA)がGoogleスプレッドシートで動かない
症状.xlsxファイルをGoogleスプレッドシートで開いたらマクロが全部消えた
原因ExcelのVBA(Visual Basic for Applications)とGoogleのGAS(Google Apps Script)はまったく別の言語・実行環境。自動変換機能は存在しない
スプレッドシートでの正しい代替方法GASはJavaScriptベースで書き直しが必要。シンプルなマクロなら数時間、複雑なVBAツールなら数日〜数週間かかる場合も。ChatGPTにVBAコードを貼り付けて「GASに変換して」と頼む方法も有効だが、SpreadsheetAppのメソッド名等は必ず動作確認が必要
Excel形式(.xlsx)で保存する場合の注意GASスクリプトはxlsxに含まれないため、Excelに戻すとマクロは完全に消える
Power Query / PowerPivot → QUERY関数 / BigQueryへの代替
問題名Excelで使っていたPower QueryがGoogleにない
症状複数のシートを結合・変換・フィルタリングしていたPower Queryのレポートが再現できない
原因GoogleスプレッドシートにはPower Query相当のGUIツールが存在しない
スプレッドシートでの正しい代替方法シンプルなフィルタリングや集計は
=QUERY()
関数で代替可能。複雑な変換・結合が必要な場合はGASでデータ処理スクリプトを書くか、BigQueryのコネクテッドシートを使う。大量データを定期処理するならBigQueryへの移行を検討
Excel形式で保存する場合の注意QUERY関数はxlsx保存するとエラー値に変換される場合がある
条件付き書式のルールが壊れるパターン
問題名Excelの条件付き書式がGoogleで崩れる
症状.xlsxをGoogleで開いたら、条件付き書式の色が消えたり、ルールの範囲がずれた
原因ExcelとGoogleでは条件付き書式のルール仕様が一部異なる。特に「数式を使用するルール」はExcelのR1C1形式参照がGoogleに正しく変換されない場合がある
スプレッドシートでの正しい代替方法条件付き書式は移行後に全て手動で再設定するのが確実。GASでプログラム的に設定する方法もある
Excel形式で保存する場合の注意Googleで追加した条件付き書式をxlsxに保存すると、一部のカスタム書式が失われる場合がある
XLOOKUP・LET・LAMBDAの互換性状況(2026年5月時点)
Googleスプレッドシートは近年、ExcelのモダンなLet関数(
=LET()
)やLAMBDA関数(
=LAMBDA()
)、XLOOKUP(
=XLOOKUP()
)の対応を進めています。2026年5月時点では、これらの関数はGoogleスプレッドシートでも利用可能になっています。ただし、ExcelとGoogleで引数の仕様が微妙に異なる場合があり、単純なコピー&ペーストで動かないことがあります。移行後は必ず動作確認してください。
逆に、Googleスプレッドシートにしかない関数でExcelに代替がないものも多くあります。
-
=QUERY(data, query)SQLライクなクエリで範囲データを操作。Excelには存在しない。
-
=ARRAYFORMULA()1つの数式を配列全体に展開。ExcelのCtrl+Shift+Enterとは設計思想が異なる。
-
=GOOGLETRANSLATE(text, "ja", "en")Google翻訳をセルで実行。Excelには存在しない。
-
=IMPORTHTML(url, query, index)Webページのテーブルを自動取得。Excelにはない(Power QueryのWeb接続とは異なる)。
-
=IMPORTRANGE(url, range)別のスプレッドシートからデータを参照。Excelにはない(ブック間参照とは仕組みが違う)。
GASコード実務集——コピペしてすぐ使えるスクリプト4選
【重要】実行前に必ずスプレッドシートのコピーを作成してください。
ファイル > コピーを作成でバックアップを取ってからスクリプトを実行してください。GASは実行取り消しができません。特にデータを削除・上書きするスクリプトは一度実行すると元に戻せない場合があります。
GASのスクリプトエディタへのアクセスは
スプレッドシート > 拡張機能 > Apps Script
から行います。
GASの「やってはいけない危険地帯」——まず必ず読んでください
コードを使う前に、GAS開発で絶対に知っておくべき4つの危険を先に説明します。これを知らずにコードを書くと、想定外の事故が起きます。
危険①トリガー実行から
getActiveSpreadsheet()
を呼ぶのは厳禁
手動実行ではアクティブなスプレッドシートを取得できますが、時間トリガーなどのバックグラウンド実行では「アクティブなスプレッドシート」が定義されないため、意図しないスプレッドシートを操作するか、エラーで止まります。トリガーから実行するコードでは必ず
SpreadsheetApp.openById("スプレッドシートID")
でIDを直接指定してください。
危険②ループ内での
setValue()
連続実行は実行時間超過の元
1000行のデータに対して
for
ループの中で
cell.setValue(value)
を1000回呼ぶと、各呼び出しでGoogleのサーバーと通信が発生し、実行時間が爆発します。正解は配列にまとめて
range.setValues(array)
で一括書き込みです。速度が100倍以上変わることがあります。
危険③無限ループトリガーに注意
onChange
トリガーでスクリプトを起動し、そのスクリプト内でシートに書き込みをすると、書き込みが再び
onChange
を発火させて無限ループになります。防止策として、
LockService.getScriptLock()
で排他制御をするか、「処理中フラグ」をセルやPropertiesServiceに書き込んで二重起動を防ぎます。
危険④個人アカウントのトリガーは退職リスク
個人のGoogleアカウントでトリガーを設定すると、その人が退職したりアカウントが変わった瞬間にトリガーが止まります。組織で運用するGASは必ずサービスアカウントか、Google Workspace管理者が管理するアカウントでトリガーを設定してください。
コード1重複行を削除して整形する自動化スクリプト(データ処理)
/**
* 関数名removeDuplicateRows
* 用途アクティブシートの指定列を基準に重複行を削除する
* 動作確認Google Apps Script V8ランタイム
* 実行方法スクリプトエディタから手動実行
* 必要な権限スコープSpreadsheetApp(スプレッドシートの読み書き)
* 実行制限への注意1回の実行は最大6分(消費者アカウント)、30分(Workspaceアカウント)
* 大量データ(1万行以上)の場合は分割実行を検討してください
* トリガー設定不要(手動実行)
* Google Workspaceプラン要件無料アカウントでも動作可
* 注意事項実行前に必ずスプレッドシートのコピーを作成すること。
* 削除は取り消しできません。
*/
function removeDuplicateRows() {
try {
// 対象スプレッドシートをIDで明示的に指定(トリガー実行でも安全)
// ※手動実行の場合はgetActiveSpreadsheet()でも可
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// シートの全データを一括取得(setValue()の連続呼び出しを避けるため)
var data = sheet.getDataRange().getValues();
var headers = data; // 1行目をヘッダーとして保存
// 重複チェックに使う列のインデックス(0始まり)
// 例A列を基準にする場合は 0、B列なら 1
var KEY_COLUMN_INDEX = 0;
// 既出のキーを記録するセット
var seen = {};
var uniqueRows = ; // ヘッダー行は必ず含める
// 2行目以降のデータをチェック
for (var i = 1; i < data.length; i++) {
var key = data;
if (key !== "" && !seen) {
// 初出のキーなら追加
seen = true;
uniqueRows.push(data);
}
// 空行と重複行はスキップ
}
// シートをクリアして一括書き込み(setValues()で1回だけ通信)
sheet.clearContents();
sheet.getRange(1, 1, uniqueRows.length, uniqueRows.length)
.setValues(uniqueRows);
// 処理結果をダイアログで表示
var removed = data.length - uniqueRows.length;
SpreadsheetApp.getUi().alert(
'処理完了:' + removed + '行の重複を削除しました。\n' +
'残行数:' + (uniqueRows.length - 1) + '行'
);
} catch (e) {
// エラー発生時はメッセージを表示して安全に終了
SpreadsheetApp.getUi().alert('エラーが発生しました:' + e.message);
Logger.log('removeDuplicateRows エラー: ' + e.toString());
}
}
コード2特定のシートを保護してメンバー外の編集をブロック(シート管理)
/**
* 関数名protectMasterSheet
* 用途「マスタ」という名前のシートを保護し、指定メールアドレスのみ編集可にする
* 動作確認Google Apps Script V8ランタイム
* 実行方法スクリプトエディタから手動実行
* 必要な権限スコープSpreadsheetApp(スプレッドシートの読み書き)
* 実行制限への注意実行時間は短い。制限は問題にならない
* トリガー設定不要
* Google Workspaceプラン要件無料アカウントでも動作可
* ただし、保護設定の管理はWorkspace管理者コンソールと連携しない
* 注意事項実行前にスプレッドシートのコピーを作成すること
*/
function protectMasterSheet() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// 保護したいシートを名前で取得
var sheet = ss.getSheetByName("マスタ");
if (!sheet) {
SpreadsheetApp.getUi().alert('"マスタ"という名前のシートが見つかりません');
return;
}
// 既存の保護設定を全て削除(重複設定を防ぐ)
var existingProtections = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
for (var i = 0; i < existingProtections.length; i++) {
existingProtections.remove();
}
// シート全体を保護
var protection = sheet.protect().setDescription("マスタシート保護:管理者のみ編集可");
// 編集を許可するメールアドレスリスト(必要に応じて変更してください)
var ALLOWED_EDITORS = [
"admin@example.com",
"manager@example.com"
];
// 許可ユーザー以外の全ての編集者を削除
protection.removeEditors(protection.getEditors());
// 許可ユーザーを追加
for (var j = 0; j < ALLOWED_EDITORS.length; j++) {
try {
protection.addEditor(ALLOWED_EDITORS);
} catch (addErr) {
Logger.log('編集者追加エラー(' + ALLOWED_EDITORS + '): ' + addErr.message);
}
}
SpreadsheetApp.getUi().alert(
'保護設定完了!\n' +
'"マスタ"シートは以下のユーザーのみ編集できます:\n' +
ALLOWED_EDITORS.join('\n')
);
} catch (e) {
SpreadsheetApp.getUi().alert('保護設定エラー:' + e.message);
Logger.log('protectMasterSheet エラー: ' + e.toString());
}
}
コード3Googleフォームの回答を整形してGmailで自動通知(外部連携)
/**
* 関数名notifyOnFormSubmit
* 用途Googleフォームの回答がスプレッドシートに記録されたとき、
* 担当者にメールで通知する
* 動作確認Google Apps Script V8ランタイム
* 実行方法フォーム送信トリガー(onFormSubmit)として設定
* 必要な権限スコープSpreadsheetApp(読み取り)、MailApp(メール送信)
* 実行制限への注意
* メール送信は1日100通(無料)/ 1500通(Workspace)が上限
* フォーム送信が多い場合はMailApp.getRemainingDailyQuota()で残数確認
* トリガー設定
* スクリプトエディタ > トリガー > トリガーを追加
* イベントソーススプレッドシート、イベントフォーム送信時
* Google Workspaceプラン要件無料でも動作可(メール上限は異なる)
* 注意事項
* トリガーからの実行のため、openById()でスプレッドシートIDを指定すること。
* 実行前にスプレッドシートのコピーを作成すること。
*/
function notifyOnFormSubmit(e) {
try {
// 通知先メールアドレス(必要に応じて変更)
var NOTIFY_EMAIL = "担当者@example.com";
// フォーム回答データをイベントオブジェクトから取得
// e.values には回答の配列が入っている()
var responses = e.values;
var timestamp = responses;
// メール送信前に残りの送信可能数を確認
var remaining = MailApp.getRemainingDailyQuota();
if (remaining < 1) {
Logger.log('メール送信クォータが上限に達しました。本日のメール送信をスキップします。');
return;
}
// メール本文を組み立て
var subject = "【フォーム回答通知】新しい回答がありました:" + timestamp;
var body = "フォームへの新しい回答が届きました。\n\n";
body += "受信時刻:" + timestamp + "\n\n";
body += " 回答内容 \n";
// 回答内容を1行ずつ追加(列数に関わらず動的に処理)
for (var i = 1; i < responses.length; i++) {
body += "回答" + i + ":" + responses + "\n";
}
body += "\n※このメールはGoogleフォーム連携システムから自動送信されています。";
// メール送信
MailApp.sendEmail({
to: NOTIFY_EMAIL,
subject: subject,
body: body
});
Logger.log('通知メール送信完了:' + timestamp);
} catch (e) {
// エラーをログに記録(UIは表示できないため)
Logger.log('notifyOnFormSubmit エラー: ' + e.toString());
}
}
コード4毎日指定時刻にシートを自動バックアップ(トリガー・スケジュール実行)
/**
* 関数名dailyBackup
* 用途指定のスプレッドシートを毎日自動でコピーし、
* バックアップフォルダに保存する
* 動作確認Google Apps Script V8ランタイム
* 実行方法時間ベーストリガー(毎日 午前1時〜2時)として設定
* 必要な権限スコープSpreadsheetApp(コピー作成)、DriveApp(ファイル操作)
* 実行制限への注意
* DriveApp操作は1日のURLフェッチ制限(無料20,000回/Workspace100,000回)とは別枠
* コピー処理自体は制限に引っかかりにくい
* トリガー設定
* スクリプトエディタ > トリガー > トリガーを追加
* 時間ベース毎日、午前1時〜2時
* 【重要】トリガーはこのスクリプトを所有する担当者のアカウントに紐づきます。
* 退職などでアカウントが無効になるとトリガーが止まります。
* 組織用途ではサービスアカウントの使用を推奨します。
* Google Workspaceプラン要件無料アカウントでも動作可
* バックアップ先フォルダをMyDriveに作る場合は容量制限(15GB)に注意
* 共有ドライブを使うにはWorkspace有料プランが必要
* 注意事項
* SPREADSHEET_IDとBACKUP_FOLDER_IDは必ず実際の値に変更してください。
* getActiveSpreadsheet()はトリガー実行で使用禁止——openById()を使用すること。
*/
function dailyBackup() {
// ★ここを実際のIDに変更してください★
// スプレッドシートのURLから取得/spreadsheets/d/【ここがID】/edit
var SPREADSHEET_ID = "your-spreadsheet-id-here";
// バックアップ先フォルダのID(GoogleドライブのフォルダURLから取得)
var BACKUP_FOLDER_ID = "your-backup-folder-id-here";
try {
// IDで明示的にスプレッドシートを開く(トリガー実行の鉄則)
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var ssName = ss.getName();
// バックアップ先フォルダを取得
var backupFolder = DriveApp.getFolderById(BACKUP_FOLDER_ID);
// 日付文字列を生成(YYYY-MM-DD形式)
var today = new Date();
var dateStr = Utilities.formatDate(today, "Asia/Tokyo", "yyyy-MM-dd");
// バックアップファイル名を設定
var backupName = " " + ssName;
// スプレッドシートのファイルをDriveAppで取得してコピー
var originalFile = DriveApp.getFileById(SPREADSHEET_ID);
var backupFile = originalFile.makeCopy(backupName, backupFolder);
Logger.log(
'バックアップ完了' + backupName +
'\nファイルID' + backupFile.getId()
);
// 古いバックアップを削除(30日以上前のものを削除する場合)
cleanOldBackups(backupFolder, 30);
} catch (e) {
Logger.log('dailyBackup エラー: ' + e.toString());
// バックアップ失敗をメールで通知(任意)
try {
MailApp.sendEmail(
Session.getActiveUser().getEmail(),
"【警告】スプレッドシート自動バックアップが失敗しました",
"エラー詳細\n" + e.toString()
);
} catch (mailErr) {
Logger.log('エラー通知メール送信失敗' + mailErr.toString());
}
}
}
/**
* 指定日数より古いバックアップファイルを削除するヘルパー関数
*/
function cleanOldBackups(folder, daysToKeep) {
try {
var cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
// ファイル名にが含まれるものだけを対象にする
if (file.getName().indexOf("[バックアップ") === 0 &&
file.getDateCreated() < cutoffDate) {
file.setTrashed(true); // ゴミ箱に移動(完全削除ではない)
Logger.log('古いバックアップを削除:' + file.getName());
}
}
} catch (e) {
Logger.log('cleanOldBackups エラー:' + e.toString());
}
}
QUERY・ARRAYFORMULA・IMPORTRANGE——便利さの裏にある「計算量爆発」の正体
このセクションを読むと、スプレッドシートが「重くて使い物にならない」状態になる原因と、それを防ぐ設計パターンが具体的に理解できます。
※以下の内容は2026年5月時点のPC版Google Chrome上のGoogleスプレッドシートを基準にしています。
QUERY関数——「SQLっぽいけど違う」罠と正しい書き方
QUERY関数の構文は一見SQLそっくりですが、微妙に違うところがいくつかあって、ExcelのPower QueryやデータベースのSQLに慣れた人ほど引っかかります。
特に日付フィルタは罠が多いです。SQLなら
WHERE date = '2026-05-09'
と書けそうですが、QUERYではこれは動きません。正解は
=QUERY(A1:C100, "SELECT * WHERE A = date '2026-05-09'", 1)
のように
date
キーワードをつけた上でyyyy-MM-dd形式で書く必要があります。
また、列の指定方法にも注意が必要です。範囲の1列目はCol1、2列目はCol2と書く「Col番号方式」と、ヘッダー名をそのまま使う方式があります。ヘッダー名方式は便利ですが、ヘッダーに日本語が含まれるとエラーになることがあるため、業務用のシートではCol番号方式の方が安定しています。
QUERYとFILTER関数の使い分けについて言うと、単純な条件で行を絞り込むだけならFILTER関数の方がシンプルで可読性が高いです。QUERYを使うべきなのは、「グループ集計(GROUP BY)」「列の並び替え(ORDER BY)」「上位N件の取得(LIMIT)」など、SQLライクな操作が必要な場合です。
ARRAYFORMULAが数万行に展開すると何が起きるか
ARRAYFORMULAの便利さは「1つの式で複数行に結果を展開できる」ことですが、これが諸刃の剣です。例えば
=ARRAYFORMULA(IF(A:A<>"", A:A*B:A, ""))
のように列全体を参照すると、Googleスプレッドシートはその列の全行(最大1,000行以上)に対して計算を実行しようとします。データが100行しかなくても、1,048,576行分の計算が走る場合があります。
計算量を抑えるテクニックとして、列全体(
A:A
)ではなく「必要な行数だけ展開する」書き方が有効です。例えばデータが常に1000行以内であれば
A2:A1001
のように範囲を限定してください。それでもデータ行数が動的に変わる場合は、
=ARRAYFORMULA(IF(ROW(A:A)>COUNTA(A:A)+1, "", A:A*B:B))
のように行番号とデータ件数を比較して展開範囲を制御する方法もあります。
IMPORTRANGEを多用してはいけない理由
IMPORTRANGEが「遅い・エラーになる・更新が止まる」という相談は本当に多いです。その原因を正直に話すと、IMPORTRANGEはスプレッドシートを開くたびに参照元から外部データを取得しに行く「リアルタイム参照」です。参照元のスプレッドシートが大きかったり、複数のIMPORTRANGEを重ねたりすると、読み込みに数分かかることもあります。また、参照元のファイルに問題が起きると連鎖的にエラーになります。
個人利用や小規模な用途なら許容できますが、組織の基幹データを扱う場合はGASで定期的に値をコピーする「スナップショット方式」に切り替えることを強くお勧めします。GASで参照元データを一括取得して
setValues()
で書き込むスクリプトを時間トリガーで動かす方が、パフォーマンスと信頼性の両面で優れています。
スプレッドシートを遅くする「Volatile関数」の罠
=NOW()
、
=TODAY()
、
=RAND()
、
=INDIRECT()
などは「Volatile関数(揮発性関数)」と呼ばれ、シートのどこかが変更されるたびに再計算が走るという特性を持ちます。これらをたくさん使うと、1つのセルを編集するたびに全てのVolatile関数が再計算され、シートが重くなります。
「現在時刻を記録したい」という目的でNOW()を使う代わりに、GASの
new Date()
で取得した時刻を値として貼り付ける方が、パフォーマンス的に優れています。また、INDIRECTは参照先が動的に変わる便利な関数ですが、使いすぎるとシート全体の計算が重くなるため、固定の範囲参照で代替できる場合はINDIRECTを避けることをお勧めします。
BigQuery・Looker Studioとの連携——スプレッドシートを「データ活用基盤」に昇格させる方法
このセクションは、スプレッドシートの「関数が動かない」という個別の問題を超えて、「そもそもどう使うのが正解か」を伝えるためのパートです。2026年2月にGoogleが発表した通り、コネクテッドシートはBigQuery MLとTimesFMモデルを統合し、SQL不要で将来予測ができるレベルまで進化しています。
コネクテッドシート(BigQuery連携)の使い方と注意点
コネクテッドシートは、BigQueryに蓄積された数億・数十億行のデータをGoogleスプレッドシートのピボットテーブル・グラフ・数式で直接分析できる機能です。
データ > データコネクタ > BigQueryに接続
から設定します。
【プラン要件】
コネクテッドシートはGoogle Workspace Business Standard以上(または Enterprise、Education Standard以上)のプランが必要です。無料のGoogleアカウントやBusiness Starterでは利用できません。また、Google Cloudプロジェクトと課金設定が別途必要です。
コスト爆発を防ぐために特に重要なのが、クエリのスコープ設計です。コネクテッドシートで操作するたびに、BigQueryに対してクエリが実行されます。BigQueryは処理するデータ量に応じて課金されるため(無料枠月1TBまで)、「WHERE句なしで全テーブルをスキャンするピボット」を繰り返すとコストが急増します。必ず絞り込み条件(フィルタ)を設定してから集計操作をする習慣をつけてください。
Looker Studioとスプレッドシート連携の注意点
スプレッドシートをLooker Studioのデータソースにする場合、列名の命名規則が最重要です。列名にスペース・記号・日本語を含めると、Looker Studio側でフィールド名の認識に問題が起きることがあります。列名は半角英数字とアンダースコアで構成するのが最も安全です(例
sale_amount
)。
「Looker Studioのグラフが更新されない」という問題の原因は、ほぼデータソースのキャッシュです。Looker Studioはスプレッドシートのデータを最大12時間キャッシュするため、スプレッドシートを更新してもすぐには反映されません。手動でキャッシュをクリアするには、Looker Studioの画面右上のメニューから「データを更新」を実行します。即時反映が必要な用途には、スプレッドシートではなくBigQueryをデータソースにすることを検討してください。
Googleフォーム連携で「列が増えてデータが壊れる」を防ぐ
Googleフォームに質問を後から追加すると、スプレッドシートの回答シートに新しい列が自動で追加されます。この仕様のため、フォームの質問を変更するたびに既存の集計数式やGASスクリプトで参照している列番号がずれて壊れます。
防止策として、フォーム回答シートは「生データの受け皿」として完全にそのまま残し、別シートでIMPORTRANGEまたはGASでデータを整形・加工するアーキテクチャを採用してください。また、フォームの質問は運用開始後にできる限り変更しないことがベストです。変更が必要な場合は、既存フォームを変更するのではなく、新しいフォームを作成して切り替える方が安全です。
Google Workspaceプラン別——「できること・できないこと」完全比較表
「個人アカウントと会社のWorkspaceアカウントでできることが全然違う」という混乱を解消します。2026年5月時点の情報です。
| 機能名 | 無料(個人)Googleアカウント | Business Starter | Business Standard以上 | 注意事項 |
|---|---|---|---|---|
| GAS 1日の合計トリガー実行時間 | 90分/日(トリガー実行) | 同左 | 6時間/日(トリガー実行) | 手動実行は別枠。制限超過でスクリプト停止 |
| GAS 1回の最大実行時間 | 6分/回 | 同左 | 30分/回 | 超過するとタイムアウトエラー |
| GAS URLフェッチ上限 | 20,000リクエスト/日 | 同左 | 100,000リクエスト/日 | 外部API連携に影響 |
| GASメール送信上限 | 100通/日 | 同左 | 1,500通/日 | MailApp.sendEmail()での送信数 |
| 共有ドライブ(Shared Drive) | 利用不可 | 利用可(制限あり) | 利用可 | 組織運用の基本。無料では使えない |
| コネクテッドシート(BigQuery連携) | 利用不可 | 利用不可 | 利用可 | BigQuery側のGCPプロジェクトと課金も必要 |
| 管理者コンソールによるGAS制御 | 利用不可 | 利用可 | 利用可 | 組織全体でGASの実行ポリシー設定が可能 |
| スプレッドシートの最大セル数 | 1,000万セル | 同左 | 同左 | プランによる差異なし |
よくある移行時の落とし穴として、「個人アカウントでGASを作りこんでいたら、会社のWorkspaceアカウントではGASの実行が組織ポリシーでブロックされていた」というケースがあります。Google Workspace管理者が「Google Apps Scriptの使用を制限」に設定している場合、Workspaceアカウントではスクリプトが全く動きません。この場合は情シスや管理者に相談して設定の変更を依頼してください。
現場の「あるある困った」実体験解決集——情シス担当が実際に対応したトラブル6選
困った1スプレッドシートが重くて使い物にならない
【困った状況】
部門の月次レポートシートが突然カクカクになりました。関数を1つ変更するだけで10秒以上フリーズして、会議中に使えない状態になったんですよね。
【なぜこれが起きるのか】
原因はほぼ3パターンのどれかです。①Volatile関数(TODAY・NOW・INDIRECT・RAND)が多数あり、変更のたびに全て再計算している。②ARRAYFORMULAやQUERYが列全体を参照していて計算量が膨大になっている。③IMPORTRANGEを複数使っていて外部参照が積み重なっている。Googleスプレッドシートはブラウザ上で動作するため、Excelと違ってローカルCPUのパワーで計算できません。計算はGoogleのサーバーで処理されますが、スクリプトの実行やUI応答はブラウザが担当するため、複雑な数式が絡むとブラウザが詰まります。
【その場でできる応急処置】
- Chromeのシークレットモードで開いてみる(拡張機能の影響を排除)。
-
ファイル > 設定 > 計算 > 再計算変更時になっているか確認する。
- 該当ファイルのタブだけを開いた状態で、他のタブを全部閉じる。
- ブラウザのキャッシュをクリアして再起動する。
【根本解決の手順】
ツール > スプレッドシートの統計情報
でセル数・数式数を確認します。数式が数千を超えていたら削減を検討してください。ARRAYFORMULA/QUERYの参照範囲を列全体(
A:A
)から必要行数に絞ります。TODAY・NOWを計算の中で使っている場合は、GASで定期的に値を書き込む方式に切り替えます。
【やってはいけないNG対処】
「とりあえず全部の列に書いてある数式を削除してから貼り直す」という対応はやめてください。数式の参照構造が崩れた場合、削除前に状態を記録していないと何がどこを参照していたか追えなくなります。
【GASで解決できる場合】
重い計算をGASで定期実行して値貼り付けにする方針に切り替える場合、
range.setValues(calculatedArray)
で計算済みの値だけを書き込むスクリプトを作ります。
【情シス視点のひとこと】
正直、「なんでこんなに遅いの?」という相談の8割はARRAYFORMULAかIMPORTRANGEの使い過ぎです。ファイルの統計情報と数式の参照範囲を最初に確認するのが一番早い診断方法です。Workspaceの有料プランでも処理できる計算量の上限は変わらないので、プランを上げても解決しないことが多いです。
困った2GASが突然動かなくなった
【困った状況】
毎朝9時に自動でレポートを生成していたGASトリガーが、ある日突然止まっていました。コードは何も変えていないのに、スクリプトエディタを開いたら実行履歴がエラーだらけで。
【なぜこれが起きるのか】
GASトリガーが止まる原因は主に4つです。①OAuth認証の有効期限切れ(長期間使っていないと再認証が必要になる)。②1日の実行時間制限(90分/日無料、6時間/日Workspace有料)を超過した。③参照しているスプレッドシートの権限が変わった。④スクリプトオーナーのGoogleアカウントが変更・無効化された。トリガーはあくまで「スクリプトを所有するアカウント」の権限で動くため、担当者のアカウントに問題があると一切動きません。
【その場でできる応急処置】
-
スクリプトエディタ > 実行履歴でエラーメッセージを確認する。
- スクリプトを手動実行してみて、認証ダイアログが出たら再承認する。
-
スクリプトエディタ > トリガーでトリガーが有効になっているか確認する。
- 「クォータを超過しました」系のエラーなら翌日まで待つ(クォータは24時間でリセット)。
【根本解決の手順】
OAuth認証切れの場合は
スクリプトエディタ > サービス
または
プロジェクトの設定
から再承認します。クォータ超過の場合はスクリプトの処理を分割し、1回の実行時間を短縮します。担当者変更リスクに対しては、スクリプトのオーナーを組織の共有アカウント(またはサービスアカウント)に移管してください。
【やってはいけないNG対処】
「トリガーを一度全部削除して作り直す」という対応は、トリガーの設定内容を記録していない場合に「どのトリガーを設定していたか」が分からなくなるリスクがあります。削除前に設定内容をスクリーンショットで記録してください。
【情シス視点のひとこと】
GASトリガーは「見えないところで動いているから問題が起きても気づきにくい」のが一番の課題です。重要なGASには必ず
MailApp.sendEmail()
でエラー通知を入れてください。「静かに止まるトリガー」は最悪です。
困った3ExcelファイルをGoogleで開いたら壊れた
【困った状況】
取引先からもらったExcelファイルをGoogleドライブにアップしてスプレッドシートで開いたら、条件付き書式が全部崩れて、一部のVLOOKUPが#N/Aエラーになりました。大事な請求書データだったので焦りました。
【なぜこれが起きるのか】
ExcelとGoogleスプレッドシートは同じ表計算ソフトのように見えて、内部の仕様がかなり異なります。条件付き書式の崩れは、ExcelのR1C1参照方式や一部のルール定義がGoogleに正しく変換されないためです。VLOOKUPの#N/Aは、Excelで数値として入力されていたデータがGoogleで文字列として取り込まれることで、データ型の不一致が起きるためです。
【その場でできる応急処置】
- 元のExcelファイルはそのまま保管(変換前のコピーを残す)。
- Googleスプレッドシートで開いたファイルを「スプレッドシート形式で保存」してから作業する。
- #N/Aが出ているセルの参照元と参照先でISNUMBER()・ISTEXT()を使ってデータ型を確認する。
- 文字列になっている数値はVALUE()関数で変換する。
【根本解決の手順】
条件付き書式は移行後に全て手動で再設定します。VLOOKUP等のデータ型不一致は、参照先のデータをVALUE()またはTEXT()で統一します。定期的にExcelからデータを受け取る業務の場合は、GASで取り込み時にデータ型を自動変換するスクリプトを作ると効率化できます。
【やってはいけないNG対処】
「とにかく全部手動で打ち直す」という対応は、データが多い場合に入力ミスのリスクが高く、元のExcelとの照合作業が発生します。必ずVALUE()・TRIM()・CLEAN()などの変換関数で機械的に処理してください。
【情シス視点のひとこと】
ExcelとGoogleの互換性問題は「完全には解決しない」が正直なところです。重要なのは「GoolgeとExcelを行き来するフロー自体を見直す」ことで、どちらかに統一するか、連携する場合はCSV経由にするなど、ツール間の変換ポイントを最小化することが現実的な対策です。
困った4共有したら見てほしくない人にも見られた
【困った状況】
社内の特定のチームだけで見るつもりだった売上データを「リンクを知っている全員」で共有したら、社長から「このデータ、社外の協力会社の方が見てるって聞いたんだけど」と言われました。真っ青になりました。
【なぜこれが起きるのか】
「リンクを知っている全員」の設定は、URLさえあれば誰でもアクセスできます。社内のメンバーが善意でそのURLをメールやチャットで転送した結果、想定外の人にアクセスされることがあります。また、リンクがChatのログ・メールの転送先・画面共有で映り込むなど、意図しない経路で流出することもあります。
【その場でできる応急処置】
- 即座に共有設定を「制限付き」(特定のユーザーのみ)に変更する。
- 変更後、URLにアクセスしようとすると権限エラーになることを確認する。
- 誰がアクセスしたか確認するには
ツール > 共有と権限の履歴、または管理者はGoogleドライブの監査ログを確認する。
【根本解決の手順】
業務ファイルの共有設定ルールを組織として明文化します。Google Workspace管理者は、管理者コンソールから「リンクを知っている全員での共有を組織外に禁止する」設定が可能です(
管理コンソール > アプリ > Google Workspace > ドライブとドキュメント > 共有設定
)。
【やってはいけないNG対処】
「もう見られてしまったから仕方ない」と放置するのは最悪の選択です。個人情報が含まれる場合は漏洩対応フロー(社内報告・必要に応じた当事者への連絡)が必要です。また「パスワード保護すればいい」という発想も誤りで、Googleスプレッドシートにはファイル単体でのパスワード設定機能はありません。
【情シス視点のひとこと】
これが一番多い相談です。「リンクを知っている全員」は便利な分、使う人が共有の仕組みを理解していないと必ず事故が起きます。組織全体で共有設定のトレーニングをするか、管理者コンソールで外部共有を物理的に制限するのが根本解決です。Workspaceの有料プランが必要ですが、組織の情報セキュリティには不可欠な設定です。
困った5誰かがデータを消してしまった
【困った状況】
ある朝出勤したら、昨日まであったはずの1,000行のデータが丸ごと消えていました。複数人で編集しているシートで、誰が何をしたのかわからない状態でした。
【なぜこれが起きるのか】
Googleスプレッドシートはリアルタイムで変更が保存されるため、誰かが大量の行を選択して削除したり、Ctrl+Aで全選択してDeleteキーを押したりすると、即座に反映されます。Excelと違って「保存しないで閉じる」が存在しないため、操作が即座に確定します。
【その場でできる応急処置】
- 操作を止めて、それ以上シートを触らないように関係者に伝える。
-
ファイル > 変更履歴 > 変更履歴を表示を開き、データがあった時点の版を特定する。
- その版を選択して右クリックから「この版を復元」でファイル全体を戻す(または版の内容をコピーする)。
【根本解決の手順】
重要なデータシートには「保護された範囲」を設定します。
データ > シートと範囲を保護
から、削除や編集を許可するユーザーを限定してください。また、GASの自動バックアップ(コード4参照)を設定して、万一の際に前日の状態に戻せる仕組みを作っておくことを強くお勧めします。
【やってはいけないNG対処】
「変更履歴で戻す前に新しいデータを入力してしまう」のはNGです。変更履歴を遡ったときに何が消えて何が新しく追加されたのか判別できなくなります。消えたことに気づいたら、まず触らないことが最優先です。
【情シス視点のひとこと】
正直、変更履歴は非常に強力ですが「完全ではない」です。変更履歴はデフォルトで30日間保存されます(Workspaceプランによって異なる場合がある)。30日以上前のデータを復元することはできません。だからこそ、日次自動バックアップのGASは「絶対に設定しておくべき」と断言できます。
困った6モバイルアプリで設定した書式・プルダウンが効かない
【困った状況】
PCで作ったスプレッドシートに、現場スタッフがスマートフォン(iOS)で入力してもらうことにしたんです。でも「入力規則(プルダウン)が表示されない」「条件付き書式の色がおかしい」という報告が続出して。
【なぜこれが起きるのか】
GoogleスプレッドシートのiOS・Androidアプリは、PC版ブラウザと比べて機能に制限があります。入力規則(データの検証)はモバイルでも動作しますが、UIの表示方法が異なります。また、一部の条件付き書式(カスタム数式を使った複雑なもの)はモバイルで正しく表示されないことがあります。さらに、GASはモバイルアプリからは実行できません。これは設計上の制限であり、いつ解消されるかは不明です。
【根本解決の手順】
モバイルでの入力を前提とした設計をする場合は、「シンプルな入力規則のみ使用」「条件付き書式はカスタム数式を避ける」「GASによる処理はPCからの操作またはトリガー実行に限定する」というルールで設計してください。
【情シス視点のひとこと】
現場スタッフがスマートフォンだけで操作することを前提にするなら、Googleフォームを使う方が圧倒的に楽です。フォームはモバイルでの入力に最適化されており、回答がスプレッドシートに自動蓄積されます。「スプレッドシートを直接スマートフォンで編集させる」設計は、できる限り避けることをお勧めします。
ぶっちゃけこうした方がいい!
15年以上Googleスプレッドシートの法人運用を担当して、ExcelからGoogleへの移行支援を何十社も経験して、正直に言います。
「GoogleスプレッドシートでExcelと同じことをやろうとするのは、やめた方がいいです。」
これは「GoogleはExcelより劣る」という話じゃないんです。そうじゃなくて、設計思想がまったく違うツールを、片方の文化で使おうとすることが間違いなんですよね。Excelは「ローカルで動く、個人が管理する、高機能な計算ツール」として設計されています。GoogleスプレッドシートはA「クラウドで動く、複数人でリアルタイムに共同編集する、データをどこからでも活用するプラットフォーム」として設計されています。この違いを理解せずに使うから、「VBAが動かない」「マクロが消えた」「ファイルが重い」というトラブルが起きるんです。
Excelで作りこんだVBAマクロをGASに移植しようとして半年かかった会社があります。でも本当は、その業務フローをGoogleフォーム+GASの自動化で設計し直したら、VBAなんて全く要らなかった、という結末が多いんですよ。Googleならではの「フォーム→スプレッドシート→GASで処理→Gmailで通知→Looker Studioでダッシュボード」という一気通貫のフローを使えば、同じことが10分の1の工数で実現できます。
今回の記事全体を俯瞰して、「結局何が一番大事か」を3つにまとめると、こうなります。
まず「共有設計」です。関数が動かない問題より、情報漏洩の方が会社として致命的です。共有設定の「リンクを知っている全員」は業務では原則使わない、重要ファイルは共有ドライブに置く、保護範囲を設定する——これを最初に整えるだけで、後のトラブルの大半は防げます。
次に「GASの実行制限の理解」です。GASは無料でも使える素晴らしい自動化ツールですが、1日の実行時間制限・クォータ・OAuth認証の仕組みを理解せずに業務の基幹処理を任せると、ある日突然止まります。GASで自動化した業務には必ずエラー通知を入れて、「静かに死ぬ」ことを防いでください。
そして「ExcelとGoogleの使い分け判断」です。複雑なマクロが必要な作業・Office形式での納品が必要な作業はExcelで、複数人でのリアルタイム編集・外部サービス連携・ウェブ上のデータ収集・ダッシュボード化はGoogleで——この判断軸を持つだけで、ツールの選択で迷う時間がなくなります。
関数が動かないという小さな問題も、共有設定のリスクも、GASが止まる問題も、突き詰めると「Googleスプレッドシートという道具の設計思想を理解して使っているかどうか」に行き着きます。道具の特性を知れば、問題のほとんどは事前に防げます。そして防げなかった問題も、今回の記事で紹介した対処法で確実に解決できるはずです。Googleスプレッドシートを「Excelの代替品」ではなく「全く異なる、クラウドネイティブな作業環境」として使いこなしてください。それが、業務効率を一段上げる一番の近道です。
Googleスプレッドシートの関数が動かない場合のよくある質問
関数を入力したら「=SUM(A1:A5)」という文字がそのまま表示されます。どうすればいいですか?
主に3つの原因が考えられます。まず「表示形式→数式」モードがオンになっていないか確認してください(メニューの「表示」→「表示」→「数式」でオン・オフを切り替えられます)。次に、セルの書式が「テキスト」になっていないか確認し、「標準」または「数値」に変更してください。書式を変更後、セルをダブルクリックしてEnterを押して再確定します。それでも直らない場合は、イコールが全角(=)になっていないか数式バーで確認してください。
SUM関数で合計したら正しい数字より小さい値が出ます。
計算対象のセルに文字列が混在している可能性が高いです。数字が左寄りに表示されているセルがないか確認してください。左寄りのセルは文字列として認識されており、SUM関数はその数値を無視して計算します。対象セルの書式を「数値」に変更した上で、セルをダブルクリック→Enterで再確定すると解決することが多いです。また、全角数字(1、2、3など)が入っていないかも確認しましょう。
VLOOKUPで「#N/A」が出るのですが、検索値は確かに存在します。
見た目は同じでも、検索値と検索範囲の値でデータ形式(数値と文字列)が一致していない可能性が非常に高いです。
=ISTEXT(A1)
や
=ISNUMBER(A1)
を使って確認してください。また、VLOOKUPの第4引数がFALSEになっているかも確認を。さらに、検索値や検索範囲の値に目に見えない空白が含まれている場合もあります。
=TRIM(A1)
で空白を除去してから再度試してみてください。
同僚と共有しているスプレッドシートで自分だけ関数が動きません。
まず共有権限を確認してください。「閲覧者」権限しかない場合、入力や変更はできません。「編集者」権限があるにもかかわらず動かない場合は、ブラウザや拡張機能の問題が疑われます。別のブラウザやシークレットモードで開いてみてください。それでも解決しない場合は、Googleアカウントの言語設定を一時的に英語に変更してスプレッドシートを開き、動作確認後に日本語に戻すという方法も報告されています。
今まで動いていた関数が突然動かなくなりました。自分は何も変えていません。
Google側のサービス障害の可能性があります。「Google Workspace ステータス ダッシュボード」でGoogleスプレッドシートの稼働状況を確認してください。また、誰かが自動計算の設定を「手動」に変更していないかも確認を。「ファイル」→「設定」→「計算」タブで「再計算」の項目を確認してください。F5キーでブラウザを更新して一時的に正常動作するなら、自動計算がオフになっている可能性が高いです。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良...もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ——関数が動かないときの黄金解決ステップ
Googleスプレッドシートの関数が動かないとき、焦る気持ちはよくわかります。でも原因はほぼ決まったパターンにあります。次の順番で確認すれば、ほとんどのケースは解決できます。
最初に確認するのは全角・半角の問題です。イコール、括弧、カンマ、数字——すべて半角になっているか数式バーをよく見てチェックします。次にセルの書式設定を確認します。「テキスト」になっていたら「標準」か「数値」に変更して、セルを再確定してください。それでも解決しない場合は自動計算の設定を確認します。「ファイル」→「設定」→「計算」で「変更時」になっているか見てみましょう。次のステップとしてブラウザのリロードやキャッシュのクリアを試し、最後に別ブラウザやシークレットモードで試してみてください。
2026年現在、GoogleはスプレッドシートにAI機能の統合を積極的に進めており、関数の自動提案や式の説明機能も強化されています。でも基本的なトラブルの原因は昔から変わりません。「全角・半角」「書式設定」「自動計算」の3つを制すれば、関数トラブルの大半は乗り越えられます。今日からぜひ、この3つを最初に確認する習慣をつけてみてください。スプレッドシートの関数を使いこなして、日々の業務をもっとラクに、もっとスマートに進めていきましょう!






コメント