「VLOOKUPやSUMIFくらいなら使えるけど、もっと便利な関数ってないのかな?」そんなふうに感じたことはありませんか。Googleスプレッドシートには、実は多くの人が存在すら知らない”隠れた名関数”がたくさん眠っています。
わたし自身、日常的にスプレッドシートを触っていて「この作業、手動でやるしかないのか……」と思っていた場面が、たったひとつの関数を知っただけで劇的に変わった経験が何度もあります。とくに2025年から2026年にかけてはGoogleがAI関数(=AI関数)や配列操作系の新関数を次々と追加しており、スプレッドシートの可能性は過去最大に広がっています。
この記事では、「スプレッドシートで使えるみんなが知らない関数が知りたい」と考えているあなたに向けて、初心者でもすぐに使えるものから上級者が唸るテクニックまで網羅しました。読み終わるころには、周囲から「え、そんな関数あったの?」と驚かれる存在になれるはずです。
- LAMBDA、LET、VSTACKなど知名度が低いのに破壊力抜群の関数を実例つきで完全解説
- 2026年最新の=AI関数やEPOCHTODATE関数など、Googleが追加した新機能の活用法
- 初心者が陥りがちなミスの回避策と、上級者向けの関数組み合わせテクニック
- なぜ今「知られざる関数」を覚えるべきなのか?
- 初心者がまず押さえたい”隠れた便利関数”5選
- 中級者を上級者に変える配列操作関数の世界
- 2026年最新!Googleスプレッドシートの革命的な新機能
- 上級者向け!関数の組み合わせで実現する驚きのテクニック
- 関数選びで大切にしたい「必要十分」の考え方
- 主要な”隠れ関数”の機能比較表
- 情シス10年超の現場視点で語る!スプレッドシート運用の”本当の落とし穴”
- 実務で即使える!便利なGASプログラムコード集
- 現場で本当によく遭遇する”あるある問題”の具体的な解決手順
- スプレッドシート運用を破綻させないための設計ルール
- ぶっちゃけこうした方がいい!
- スプレッドシートで使えるみんなが知らない関数に関するよくある質問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
なぜ今「知られざる関数」を覚えるべきなのか?
スプレッドシートを毎日使っている人でも、実際に活用している関数の種類はせいぜい10〜20程度という調査結果があります。しかしGoogleスプレッドシートには500以上の関数が用意されており、その大半は日の目を見ないまま埋もれています。
たとえば、複数シートのデータを1枚にまとめる作業。手動でコピー&ペーストしていませんか? VSTACK関数を使えばたった1行の数式で、しかもデータが追加されたら自動更新される形で統合できます。月次レポートの作成に毎回30分かけていた人が、この関数ひとつで作業時間を2分に短縮した例もあります。
さらに2025年後半から正式展開された=AI関数は、セルの中に直接AIへの指示を書き込めるという革命的な機能です。「このテキストの感情分析をして」「カテゴリ分類して」といった指示をセルに入力するだけで、Geminiが即座に結果を返してくれます。2025年9月には日本語を含む7言語への対応も発表され、日本のユーザーにとっても実用段階に入りました。
つまり、関数を知っているかどうかは単なる知識の差ではなく、仕事のスピードと質を根本から変える分水嶺なのです。
初心者がまず押さえたい”隠れた便利関数”5選
ここでは、SUMやVLOOKUPは知っているけれどそこから先がわからないという方に向けて、知名度は低いのに実用性が抜群に高い関数を5つ紹介します。どれも一度覚えれば「なぜ今まで使わなかったんだろう」と後悔するものばかりです。
UNIQUE関数で重複データを一瞬で排除する
UNIQUE関数は、指定した範囲から重複を取り除いて固有の値だけを返してくれる関数です。構文は非常にシンプルで、=UNIQUE(範囲)と書くだけ。たとえばキーワードリストが1,000行あって、そこから重複を目視で探して削除する作業を想像してみてください。UNIQUE関数なら文字どおり一瞬で完了します。
SEO業務でキーワードを追加するとき、既存リストとの重複チェックは避けて通れません。手動確認はミスの温床ですが、UNIQUE関数は機械的に正確な結果を返すので安心です。さらに=UNIQUE(VSTACK(A:A, Sheet2!A:A))のように別シートのデータと組み合わせれば、複数ソースからの統合と重複排除を同時にこなせます。
XLOOKUP関数はVLOOKUPの完全上位互換
VLOOKUPを使い慣れている方は多いと思いますが、2022年にGoogleスプレッドシートに追加されたXLOOKUP関数はその上位互換ともいえる存在です。VLOOKUPでは検索列がデータ範囲の左端にないと使えないという制約がありましたが、XLOOKUPにはその制限がありません。
構文は=XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからない場合の値)です。第4引数に「見つかりませんでした」のようなテキストを入れておけば、#N/Aエラーの代わりにわかりやすいメッセージを表示できます。IFERRORで囲む必要がなくなるので、数式がスッキリ読みやすくなるのも大きなメリットです。
LEN関数とSUBSTITUTE関数の合わせ技で特定文字を数える
LEN関数は文字数を数えるだけの地味な関数に思えますが、SUBSTITUTE関数と組み合わせると強力な武器になります。たとえば、セルA1に入った文章の中で「、」(読点)が何個あるかを数えたい場合、こう書きます。
=LEN(A1)-LEN(SUBSTITUTE(A1,”、”,””))
元の文字数から、読点を全部消した文字数を引くことで読点の個数が求まるわけです。このテクニックは、CSVデータの列数チェック(カンマの数を数える)やURLのスラッシュ数を確認する場面などで地味に活躍します。専用の関数が存在しない処理を、既存の関数の組み合わせで実現する発想力が問われる好例です。
IMPORTRANGE関数で別ファイルのデータをリアルタイム取得する
IMPORTRANGE関数は、別のスプレッドシートファイルからデータを直接読み込む関数です。構文は=IMPORTRANGE(“スプレッドシートのURL”,”シート名!範囲”)。一度アクセスを許可すれば、元ファイルのデータが更新されるたびに自動で反映されます。
部署ごとに別ファイルで管理しているデータを、ひとつの集計シートにまとめるときに威力を発揮します。コピー&ペーストだと更新漏れが発生しがちですが、IMPORTRANGEなら常に最新データが反映されるため、ヒューマンエラーとは無縁です。ただし、接続先のファイルが削除されると参照が切れるので、ファイル管理のルールを事前に決めておくことが大切です。
ARRAYFORMULA関数で数千行の数式入力を1セルにまとめる
通常、数式は1行ごとにコピーして貼り付けますが、ARRAYFORMULA関数を使えば1つのセルに数式を入力するだけで、列全体に結果を反映できます。たとえば、B列とC列の値を掛け算してD列に出力したい場合、D1セルに=ARRAYFORMULA(B1:B*C1:C)と入力するだけで、データがある行すべてに結果が表示されます。
データが100行だろうと10,000行だろうと、入力するのはたった1つのセル。行を追加しても自動的に計算が適用されるので、管理の手間が激減します。COUNTIFやIF関数と組み合わせれば、条件付きの計算も一括処理できるので、大規模なコンテンツ管理シートやキーワードマスタとの相性は抜群です。
中級者を上級者に変える配列操作関数の世界
2022〜2023年にかけてGoogleが一気に追加した配列操作系の関数群は、スプレッドシートの表現力を一段も二段も引き上げてくれる存在です。しかし日本語の解説記事がまだ少ないこともあり、知らない人が驚くほど多いのが現状です。
VSTACK関数とHSTACK関数でデータを自在に結合する
VSTACK関数は複数の範囲を縦方向に積み重ね、HSTACK関数は横方向に連結します。従来は中括弧{}を使った配列リテラルで似たことができましたが、範囲のサイズが異なるとエラーになるという厄介な制約がありました。VSTACKとHSTACKにはその制約がなく、サイズ違いの範囲同士でも柔軟に結合でき、可読性も格段に向上します。
実務では「月別シートに分散しているデータを年間集計シートに統合する」という場面で大活躍します。=VSTACK(1月!A2:D, 2月!A2:D, 3月!A2:D)と書くだけで、3シート分のデータが1枚にまとまり、ソースを更新すれば自動的に反映されます。さらにFILTER関数やUNIQUE関数と組み合わせれば、統合と同時に空白行の除去や重複排除もワンステップで完了します。
TOROW関数とTOCOL関数で配列の向きを自由に変換する
TOROW関数は二次元の範囲を1行に、TOCOL関数は1列に変換します。たとえば3×3のデータ範囲を1列に並べ替えたいとき、以前はTRANSPOSE関数やFLATTEN関数を駆使する必要がありましたが、TOCOL関数ならシンプルに=TOCOL(A1:C3)と書くだけです。
オプション引数を指定すると、空白セルやエラー値を無視する設定も可能です。データクレンジングの前処理として、まずTOCOLで1列に展開してからUNIQUEやSORTを適用するという流れは、覚えておくと作業効率が大幅に上がります。
CHOOSEROWS関数とCHOOSECOLS関数で必要なデータだけ抜き出す
大きなデータセットから特定の行や列だけを取り出したいとき、CHOOSEROWS関数とCHOOSECOLS関数は行番号・列番号を直接指定して抽出できます。FILTER関数のように条件式を書く必要がなく、「1行目、3行目、5行目が欲しい」という場面で=CHOOSEROWS(A1:D10, 1, 3, 5)と書くだけで目的のデータが得られます。
QUERY関数やFILTER関数ほど柔軟ではありませんが、そのぶん数式の意図が一目で伝わるのが大きな利点です。チームで共有するシートでは「あとから見て何をしているかわかる」ことが非常に重要であり、CHOOSEROWSの明快さはその点で優れています。
2026年最新!Googleスプレッドシートの革命的な新機能
ここからは、2025年後半から2026年2月現在にかけて追加・強化された最新機能を取り上げます。世界中のGoogle Workspace関連ニュースを調査した結果、とくに注目すべきものを厳選しました。
=AI関数(=Gemini関数)でセル内にAIを呼び出す
2025年にGoogleが導入した=AI関数は、スプレッドシートの歴史を塗り替えるほどのインパクトを持つ機能です。セルに=AI(“このテキストの感情分析をしてください”, A2)と入力すると、GeminiのAIがセル内に直接回答を返してくれます。=Gemini()という別名でも呼び出し可能です。
できることは多岐にわたります。テキスト生成、要約、カテゴリ分類、感情分析、そして2025年10月からはGoogle検索との連携によりリアルタイム情報の取得まで対応しました。たとえば商品レビュー200件の感情分析を手作業で行えば丸一日かかりますが、=AI関数ならドラッグで全行に適用するだけ。数分で完了します。
2025年9月には日本語、韓国語、フランス語など7言語への対応も発表されています。利用にはGoogle WorkspaceのGemini Business以上のプラン、またはGoogle One AI Premiumのサブスクリプションが必要ですが、業務効率化の恩恵を考えれば十分に投資対価のある機能といえるでしょう。2026年2月時点ではEducation Plus向けにもGemini in Sheetsの展開が進められており、教育機関での利用も加速しています。
LET関数で複雑な数式を読みやすく最適化する
LET関数は、数式の中で変数(名前)を定義できる関数です。プログラミング言語でいう「変数宣言」に相当し、2023年初頭にGoogleスプレッドシートに追加されました(たぶん…)。構文は=LET(名前1, 値1, 名前2, 値2, …, 計算式)です。
たとえば同じ計算結果を数式内で3回参照するとき、LET関数を使わなければ同じ式を3回書く必要があります。LET関数で一度変数に代入しておけば、可読性が劇的に向上するうえ、計算も1回で済むのでパフォーマンスも改善します。
実例として、税込価格を計算してさらに割引率を適用するケースを考えてみましょう。=LET(税込, A1*1.1, 割引後, 税込*0.8, 割引後)と書けば、途中の計算過程が明確になり、あとから見ても何をしているかすぐにわかります。LAMBDA関数やREDUCE関数との組み合わせで本領を発揮するので、上級者を目指すなら必ずマスターしておきたい関数です。
LAMBDA関数で自分だけのオリジナル関数を作る
LAMBDA関数は、プレースホルダー(仮の入力値)を使って独自の計算ロジックを定義できる関数です。さらにGoogleスプレッドシートの名前付き関数(Named Functions)機能と組み合わせると、自作した関数に名前を付けて保存し、ほかのスプレッドシートにインポートして再利用することまで可能になります。
たとえば消費税の計算を=TAX(金額)という独自関数にしてしまえば、チーム全員が同じ計算ロジックを使えるようになり、属人化の防止にもつながります。LAMBDAの補助関数としてMAP、REDUCE、SCAN、BYROW、BYCOL、MAKEARRAYの6つも用意されており、これらを駆使すればExcelのマクロに匹敵する高度な処理をシート関数だけで実現できます。
EPOCHTODATE関数とMARGINOFERROR関数
EPOCHTODATE関数はUnixタイムスタンプ(エポック秒)を人間が読める日時形式に変換する関数です。APIからデータを取得するとタイムスタンプがエポック秒で返されることが多く、これまでは手動で計算式を組む必要がありました。EPOCHTODATE関数が登場したことで、=EPOCHTODATE(A1)と書くだけで変換が完了します。秒・ミリ秒・マイクロ秒の3種類に対応しているのも実用的です。
MARGINOFERROR関数は統計分析向けの関数で、値の範囲と信頼水準を指定すると誤差の範囲を計算してくれます。アンケート調査の結果を分析する際など、専門的な計算を手軽にスプレッドシート上で行いたいときに重宝します。
上級者向け!関数の組み合わせで実現する驚きのテクニック
個々の関数を覚えたら、次はそれらを組み合わせて「こんなことまでできるのか」という体験をしてみましょう。ここでは、実務で即使えるハイレベルなテクニックを紹介します。
REDUCE関数とVSTACK関数で動的な累積処理を行う
REDUCE関数はLAMBDA補助関数のひとつで、配列の各要素に対してLAMBDA関数を順番に適用し、結果を1つの値に集約します。これをVSTACKと組み合わせると、繰り返し処理の途中結果を積み重ねて表示するという高度な処理が可能になります。
たとえば、リスト内のユニーク値ごとにデータをフィルタリングし、その結果を縦に積み上げて表示する数式はこうなります。まずUNIQUE関数で固有値を抽出し、REDUCE関数で各固有値に対してFILTERを適用、その結果をVSTACKで累積していく。従来ならGAS(Google Apps Script)で書くしかなかった処理が、シート関数だけで完結するのは感動的ですらあります。
QUERY関数をSQLライクな万能ツールとして活用する
QUERY関数は、Googleスプレッドシート独自の関数で、SQLに似た構文でデータを検索・集計・並べ替えできます。=QUERY(データ範囲, “SELECT A, SUM(C) WHERE B=’東京’ GROUP BY A ORDER BY SUM(C) DESC”)のように書けば、ピボットテーブルを使わずに高度な集計が一発で完了します。
SELECT、WHERE、GROUP BY、PIVOT、ORDER BY、LIMIT、OFFSET、LABEL、FORMATという9つの句を組み合わせることで、ほぼあらゆるデータ操作に対応できます。面白い応用例として、QUERY関数のSELECT句を計算機代わりに使うという裏技も存在します。=QUERY(,”SELECT “&A1)とすれば、A1セルに入力された算術式(たとえば”3+5*2″)の計算結果が返ってくるのです。本来の用途からは外れた使い方ですが、関数の仕組みを深く理解しているからこそ思いつく発想で、まさに上級者の遊び場です。
IMPORTXML関数でウェブ上のデータをスクレイピングする
IMPORTXML関数はGoogleスプレッドシートにしかないオリジナル関数で、指定したURLからXPathを使ってデータを取得します。競合サイトのタイトルタグを一括取得したり、価格情報をモニタリングしたりと、SEO業務やマーケティングリサーチで重宝します。
構文は=IMPORTXML(URL, XPathクエリ)。たとえばあるサイトのh1タグを取得したければ、=IMPORTXML(“https://example.com”, “//h1”)と書くだけです。Excelにはないスプレッドシート限定の機能なので、これを知っているだけでスプレッドシートを選ぶ理由になります。ただし一度に大量のリクエストを送るとエラーになりやすいので、IMPORTXML用のシートを分けて時間差で実行するなどの工夫が必要です。
関数選びで大切にしたい「必要十分」の考え方
高度な関数を知ると、つい何にでも最新の関数を使いたくなるものです。しかし実務では「何が必要か」だけでなく「何で十分か」を意識することが重要です。
たとえば、シートの行番号を連番で振るだけの処理にMAKEARRAY関数やLAMBDA関数を持ち出す必要はありません。単純な連番ならROW関数や手入力で十分であり、むしろ過剰に複雑な関数を使うと、あとからシートを見た人が「何をしているのかわからない」と混乱する原因になります。
関数を選ぶ基準は、処理の正確性、数式の可読性、そしてメンテナンス性の3つです。チームで共有するシートであれば可読性の優先度は高くなりますし、個人用の分析シートであれば多少複雑でもパフォーマンスを優先する判断もアリです。関数の引き出しが多いほど、場面に応じた最適な選択ができるようになります。だからこそ、まずは「知っている関数」を増やすことに価値があるのです。
主要な”隠れ関数”の機能比較表
ここまで紹介した関数の特徴を、ひと目で比較できるよう表にまとめました。自分の業務に当てはまるものから優先的に覚えていくのがおすすめです。
| 関数名 | 主な用途 | 難易度 | Excel互換 |
|---|---|---|---|
| UNIQUE | 重複排除 | ★☆☆ | あり |
| XLOOKUP | 柔軟な検索 | ★☆☆ | あり |
| ARRAYFORMULA | 配列一括計算 | ★★☆ | なし(スプシ独自) |
| IMPORTRANGE | 別ファイル参照 | ★★☆ | なし(スプシ独自) |
| VSTACK / HSTACK | 範囲の縦横結合 | ★★☆ | あり |
| TOROW / TOCOL | 配列の向き変換 | ★★☆ | あり |
| CHOOSEROWS / CHOOSECOLS | 行列の選択抽出 | ★★☆ | あり |
| LET | 数式内での変数定義 | ★★★ | あり |
| LAMBDA | カスタム関数作成 | ★★★ | あり |
| REDUCE | 配列の累積処理 | ★★★ | あり |
| QUERY | SQLライクなデータ操作 | ★★★ | なし(スプシ独自) |
| IMPORTXML | ウェブスクレイピング | ★★☆ | なし(スプシ独自) |
| =AI / =Gemini | AI活用(テキスト生成・分類) | ★☆☆ | なし(スプシ独自) |
| EPOCHTODATE | Unixタイムスタンプ変換 | ★☆☆ | なし(スプシ独自) |
| WRAPROWS / WRAPCOLS | 1次元配列の折り返し | ★★☆ | あり |
情シス10年超の現場視点で語る!スプレッドシート運用の”本当の落とし穴”

Googleスプレッドシートのイメージ
ここからは、企業の情報システム部門で10年以上にわたってスプレッドシート絡みの問い合わせに対応してきた視点から、他のサイトではなかなか書かれない”現場のリアル”をお伝えします。関数の知識だけでは解決できない、運用面でのハマりどころと、その具体的な脱出法です。
「スプレッドシートが重くて動かない!」の原因は9割が使い方にある
情シスに寄せられるスプレッドシート関連の相談で、ダントツに多いのが「重くて動かない」という悲鳴です。数千行程度のデータで重くなるケースを調べると、原因はほぼ毎回同じパターンに行き着きます。
まず真っ先に疑うべきは不要な行と列の存在です。データは100行しかないのに、シートの行数がデフォルトの1,000行のまま、あるいは何かの拍子に50,000行まで拡張されていることがあります。空の行でもスプレッドシートは内部的にそこまでの範囲を保持しているので、地味にパフォーマンスを圧迫します。対処法はシンプルで、データの最終行の下を全選択して右クリックから「行を削除」するだけです。列方向も同様にやっておきましょう。これだけで体感速度が目に見えて変わるケースは珍しくありません。
次に多い原因が条件付き書式の蓄積です。誰かがコピー&ペーストを繰り返すうちに、同一の条件付き書式が何十個も重複して設定されていることがあります。確認するには、シート全体を選択してからメニューの「表示形式」→「条件付き書式」を開いてください。一覧に同じルールが大量に並んでいたら、不要なものをゴミ箱アイコンで削除しましょう。条件付き書式は1つ追加するたびにシート全体の再描画コストが増えるので、この整理だけで劇的に改善することがあります。
3つ目の原因は、ARRAYFORMULAやIMPORTRANGEの乱用です。ARRAYFORMULA関数は1セルで列全体に結果を反映できる便利な関数ですが、対象範囲が数千行を超えると急激に重くなります。さらにIMPORTRANGE関数は外部ファイルへのネットワーク通信が発生するため、複数シートに何十個も配置すると読み込みのたびにフリーズに近い状態になります。IMPORTRANGEは「中継シート」を1枚作って、そこにだけ配置するのが鉄則です。他のシートからはその中継シートを参照する構成にすれば、通信回数を最小限に抑えられます。
共有スプレッドシートで起きる”謎の壊れ方”と防ぎ方
チームで同時編集しているスプレッドシートで、「昨日まで動いていた関数が突然エラーになった」「データが消えた」というトラブルは本当によく起きます。これは誰かが悪意なく行った操作が原因であることがほとんどです。
典型的なのが、列の挿入や削除による参照ズレです。QUERY関数でSELECT句にCol1やCol2と列番号を直接指定している場合、途中に列を挿入されると参照先がずれてしまいます。これを防ぐには、QUERY関数ではなく通常の関数を使うか、QUERY関数のデータ範囲をあらかじめヘッダー付きの固定範囲にして、SELECT句ではヘッダー名で指定できる形にしておくことをおすすめします。
もうひとつ頻出するのが、フィルター表示を使わずに標準のフィルター機能を使ってしまう問題です。標準のフィルターは全員の画面に反映されるので、Aさんがフィルターをかけた結果、Bさんが「データが消えた」と騒ぐ事態が起きます。Googleスプレッドシートの「フィルター表示」機能を使えば、自分だけの絞り込みビューを作れるので、共有シートでは必ずこちらを使うようルール化してください。メニューの「データ」→「フィルター表示」→「新しいフィルター表示を作成」で設定できます。
そしてこれが一番重要なのですが、重要なシートには必ず「保護」を設定してください。マスタデータが入ったシートや関数が組まれたシートは、右クリックから「シートを保護」を選び、編集権限を特定のメンバーだけに限定しておくのが安全です。「うちのチームは大丈夫」と思っている方ほど事故が起きるのが現実です。
実務で即使える!便利なGASプログラムコード集
ここからは、関数だけでは対応できない処理を自動化するためのGoogle Apps Script(GAS)のコードを紹介します。どれも情シスの現場で「これ作ってくれない?」と頼まれることが多い、実需の高いスクリプトです。コピー&ペーストして、スプレッドシートの「拡張機能」→「Apps Script」に貼り付けるだけで使えます。
特定のセルが編集されたら自動でタイムスタンプを記録するGAS
「この行、いつ更新したっけ?」という問題は、どんなプロジェクトでも発生します。以下のスクリプトを設定すると、B列(2列目)が編集されるたびに、同じ行のA列に日時が自動で入ります。
function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
if (sheet.getName() === “データ” && range.getColumn() === 2) {
var timestampCell = sheet.getRange(range.getRow(), 1);
timestampCell.setValue(new Date());
timestampCell.setNumberFormat(“yyyy/MM/dd HH:mm:ss”);
}
}
ポイントはsheet.getName() === “データ”の部分です。ここにシート名を指定しておかないと、すべてのシートで発火してしまうので注意してください。また、onEdit関数はシンプルトリガーなので、特別な権限設定やトリガー登録なしで動作します。ただし、シンプルトリガーには実行時間30秒以内という制約があることを覚えておきましょう。
スプレッドシートの内容をメールで自動送信するGAS
日報や週次レポートをスプレッドシートで管理していて、「毎回メールにコピペして送るのが面倒」という声をよく聞きます。以下のスクリプトは、指定したシートの内容をHTML形式のメールとして送信します。
function sendReportEmail() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“週次レポート”);
var data = sheet.getRange(“A1:D10”).getValues();
var htmlBody = “<table border=’1′ cellpadding=’5′>”;
data.forEach(function(row) {
htmlBody += “<tr>”;
row.forEach(function(cell) {
htmlBody += “<td>” + cell + “</td>”;
});
htmlBody += “</tr>”;
});
htmlBody += “</table>”;
GmailApp.sendEmail(
“recipient@example.com”,
“【自動送信】週次レポート”,
“”,
{htmlBody: htmlBody}
);
}
このスクリプトを時間主導型トリガーで毎週月曜の朝9時に設定すれば、何もしなくても定時にレポートメールが飛びます。トリガーの設定は、Apps Scriptエディタの左メニューにある時計アイコンから行えます。ちなみにGmailの送信上限は無料アカウントで1日100通、Google Workspaceアカウントで1日1,500通なので、大量送信する場合は上限を意識してください。
不要な空白行を一括削除するGAS
データの途中に空白行が散在していて手動で消すのが大変、というのもよくある困りごとです。以下のスクリプトは、A列が空欄の行を下から順に削除します。下から削除するのは、上から消すと行番号がずれて正しく処理できなくなるためです。この「下から消す」という発想は地味ですが非常に重要で、現場を知らないとなかなか出てこないテクニックです。
function deleteEmptyRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getRange(“A1:A” + sheet.getLastRow()).getValues();
for (var i = data.length – 1; i >= 0; i–) {
if (data === “” || data === null) {
sheet.deleteRow(i + 1);
}
}
}
注意点として、このスクリプトは行を1つずつ削除するため、行数が1,000を超えると非常に遅くなります。大量の空白行がある場合は、先にデータを配列で読み込み、空白行を除外した配列を作り直してから一括で書き戻す方法のほうが圧倒的に速いです。次のコードがその改良版です。
function deleteEmptyRowsFast() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var filtered = data.filter(function(row) {
return row !== “” && row !== null;
});
sheet.clearContents();
if (filtered.length > 0) {
sheet.getRange(1, 1, filtered.length, filtered.length).setValues(filtered);
}
}
配列操作を使った改良版は、200行のデータで15〜17秒かかっていた処理が1〜2秒で完了するレベルの高速化が見込めます。GASのパフォーマンスチューニングの基本は「セルの読み書き回数を最小限にする」ことに尽きます。getValueやsetValueをループの中で何百回も呼ぶのではなく、getValuesで一括取得→配列で加工→setValuesで一括書き込みの3ステップにするだけで、処理速度が10倍以上変わることも珍しくありません。
スプレッドシートのバックアップを自動で取るGAS
「誰かがデータを消してしまった。戻せない。」これは情シスが最も恐れる事態のひとつです。Googleスプレッドシートには変更履歴機能がありますが、大幅な変更や削除の場合、完全に元通りにするのは難しいことがあります。以下のスクリプトは、スプレッドシート自体を指定のGoogleドライブフォルダにコピーして保存します。
function backupSpreadsheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var backupFolder = DriveApp.getFolderById(“ここにフォルダIDを入力”);
var today = Utilities.formatDate(new Date(), “Asia/Tokyo”, “yyyyMMdd_HHmmss”);
var fileName = ss.getName() + “_backup_” + today;
DriveApp.getFileById(ss.getId()).makeCopy(fileName, backupFolder);
}
フォルダIDはGoogleドライブでフォルダを開いたときのURLの末尾部分です。このスクリプトを毎日深夜に実行するようトリガー設定しておけば、万が一のときも前日の状態に復元できます。バックアップ先のフォルダには適切な共有設定をお忘れなく。また、バックアップファイルが際限なく増えるのを防ぐために、30日以上前のバックアップを自動削除するスクリプトも組み合わせるとさらに実用的です。
シート内の全関数を値に一括変換するGAS
「関数が入ったままのシートを外部に渡したくない」「参照先が変わってエラーが出るのを防ぎたい」というニーズもよくあります。以下のスクリプトは、アクティブなシートの全セルを、数式の結果の値だけに変換します。いわゆる「値貼り付け」を全セル一括で実行するイメージです。
function convertFormulasToValues() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
range.setValues(values);
}
たった5行ですが、これが地味に重宝します。外部にスプレッドシートを共有する前にこのスクリプトを実行すれば、社内のマスタデータへのIMPORTRANGE参照やQUERY関数が丸見えになるリスクを防げます。実行前に必ずコピーを取ってから実行することだけは忘れないでください。元に戻せなくなります。
現場で本当によく遭遇する”あるある問題”の具体的な解決手順
ここでは、ネットで検索しても「これ!」という解決策がなかなか見つからない、でも実際の仕事場では本当によく遭遇する問題を取り上げます。
IMPORTRANGEの「アクセスを許可してください」が延々と消えない問題
IMPORTRANGE関数を使って別のスプレッドシートを参照しようとすると、「#REF! アクセスを許可してください」というエラーが出ます。通常はセルをクリックして「アクセスを許可」ボタンを押せば解決しますが、まれにこのボタンが何度押しても消えないことがあります。
この場合の対処法は次のとおりです。まず、参照先のスプレッドシートに自分のGoogleアカウントで直接アクセスし、閲覧権限があることを確認してください。権限がなければ当然許可できません。権限があるのに解決しない場合は、いったんIMPORTRANGE関数を削除して保存し、ブラウザのキャッシュとCookieをクリアしてから再度関数を入力してみてください。それでもダメな場合は、シークレットウィンドウで開くと高確率で解決します。Googleのセッション情報が悪さをしているケースがあるためです。
日付が勝手にシリアル値に変換される問題
スプレッドシートに「3/10」と入力したかっただけなのに「2026/3/10」と日付に変換されてしまう。これは本当にストレスが溜まるあるあるです。対処法は入力前にセルの表示形式を「書式なしテキスト」に変更しておくことです。メニューの「表示形式」→「数値」→「書式なしテキスト」で設定できます。
ただし、すでに日付に変換されてしまったセルを「書式なしテキスト」に変更しても、内部的にはシリアル値(日付を表す数値)のままであることがほとんどです。この場合はセルの値を一度削除して入力し直す必要があります。大量のデータをCSVから貼り付ける前に、あらかじめ貼り付け先の列を「書式なしテキスト」にしておくのが確実です。
もうひとつの裏技として、値の先頭にシングルクォーテーション( ‘ )を付ける方法があります。「’3/10」と入力すると、スプレッドシートはこれをテキストとして扱います。シングルクォーテーション自体はセルには表示されません。
VLOOKUP関数で「確実に一致するはずの値」がヒットしない問題
VLOOKUPやXLOOKUPで検索値と完全に同じ値が検索範囲に存在するのに#N/Aエラーが返ってくる。これは見えない空白文字(スペース)が原因であることが非常に多いです。とくに他のシステムからエクスポートしたデータや、Webページからコピー&ペーストしたデータには、末尾や先頭に半角スペースや全角スペースが混入していることがあります。
対処法は、検索値と検索範囲の両方をTRIM関数で囲むことです。TRIM関数は文字列の前後の空白を除去してくれます。たとえばXLOOKUPなら、=XLOOKUP(TRIM(A1), TRIM(B:B), C:C)のように書きます。それでもダメな場合は、CLEAN関数も併用してください。CLEAN関数は印刷できない制御文字(改行コードなど)を除去します。=XLOOKUP(TRIM(CLEAN(A1)), TRIM(CLEAN(B:B)), C:C)とすれば、ほぼすべての「見えないゴミ文字」問題に対応できます。
スプレッドシートの同時編集中に「衝突」して入力が消える問題
Googleスプレッドシートはリアルタイム共同編集が売りですが、複数人が同じセルや近接するセルを同時に編集すると、片方の入力が上書きされてしまうことがあります。完全に防ぐ方法はありませんが、運用ルールで緩和することは可能です。
具体的には、入力エリアを担当者ごとに分離する設計にします。たとえばAさんは「入力_A」シート、Bさんは「入力_B」シートというように専用の入力シートを持ち、集計シートがそれぞれの入力シートからVSTACKやIMPORTRANGEで自動的に統合する構成です。こうすれば同一セルへの同時編集が物理的に発生しません。少し手間に感じるかもしれませんが、データの信頼性を保つには最も確実な方法です。
GASの実行時間が6分を超えてタイムアウトする問題
Google Apps Scriptには1回の実行で最大6分という時間制限があります。大量のデータを処理するスクリプトでこの制限に引っかかると、途中で強制終了されてしまいます。
対処法はいくつかあります。まず前述のとおり、セルの読み書きを配列にまとめるのが最も効果的です。それでも6分を超える場合は、処理を分割して実行する方法を使います。具体的には、スクリプト内で処理済みの行数をPropertiesServiceに保存しておき、次の実行時にその行から再開するという仕組みです。以下にそのパターンのコード例を示します。
function processLargeData() {
var props = PropertiesService.getScriptProperties();
var startRow = parseInt(props.getProperty(“lastProcessedRow”)) || 1;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var maxExecutionTime = 5 * 60 * 1000;
var startTime = new Date().getTime();
for (var i = startRow; i < data.length; i++) {
// ここに各行の処理を書く
// 例: sheet.getRange(i + 1, 5).setValue(“処理済み”);
if (new Date().getTime() – startTime > maxExecutionTime) {
props.setProperty(“lastProcessedRow”, i.toString());
ScriptApp.newTrigger(“processLargeData”)
.timeBased()
.after(1000)
.create();
return;
}
}
props.deleteProperty(“lastProcessedRow”);
}
このスクリプトは5分経過した時点で自分自身のトリガーを作成して一旦終了し、1秒後に続きから再実行します。万単位のデータを処理するときでもタイムアウトせずに完走できる、情シスの現場では非常に重宝するテクニックです。
スプレッドシート運用を破綻させないための設計ルール
関数やGASの知識があっても、スプレッドシートの設計が悪いとすべてが台無しになります。ここでは、長年の現場経験から得た「破綻しないスプレッドシート設計」の5つの鉄則を紹介します。
データシートと表示シートは必ず分離する
最もよくある設計ミスは、生データの入力と見栄えの良い表示を同じシートで行うことです。データが増えたり関数を追加したりするたびに表示が崩れ、修正に時間を取られます。正しいアプローチは、「データ」シートにはデータだけを入力し、「ダッシュボード」シートで関数を使って見栄え良く表示するという分離設計です。データシートには装飾は一切不要で、1行目にヘッダー、2行目以降にデータという単純な構成にします。こうすることで関数の参照もシンプルになり、あとからQUERY関数やFILTER関数を追加するのも容易です。
1セル1データの原則を守る
「東京都新宿区」と「160-0022」を1つのセルにまとめて入力していませんか。住所と郵便番号、姓と名など、性質の異なる情報は必ず別のセルに分けてください。あとからデータを分析・検索する際に、結合されたデータでは関数が正しく機能しません。すでに結合されてしまっているデータは、先述のSEARCH関数やMID関数、あるいはSPLIT関数を使って分割できますが、最初から分けて入力するルールにしておくほうがはるかに楽です。
列の追加は右端に、行の追加は最下部に
既存の列の間に新しい列を挿入すると、QUERY関数のCol番号がずれたり、ARRAYFORMULAの範囲指定がおかしくなったりするリスクがあります。新しいデータ項目を追加するときは必ず既存の列の右端に追加し、行も最下部に追加するルールを徹底してください。これだけで関数の参照が壊れるリスクが大幅に減ります。
スプレッドシートのセル数上限を意識する
Googleスプレッドシートには1ファイルあたりの最大セル数が1,000万セルという上限があります。列が26個(A〜Z列)なら約38万行まで入りますが、列数が多いと上限に達するのは意外と早いです。1万行×100列で100万セル、これにシートが10枚あればそれだけで1,000万セルです。上限を超えるとデータの追加ができなくなるので、大規模なデータを扱う場合は早めに別ファイルに分割するか、GoogleのConnected Sheetsを使ってBigQueryにデータを移すことを検討してください。
命名規則を統一する
シート名やヘッダー名にルールがないと、あとから探すのに苦労します。シート名は「入力_売上」「集計_月次」「マスタ_商品」のように種別_内容の形式で統一するのがおすすめです。ヘッダー名も半角英数字やスネークケース(product_name、order_dateなど)で統一しておくと、GASから参照するときにも便利です。
ぶっちゃけこうした方がいい!
ここまで関数、GAS、運用設計といろいろ書いてきましたが、個人的に一番伝えたいことをぶっちゃけて言います。
スプレッドシートは「関数を覚えること」よりも「設計を先に考えること」のほうが100倍大事です。
これ、本当に。10年以上の情シス経験で断言できます。どれだけ高度なLAMBDA関数やREDUCE関数を駆使しても、そもそもの設計がぐちゃぐちゃだったら、あとから何をやっても修正コストが膨らむ一方です。逆に、シンプルでも設計がしっかりしているスプレッドシートは、VLOOKUPとSUMIFだけでも十分に回ります。
だからぶっちゃけ、一番効率的なのは「いきなりセルに入力し始めない」ことなんです。最初の10分で「このスプレッドシートは誰が何のために使うのか」「データはどこから来てどこへ出すのか」「将来どのくらいデータが増えるのか」を紙やメモに書き出す。それだけで、あとの何十時間分もの手戻りが防げます。
もうひとつぶっちゃけると、関数で頑張りすぎるよりGASで自動化したほうが楽なケースは想像以上に多いです。たとえば複雑なネスト関数を5段重ねにして保守不能な数式を作るくらいなら、GASで10行のスクリプトを書いて毎晩自動実行させるほうが、結果的にメンテナンスしやすいし、トラブルが起きたときの原因特定も圧倒的に速い。関数は「リアルタイムに値が反映される必要がある処理」に使い、GASは「定期的にまとめて実行すればよい処理」に使う。この使い分けができるようになると、スプレッドシートとの付き合い方が根本的に変わります。
そして最後に、「このスプレッドシート、自分がいなくなっても他の人が運用できるか?」という視点を常に持ってください。複雑な関数を組めることは素晴らしいスキルですが、属人化したスプレッドシートは組織にとってリスクでしかありません。関数には必ずコメント(セルのメモ機能)を残す、GASにはコード内にコメントを書く、操作手順書を別シートに1枚用意する。この「あと1分の親切」が、将来の自分やチームメンバーを確実に救います。
関数を学ぶのは手段であって目的ではありません。本当のゴールは「その関数を使って、自分やチームの仕事をもっと楽にすること」です。この記事で紹介した関数やGAS、設計ルールを、まずはどれかひとつでいいので明日の仕事で試してみてください。きっと「あ、これ楽だわ」という瞬間が訪れます。その小さな成功体験の積み重ねが、あなたをスプレッドシートの達人へと変えていきます。
スプレッドシートで使えるみんなが知らない関数に関するよくある質問
Googleスプレッドシートの関数はExcelでもそのまま使えますか?
多くの関数はExcelと共通ですが、ARRAYFORMULA、IMPORTRANGE、IMPORTXML、QUERY、=AIなどはGoogleスプレッドシート独自の関数であり、Excelでは動作しません。一方、VSTACK、HSTACK、LET、LAMBDA、XLOOKUPなどは2022〜2023年にかけてGoogleとMicrosoftの双方で追加された関数なので、最新版のExcel(Microsoft365)であれば同様に使用可能です。ファイルをExcel形式でエクスポートする予定がある場合は、スプシ独自関数を避けるか、変換後に手動で修正する前提で設計しておくとよいでしょう。
=AI関数は無料のGoogleアカウントでも使えますか?
=AI関数(=Gemini関数)を利用するには、Google WorkspaceのGemini Business、Gemini Enterprise、またはGoogle One AI Premiumのいずれかのサブスクリプションが必要です。無料のGoogleアカウントでは2026年2月現在、利用することができません。ただしGemini以外の全関数(LAMBDA、VSTACK、QUERYなど)は無料アカウントで制限なく使えますので、AI関数以外の関数だけでも十分に業務効率は向上します。
関数が多すぎてどこから覚えればいいかわかりません
まずは自分の業務で「繰り返し手作業している場面」を思い出してください。データの統合ならVSTACK、重複チェックならUNIQUE、検索ならXLOOKUPというように、具体的な課題と関数を1対1で紐づけるのが最も定着しやすい覚え方です。一度に全部覚える必要はまったくありません。ひとつずつ実際のシートで試しながら、自分の引き出しを少しずつ増やしていくのが確実です。
QUERY関数とFILTER関数はどう使い分ければよいですか?
単純な条件でデータを抽出するだけならFILTER関数のほうがシンプルで高速です。一方、集計(GROUP BY)、並べ替え(ORDER BY)、表示列の選択(SELECT)、ラベルの変更(LABEL)など複合的な処理をまとめて行いたい場合は、QUERY関数のほうが1つの数式で完結できるので便利です。チームで共有するシートでは、SQL経験者が多ければQUERY、そうでなければFILTERを軸に設計すると、メンテナンスしやすいシートになります。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Googleスプレッドシートには、まだまだ多くの人が気づいていない強力な関数が豊富に揃っています。基本的なUNIQUEやXLOOKUPから、配列操作のVSTACKやTOCOL、数式設計を変えるLETやLAMBDA、そして2026年の目玉である=AI関数まで、どれもひとつ覚えるだけで作業効率が目に見えて変わるものばかりです。
大切なのは、すべてを一気に暗記しようとするのではなく、自分の業務で「これは使えそうだ」と感じたものから1つずつ試すこと。そしてその経験を積み重ねることで、関数の引き出しが自然と増え、どんな場面でも最適な手段を選べるようになります。
スプレッドシートは単なる表計算ツールではなく、使い手の知識次第で無限に可能性が広がるプラットフォームです。今日この記事で出会った関数のうち、まずはひとつだけでもいいので、ぜひ実際のシートで試してみてください。きっと「もっと早く知りたかった」と思えるはずです。




コメント