「あれ、並び替えボタンを押したのに順番がおかしい……」「昇順にしたはずなのに、1の次が10になってる……」スプレッドシートを使っていて、こんな経験をしたことはありませんか?
実はこの「スプレッドシートで並び替えが効かない」というトラブル、世界中のユーザーが日常的にぶつかっている超あるある問題なんです。しかもやっかいなことに、原因がひとつではありません。表示形式の問題、セル結合の罠、権限の壁、空白セルの落とし穴など、複数の原因が複雑にからみ合っているケースもあります。
この記事では、スプレッドシートで並び替えが効かない原因を7つに分類し、それぞれの具体的な解決手順をどこよりもわかりやすく解説します。さらに、2026年最新のGemini AI機能やSORT関数・QUERY関数を使った「二度と困らない」並び替えテクニックまで網羅しました。初心者の方でも迷わず解決でき、上級者の方にも新しい発見がある内容です。
- スプレッドシートで並び替えが効かない7つの原因と、それぞれの1分で完了する修正手順の解説
- SORT関数やQUERY関数を使った、元データを壊さずに並び替える安全で高度なテクニックの紹介
- 2026年最新のGemini AI連携やフィルタ表示を活用した、今後並び替えで困らなくなる実践的な運用術
- そもそもスプレッドシートの並び替えはどう動いているのか?
- スプレッドシートで並び替えが効かない7つの原因と解決策
- SORT関数を使って安全に並び替える方法
- QUERY関数で柔軟に並び替えと抽出を同時に行う
- 2026年最新のGemini AI機能を活用した並び替え
- フィルタ表示を活用した「元に戻せる」並び替え運用術
- 並び替えの3つの方法を目的別に使い分けるコツ
- スマートフォン版スプレッドシートでの並び替え方法
- 情シス歴10年超の現場で遭遇した「地味にハマる」並び替えトラブルと解決策
- 現場で即使えるGoogle Apps Scriptの実践コード集
- 上級者でも見落としがちな並び替え時の注意点
- 実際の現場でよく起きる「あるある問題」の具体的な解決手順
- ぶっちゃけこうした方がいい!
- スプレッドシートで並び替えが効かないことに関する疑問解決
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
そもそもスプレッドシートの並び替えはどう動いているのか?
並び替えが効かない原因を理解するには、まずGoogleスプレッドシートが裏側でどんな処理をしているかを知っておくと近道です。ここを押さえておけば、トラブルが起きたときに「たぶんこれが原因だな」とすぐに見当がつくようになります。
スプレッドシートの並び替えには、大きく分けて3つの方法があります。ひとつ目はメニューの「データ」から実行する標準機能による並び替え、ふたつ目はフィルタ機能を使った並び替え、そして3つ目がSORT関数やQUERY関数を使った関数による並び替えです。
標準機能の並び替えには「シートを並べ替え」と「範囲を並べ替え」の2つのメニューがあります。「シートを並べ替え」はヘッダー行も含むシート全体を対象にしてしまうため、意図しない結果になることが多いです。基本的には「範囲を並べ替え」を使うことを強くおすすめします。「範囲を並べ替え」なら、選択した範囲だけが対象になるうえ、ヘッダー行の除外や複数条件での並び替えにも対応できます。
フィルタによる並び替えも便利ですが、ひとつ大きな注意点があります。それはフィルタを解除しても並び順は元に戻らないということです。絞り込みはフィルタ解除で元に戻りますが、並び替えは戻りません。これを知らずに操作して、元の並び順を失ってしまう人がとても多いのです。
関数による並び替えは、元データを一切変更せずに別の場所に並び替え結果を出力する方法です。データの追加や編集がリアルタイムで反映されるため、頻繁に更新されるデータを扱う場合に最適な選択肢になります。
スプレッドシートで並び替えが効かない7つの原因と解決策
それでは本題に入りましょう。スプレッドシートで並び替えが効かない原因を7つに分類して、それぞれの解決方法を具体的に説明していきます。自分の状況にあてはまるものがないか、上から順にチェックしてみてください。
原因1数値が「書式なしテキスト」になっている
これが最も多い原因です。見た目は数字に見えていても、セルの表示形式が「書式なしテキスト」(Plain Text)になっていると、スプレッドシートはその値を文字列として扱います。すると、数値としての「1, 2, 3, 10, 20」ではなく、文字列としての「1, 10, 2, 20, 3」という順番で並んでしまうのです。
解決方法はシンプルです。まず並び替えたい数値のセル範囲を選択してください。次に画面上部のメニューから「表示形式」をクリックし、「数字」を選んで「数値」を指定します。これで表示形式が数値に変わります。その後、改めてデータメニューから並び替えを実行すれば、正しい数値順で並びます。
ちなみに、CSVファイルや外部からコピーペーストしたデータは、テキスト形式で入ってくることが非常に多いです。外部データを取り込んだ直後は、真っ先に表示形式を確認する習慣をつけましょう。セルの左寄せになっている数字は、テキスト形式になっている可能性が高いサインです。
原因2セルが結合されている
セル結合は見た目を整えるために使いがちですが、並び替えの最大の敵といっても過言ではありません。結合セルが含まれる範囲で並び替えを実行すると、「結合を含む範囲は並べ替えできません」というエラーが表示されます。
やっかいなのは、自分で結合した覚えがない場合でも、他の人が作ったシートや外部からインポートしたデータの中に結合セルが隠れているケースがあることです。Googleの公式ヘルプでも、フィルタが使えない原因として結合セルの存在が明記されています。
解決方法としては、シート全体を選択してから(
Ctrl+A
で全選択できます)、メニューの「表示形式」から「セルを結合」を開き、「結合を解除」をクリックしてください。これですべての結合が解除されます。結合を解除すると、結合されていた範囲の左上のセルだけに値が残り、他のセルは空になります。必要に応じて値を補完してから並び替えを行いましょう。
大きなシートで結合セルの場所を特定したい場合は、フィルタを作成してみるのがコツです。結合セルがあると「垂直方向の結合を含む範囲にはフィルタを作成できません」というエラーが出るので、問題の所在を素早く特定できます。
原因3編集権限が「閲覧のみ」になっている
共有されたスプレッドシートで並び替えができない場合、まず確認すべきなのが権限です。画面右上に「閲覧のみ」と表示されていたら、そもそもデータを編集する権限がないため、並び替えも実行できません。
この場合はファイルのオーナーに連絡して、「編集者」権限に変更してもらう必要があります。ただし、権限を変更してもらえない場合でも、完全にお手上げというわけではありません。フィルタ表示機能を使えば、閲覧権限のままでも自分だけの並び替えビューを作成できます。メニューの「データ」から「フィルタ表示」を選択し、「新しいフィルタ表示を作成」をクリックするだけです。これは他のユーザーの表示には影響しないので、安心して使えます。
原因4ヘッダー行が並び替えに巻き込まれている
「シートを並べ替え」機能を使うと、ヘッダー行(見出し行)もデータの一部として並び替えられてしまいます。すると、本来先頭にあるべき項目名が表の途中に紛れ込んでしまい、「並び替えがおかしい」と感じる原因になります。
対処法は2つあります。ひとつは「範囲を並べ替え」の詳細オプションで「データにヘッダー行が含まれています」にチェックを入れること。もうひとつは、メニューの「表示」から「固定」を選び、先頭行を固定(フリーズ)しておくことです。先頭行をフリーズしておけば、「シートを並べ替え」を使ったとしてもヘッダーは固定されたままになります。
原因5文字列と数値が混在している
ひとつの列に文字列と数値が混在していると、並び替えの結果が予想外になることがあります。スプレッドシートは数値とテキストを別々のグループとして扱い、通常は数値を先に、テキストを後にまとめて並べます。そのため、「100」「N/A」「200」「未定」のようなデータが混ざっていると、思った通りの順番にならないのです。
根本的な解決策は、データ入力のルールを統一することです。数値が入るべき列にテキストが混ざらないようにするのが理想ですが、すでに混在している場合は補助列を作成して対応しましょう。
=ISNUMBER(A2)
という数式で、各セルが数値かテキストかを判定できます。テキストになっている数値は
=VALUE(A2)
で数値に変換するか、該当するテキストを適切な数値に置き換えてください。
原因6空白行や非表示の文字が含まれている
データの途中に空白行があると、スプレッドシートはそこをデータの区切りとみなすことがあります。するとデータ範囲全体を正しく認識できず、一部のデータだけが並び替えられてしまいます。
また、目には見えないけれどセルに余分なスペースや改行文字が入っているケースもあります。見た目は空白に見えるのに、実際にはデータが入っているため、並び替え結果がおかしくなるのです。
=LEN(A2)
で文字数を確認すると、本来0文字のはずのセルに文字数が表示されることがあります。その場合は
=TRIM(A2)
や
=CLEAN(A2)
を使って不要な文字を除去してください。
空白行については、対象のデータ範囲を手動で正確に選択してから並び替えることで回避できます。
Ctrl+Shift+End
でデータの最終行まで選択する際も、途中の空白行ごと選択されていることを確認しましょう。
原因7ブラウザやデバイスの一時的な不具合
ここまでの原因をすべて確認しても解決しない場合は、ブラウザやデバイスの一時的な不具合の可能性があります。この場合は以下の手順を試してみてください。
- ブラウザのページを再読み込み(リロード)する。キーボードの
F5キー、または
Ctrl+Rで実行できます。
- ブラウザのキャッシュとCookieをクリアしてから再度開く。
- ブラウザ自体を完全に閉じてから再起動する。Google Chromeの場合、アドレスバーに
chrome://restartと入力すると再起動できます。
- それでもだめならパソコン自体を再起動する。
- ブラウザが最新バージョンかどうかも確認しましょう。古いバージョンだとスプレッドシートの機能が正しく動作しないことがあります。
SORT関数を使って安全に並び替える方法
メニューやフィルタによる並び替えは手軽ですが、元データの並び順を直接変更してしまうというリスクがあります。一度並び替えてしまうと、元の順番に戻すのは容易ではありません。そこでおすすめしたいのが、SORT関数を使った並び替えです。
SORT関数は元データには一切手を加えず、別のセルに並び替え結果を出力します。しかもデータの追加や編集がリアルタイムで反映されるので、常に最新の並び順が自動で維持されるのです。
SORT関数の基本的な書き方
SORT関数の構文は次のとおりです。
=SORT(範囲, 並び替えの基準列, 昇順か降順)
たとえば、A2からE100までのデータをE列(5列目)の値で降順に並び替えたい場合は、以下のように書きます。
=SORT(A2:E100, 5, FALSE)
第3引数の
TRUE
は昇順、
FALSE
は降順です。複数条件で並び替えたい場合は、引数を追加するだけで対応できます。たとえば、2列目で昇順に並べた後、同じ値の中では4列目で降順に並べたい場合はこうです。
=SORT(A2:E100, 2, TRUE, 4, FALSE)
ExcelのSORT関数と違って、GoogleスプレッドシートのSORT関数は並び替えキーの列を番号で直接指定できます。これは地味にとても便利で、SORTBY関数のように別途キー配列を用意する必要がありません。
SORT関数とFILTER関数の組み合わせ
SORT関数はFILTER関数と組み合わせることで、条件に合うデータだけを抽出して並び替えるという高度な処理も可能になります。たとえば、B列が「営業部」のデータだけをE列の降順で並べ、さらに上位10件だけ表示したい場合は以下のように書けます。
=ARRAY_CONSTRAIN(SORT(FILTER(A2:E100, B2:B100="営業部"), 5, FALSE), 10, 5)
このように関数を組み合わせれば、かなり複雑な要件にも対応可能です。
QUERY関数で柔軟に並び替えと抽出を同時に行う
さらに高度な並び替えをしたい場合は、QUERY関数を使う方法があります。QUERY関数はデータベースの操作言語であるSQLに似た記法を使うため、慣れないうちはとっつきにくく感じるかもしれませんが、覚えてしまうとSORT関数より柔軟な操作ができます。
QUERY関数での並び替えの基本
QUERY関数の基本構文は次のとおりです。
=QUERY(データ範囲, "SELECT * ORDER BY 列 ASC")
ORDER BY
の後に並び替えの基準となる列を指定し、
ASC
(昇順)または
DESC
(降順)を書きます。複数の列で並び替える場合はカンマで区切ります。
=QUERY(A1:E100, "SELECT * ORDER BY B ASC, D DESC")
QUERY関数がSORT関数と異なるユニークな特徴として、空白セルも並び替え対象に含むという点があります。SORT関数やSORTN関数は空白行を常に末尾に配置しますが、QUERY関数では昇順の場合に空白が先頭に来ます。空白行の扱いを意図的にコントロールしたい場合は、QUERY関数のほうが適しています。
条件絞り込みと集計を含む並び替え
QUERY関数の真価は、絞り込み・集計・並び替えを一つの数式で完結できるところにあります。たとえば、D列が10万より大きいデータだけをE列の降順で表示したい場合はこう書きます。
=QUERY(A1:E100, "SELECT * WHERE D > 100000 ORDER BY E DESC")
さらに、部門別の売上合計を降順で表示するような集計つき並び替えも可能です。
=QUERY(A1:E100, "SELECT B, SUM(E) GROUP BY B ORDER BY SUM(E) DESC")
こうした処理をメニューの操作だけで実現するのは不可能です。QUERY関数をマスターすれば、スプレッドシートの活用レベルが一段も二段も上がります。
2026年最新のGemini AI機能を活用した並び替え
2026年に入り、GoogleスプレッドシートにはGemini AIとの連携機能がさらに強化されました。2025年後半にはAI関数がGoogle検索と連動してリアルタイム情報を取得できるようになり、2026年2月にはGeminiが複数のリクエストを一度のプロンプトで処理できるようになっています。たとえば「ドロップダウンを追加して、日付を計算して、ヘッダーを固定して」という複合的な依頼を一発で実行できるようになったのです。
並び替えに関しても、Geminiのサイドパネルに「この表を売上順に並び替えて」と自然言語で依頼するだけで、適切な操作やSORT関数の提案をしてもらえます。関数の書き方がわからない初心者の方にとっては、非常に心強い味方になるでしょう。この機能はGoogle Workspace Business以上のプランで利用可能で、教育機関向けにもEducation Plusプランなどで順次展開されています。
フィルタ表示を活用した「元に戻せる」並び替え運用術
標準機能やフィルタでの並び替えは、一度実行すると元の並び順に戻すのが困難です。しかしフィルタ表示という機能を使えば、この問題をスマートに解決できます。
フィルタ表示の最大のメリットは、並び替え条件を名前をつけて保存でき、フィルタ表示を閉じれば元の並び順に戻るという点です。しかも、フィルタ表示を開いた状態でデータの編集や追加があった場合、画面を更新するだけで最新データの並び替えに自動更新されます。
設定方法は、メニューの「データ」から「フィルタ表示」を選び、「新しいフィルタ表示を作成」をクリックするだけです。フィルタ表示では列ヘッダーのドロップダウンから昇順・降順を選択でき、複数の並び替え条件を設定することもできます。さらに、異なる並び替えパターンをそれぞれ別名で保存しておけば、「売上順」「日付順」「担当者順」など、目的に応じたビューを瞬時に切り替えられます。
共有ファイルで作業している場合、フィルタ表示は自分だけの表示に影響するため、他のメンバーの画面には一切影響しません。チームで同じファイルを使っている環境ではとくに有用な機能です。
並び替えの3つの方法を目的別に使い分けるコツ
ここまで紹介した並び替えの方法を、目的に応じてどう使い分ければよいか整理しておきましょう。
| 利用シーン | おすすめの方法 | 理由 |
|---|---|---|
| 一回きりの簡単な並び替え | メニューの「範囲を並べ替え」 | 最も手軽で直感的に操作できるため |
| データ編集あり、元の並びに戻したい | フィルタ表示 | 閉じれば元に戻り、条件を保存できるため |
| 並び替え結果を常に最新にしたい | SORT関数 | データの追加・編集がリアルタイムで反映されるため |
| 複雑な条件の絞り込み+並び替え | QUERY関数 | 集計やフィルタリングも同時に処理できるため |
| 色による並び替え | フィルタ機能 | セル色や文字色を基準にできる唯一の方法のため |
この使い分けを意識するだけで、並び替えに関するトラブルは劇的に減ります。とくに「SORT関数で出力→元データは触らない」という運用を基本にすると、「並び替えが効かない」「元に戻せない」といった問題とはほぼ無縁になれます。
スマートフォン版スプレッドシートでの並び替え方法
スマートフォンでスプレッドシートを操作する際は、PC版とは少し手順が異なります。まず並び替えたい列の列ヘッダーをタップして列全体を選択し、画面上部に表示される「その他」メニュー(三点アイコン)をタップします。表示されるメニューから「昇順で並べ替え」または「降順で並べ替え」を選択してください。
なお、スマートフォン版ではPC版のような詳細な並び替えオプション(複数条件での並び替えなど)は利用できません。複雑な並び替えが必要な場合は、PC版で操作するか、あらかじめSORT関数を設定しておくのが現実的です。2026年2月17日にはGoogleスプレッドシートのAndroidアプリも最新版(バージョン1.26)がリリースされており、動作の安定性が向上しています。
情シス歴10年超の現場で遭遇した「地味にハマる」並び替えトラブルと解決策
ここからは、公式ヘルプや一般的なブログ記事にはまず書かれていない、情報システム部門で10年以上スプレッドシートの運用トラブルに対処してきた経験から得た「現場でしか知り得ない」落とし穴と、その具体的な解決手順を共有します。どれも実際に社内で起きた事例をベースにしているので、「あ、まさにこれだ」と感じる方も多いはずです。
CSVインポート直後の「見えない罠」を30秒で一掃する方法
基幹システムや外部ツールからCSVをインポートした直後に並び替えがおかしくなる、というのは情シスへの問い合わせで本当に多いパターンです。原因の9割は「見た目は数字なのにテキスト形式で入っている」ことですが、残り1割にとんでもなくやっかいなやつが潜んでいます。それがBOM(バイトオーダーマーク)や不可視の制御文字です。
UTF-8のCSVファイルには、先頭に目に見えない3バイトのBOMが付いていることがあります。これがセルの値に紛れ込むと、見た目はまったく同じ「100」なのに、スプレッドシートはそのセルをテキストとして認識します。
=LEN(A1)
で文字数を確認すると、数字の桁数より1文字多く表示されたりします。
この場合、表示形式を変更するだけでは解決しません。次の手順で対処してください。まず対象の列全体を選択し、メニューの「編集」から「検索と置換」を開きます。「検索」欄には何も入力せず、「正規表現を使用した検索」にチェックを入れて、検索欄に
と入力します。「置換後の文字列」は空のままにして「すべて置換」をクリックしてください。これで不可視の制御文字やノーブレークスペースが一掃されます。その後に表示形式を「数値」に変更すれば、正しく並び替えできるようになります。
ちなみに、ノーブレークスペース(
\xc2\xa0
)は通常の半角スペースとは別物で、Webページからデータをコピーペーストした場合に紛れ込むことが非常に多いです。
=TRIM()
では除去できず、
=SUBSTITUTE(A1, CHAR(160), "")
で置換する必要があります。これは本当にハマりやすいので覚えておいてください。
IMPORTRANGE経由のデータで並び替えが崩壊するケース
複数のスプレッドシートを
IMPORTRANGE
で連携して使っている組織は多いと思いますが、IMPORTRANGEで取得したデータをSORT関数で並び替えると、参照元の更新タイミングによって一時的に
#REF!
エラーになったり、キャッシュの影響で古いデータのまま並び替えられることがあります。
現場で有効だった対策は、IMPORTRANGEの出力を一度中間シートに受け取ってからSORT関数で参照するという二段構え方式です。直接
=SORT(IMPORTRANGE(...))
とネストするのではなく、「データ取得用」シートにIMPORTRANGEの結果を展開し、「表示用」シートからそのデータ取得用シートをSORT関数で参照します。こうすることで、IMPORTRANGE側のエラーが直接出力画面に波及するのを防げます。中間シートで
=IFERROR(IMPORTRANGE(...), "読込中")
とエラーハンドリングをしておくとさらに安全です。
「誰かがフィルタで並び替えた」問題を仕組みで防ぐ
共有ファイルで最も多い現場トラブルは、「誰かがフィルタで並び替えてしまい、元に戻せなくなった」というケースです。これは研修で何度注意しても、必ず起きます。人間のミスは仕組みで防ぐしかありません。
根本的な対策は3つあります。まずマスターデータのシートに「保護」をかけること。並び替えを含む編集操作は、特定のユーザー以外には許可しない設定にします。メニューの「データ」から「シートと範囲を保護」を選び、シート全体を保護したうえで、管理者のアカウントだけを編集許可に追加してください。
2つ目は、閲覧用ユーザーには「フィルタ表示」だけを使わせる運用にすること。通常のフィルタではなくフィルタ表示を使えば、そのユーザーのビューだけが変わり、元データの並び順には影響しません。
3つ目は後述するGASで自動バックアップの仕組みを入れておくことです。どんなに対策しても事故はゼロにはなりません。最後の砦として、毎日の自動バックアップは絶対に設定しておくべきです。
現場で即使えるGoogle Apps Scriptの実践コード集
ここからは、並び替えに関するトラブルを未然に防いだり、発生時に素早く復旧するためのGoogle Apps Script(GAS)のコードを紹介します。GASはスプレッドシートのメニューから「拡張機能」→「Apps Script」で開ける、スプレッドシート専用のプログラミング環境です。コピーペーストするだけで使えるので、プログラミング未経験の方でも問題ありません。
GAS①データ編集時に自動で並び替えするスクリプト
データを入力するたびに毎回手動で並び替えるのは面倒ですし、忘れることもあります。以下のスクリプトを設定すれば、セルが編集されるたびに指定した列で自動的に並び替えが実行されます。
Apps Scriptエディタを開き、以下のコードを貼り付けて保存するだけです。
function onEdit(e) {
// ===== 設定エリア(ここだけ変更してください)=====
var targetSheetName = "売上データ"; // 並び替え対象のシート名
var sortColumn = 5; // 並び替えキーの列番号(A=1, B=2...)
var isAscending = false; // true:昇順 / false:降順
var headerRows = 1; // ヘッダー行の数
// ===== 設定ここまで =====
var sheet = e.source.getActiveSheet();
if (sheet.getName() !== targetSheetName) return;
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
if (lastRow <= headerRows) return;
var range = sheet.getRange(headerRows + 1, 1, lastRow - headerRows, lastCol);
range.sort({column: sortColumn, ascending: isAscending});
}
設定エリアの4つの変数を自分の環境に合わせて変更するだけで動きます。
targetSheetName
にはシートのタブ名を正確に入力してください。このスクリプトはonEditトリガーを使っているため、手動でトリガーを設定する必要はありません。保存した瞬間から動作します。
ただし注意点がひとつ。onEditはすべてのセル編集で発火します。大量のデータを一気に入力する場面では、編集のたびに並び替えが走ってパフォーマンスが落ちる可能性があります。その場合は、次に紹介するボタン式のスクリプトの方が適しています。
GAS②ボタンをクリックして任意のタイミングで並び替えるスクリプト
自動実行ではなく、自分の好きなタイミングで並び替えたい場合はこちらが便利です。スプレッドシート上に「並び替え」ボタンを作成し、クリックで実行できるようにします。
function sortByButton() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("売上データ"); // シート名を指定
var headerRows = 1;
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
if (lastRow <= headerRows) {
SpreadsheetApp.getUi().alert("並び替え対象のデータがありません。");
return;
}
var range = sheet.getRange(headerRows + 1, 1, lastRow - headerRows, lastCol);
// 複数条件での並び替え(第1キー:3列目昇順、第2キー:5列目降順)
range.sort[
{column: 3, ascending: true},
{column: 5, ascending: false}
]);
SpreadsheetApp.getUi().alert("並び替えが完了しました!");
}
このスクリプトを保存したら、スプレッドシートに戻ってメニューの「挿入」→「図形描画」でボタンに見える図形を作成してください。作成した図形をクリックすると右上に三点メニューが表示されるので、「スクリプトを割り当て」を選択し、
sortByButton
と入力します。これでワンクリックで複数条件の並び替えが実行できるボタンの完成です。
range.sort()
に配列で条件を渡せば、複数キーでの並び替えも簡単に実現できます。部署→役職→売上のような3段階以上のソートも、配列の要素を増やすだけです。
GAS③結合セルを自動検出して一覧表示するスクリプト
並び替えの天敵である結合セルを、目視ではなくプログラムで確実に検出するスクリプトです。大きなシートほど威力を発揮します。
function findMergedCells() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns());
var mergedRanges = range.getMergedRanges();
if (mergedRanges.length === 0) {
SpreadsheetApp.getUi().alert(
"結合セルは見つかりませんでした。\nこのシートは並び替え可能です。"
);
return;
}
var message = "【結合セル検出結果】\n";
message += "合計 " + mergedRanges.length + " 箇所の結合が見つかりました。\n\n";
mergedRanges.forEach(function(rng, index) {
rng.setBackground("#FFFF00"); // 結合セルを黄色でハイライト
message += (index + 1) + ". " + rng.getA1Notation() + "\n";
});
message += "\n該当セルを黄色でハイライトしました。\n";
message += "結合を解除するには、全選択してから\n";
message += "表示形式 → セルの結合 → 結合を解除\nを実行してください。";
SpreadsheetApp.getUi().alert(message);
}
このスクリプトを実行すると、シート内のすべての結合セルが黄色にハイライトされ、さらにポップアップでセル番地の一覧が表示されます。何百行もあるシートを目視で結合セルを探すのは現実的ではないので、このスクリプトは本当に重宝します。
GAS④並び替え前にシートを自動バックアップするスクリプト
「並び替えたら元に戻せなくなった」という事故は、バックアップさえあれば一瞬で解決します。以下のスクリプトは、実行するたびに現在のシートのコピーをバックアップとして自動生成します。
function backupBeforeSort() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var sheetName = sheet.getName();
var timestamp = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyyMMdd_HHmmss");
var backupName = "backup_" + sheetName + "_" + timestamp;
// 現在のシートを同じスプレッドシート内にコピー
var backup = sheet.copyTo(ss);
backup.setName(backupName);
// バックアップシートを末尾に移動
ss.setActiveSheet(backup);
ss.moveActiveSheet(ss.getNumSheets());
// 元のシートに戻る
ss.setActiveSheet(sheet);
SpreadsheetApp.getUi().alert(
"バックアップ完了!\n" +
"シート名" + backupName + "\n\n" +
"元の並び順に戻したいときは、このバックアップシートからデータをコピーしてください。"
);
}
タイムスタンプ付きのシート名で保存されるので、いつ時点のバックアップかが一目でわかります。並び替え作業の前にこれを実行する習慣をつけるだけで、精神的な安心感がまったく違います。
さらに便利な使い方として、先ほどの並び替えボタンスクリプトと組み合わせて、並び替えボタンを押すと自動でバックアップ→並び替えという一連の流れを自動化することもできます。
sortByButton
関数の先頭に
backupBeforeSort();
を1行追加するだけです。
GAS⑤テキスト形式の数値を一括で数値型に変換するスクリプト
並び替えトラブルの最大原因である「テキスト形式の数値」を、指定した列のデータをまるごと数値型に変換するスクリプトです。
function convertTextToNumbers() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var ui = SpreadsheetApp.getUi();
var response = ui.prompt(
"数値変換する列を入力してください",
"列のアルファベットを入力(例E)",
ui.ButtonSet.OK_CANCEL
);
if (response.getSelectedButton() !== ui.Button.OK) return;
var colLetter = response.getResponseText().toUpperCase().trim();
var colNumber = colLetter.charCodeAt(0) - 64;
var lastRow = sheet.getLastRow();
var convertedCount = 0;
var errorCount = 0;
for (var i = 2; i <= lastRow; i++) {
var cell = sheet.getRange(i, colNumber);
var value = cell.getValue();
if (typeof value === "string" && value.trim() !== "") {
// カンマや通貨記号を除去してから数値変換
var cleaned = value.replace(//g, "");
var num = Number(cleaned);
if (!isNaN(num)) {
cell.setValue(num);
convertedCount++;
} else {
cell.setBackground("#FFE0E0"); // 変換失敗セルをピンクに
errorCount++;
}
}
}
ui.alert(
"変換完了!\n\n" +
"変換成功:" + convertedCount + " セル\n" +
"変換失敗:" + errorCount + " セル(ピンク色で表示)\n\n" +
"変換失敗したセルには、数値に変換できない文字列が含まれています。"
);
}
実行すると列のアルファベットを入力するダイアログが表示されます。対象の列を入力して「OK」を押すだけで、テキスト形式の数値をすべて数値型に変換します。「¥1,000」や「$500」のようにカンマや通貨記号が入っていても自動で除去して変換します。数値に変換できなかったセルはピンク色でハイライトされるので、どこに問題があるかも一目瞭然です。
上級者でも見落としがちな並び替え時の注意点
SORT関数の出力範囲に数式が入っていると発生するサイレント障害
これはかなり多くの人が気づいていないパターンです。SORT関数の出力先にすでに別の数式やデータが入っている場合、SORT関数は
#REF!
エラーになります。ここまでは普通なのですが、問題は出力先のセルが空に見えるのに実はスペースや空文字が入っているケースです。見た目は空白なのにSORT関数がエラーになり、原因がまったくわからずに何時間もハマるという事態が起きます。
対処法は、SORT関数の出力先の範囲を選択して
Delete
キーで確実にクリアしてから数式を入力することです。
Backspace
ではなく
Delete
を使うのがポイントです。Backspaceはアクティブセルしかクリアしませんが、Deleteは選択範囲全体をクリアします。
条件付き書式とフィルタの並び替えが干渉する罠
条件付き書式を設定しているシートでフィルタの並び替えを実行すると、条件付き書式の参照範囲がズレることがあります。たとえば「A2:A100のうち値が100以上のセルを赤く塗る」という条件付き書式を設定した状態で並び替えると、A2:A100という参照が変わらないため、並び替え後のデータに対して正しく条件判定が行われなくなるのです。
これを防ぐには、条件付き書式の参照を相対参照で設定しておくことです。「カスタム数式」で
=A2>=100
のように設定しておけば、セルごとに相対的に判定されるため、並び替え後も正しく動作します。固定の範囲参照(
$A$2:$A$100
)を使っている場合は、並び替え後に条件付き書式の設定を見直す必要があるので注意してください。
スプレッドシートの「ロケール設定」が引き起こす日付並び替え事故
見落とされがちですが、スプレッドシートの「ロケール」設定が日本以外になっていると、日付の認識が変わります。たとえばロケールがアメリカ(米国)になっている場合、「3/4/2026」は3月4日ではなく、4月3日と解釈されます。当然、この状態で日付の並び替えをすると、想定とはまったく違う順序になります。
ロケールの確認方法は、メニューの「ファイル」→「設定」を開き、「全般」タブの「地域の設定」を確認するだけです。日本のデータを扱う場合は「日本」に設定されていることを必ず確認してください。とくにテンプレートからスプレッドシートを作成した場合や、海外のチームメンバーが作成したファイルを引き継いだ場合に、ロケールが想定外の設定になっていることが非常に多いです。
GASのonEditトリガーとフィルタ表示の共存問題
先ほど紹介した自動並び替えのGASスクリプト(onEditトリガー)を設定しているシートで、別のユーザーがフィルタ表示を使って独自の並び替えをしようとすると、onEditが裏で動いてフィルタ表示の並び替え結果を上書きしてしまうことがあります。
この問題を回避するには、onEdit関数内でフィルタ表示がアクティブかどうかを判定し、フィルタ表示中は処理をスキップするロジックを追加します。具体的には、スクリプトの冒頭で以下のような条件分岐を入れてください。
function onEdit(e) {
var sheet = e.source.getActiveSheet();
// フィルタ表示がアクティブな場合は処理をスキップ
if (sheet.getFilter() !== null) return;
// 以降の並び替え処理...
}
完全にフィルタ表示を検出する方法はGASの標準機能だけでは難しいのですが、少なくとも通常フィルタの有無はこの方法で判定できます。チームで運用する場合は「自動並び替えが設定されているシートではフィルタ表示を使用する」というルールを周知しておくのも重要です。
実際の現場でよく起きる「あるある問題」の具体的な解決手順
「他部署から受け取ったファイルの並び替えが全部おかしい」問題
これは週に一度くらいの頻度で発生する定番トラブルです。他部署やクライアントから受け取ったスプレッドシートで並び替えを試みると、ありとあらゆるエラーが同時発生するパターンです。結合セルあり、テキスト形式の数値あり、空白行あり、不可視文字ありの「フルコース」です。
こういうファイルを受け取ったら、並び替えの前に「データクレンジング」を一気にやってしまうのが最も効率的です。以下の手順を順番に実行してください。
-
Ctrl+Aでシート全体を選択し、「表示形式」→「セルの結合」→「結合を解除」でまず結合をすべて外す。
- 同じく全選択の状態で「編集」→「検索と置換」を開き、正規表現をオンにして
を空文字に置換して制御文字を除去する。
- 数値が入るべき列を選択し、「表示形式」→「数字」→「数値」で表示形式を一括変更する。
- 日付が入るべき列を選択し、「表示形式」→「数字」→「日付」で表示形式を一括変更する。
- 空白行があれば削除するか、データ範囲を正確に選択して並び替える。
このクレンジング手順を文書化して「受領ファイルの前処理マニュアル」としてチーム内で共有しておくと、同じ問い合わせが激減します。実際にうちの情シスでは、この手順書を作ったことで並び替え関連の問い合わせが月10件から月1件に減りました。
「売上データが10万行あるけど並び替えが異常に遅い」問題
数万行を超えるデータでメニューの並び替えやフィルタを使うと、実行に10秒以上かかったり、最悪の場合ブラウザがフリーズすることがあります。とくに複数条件での並び替えは処理が重くなりがちです。
こういう大規模データの並び替えには、QUERY関数を使って別シートに出力する方法が最速です。QUERY関数は内部的に最適化されており、メニューの並び替え操作よりも高速に動作します。さらに、大量のデータを日常的に扱う場合は以下の工夫が有効です。
まず、使わない列を非表示にするのではなくQUERY関数のSELECT句で必要な列だけを取得することで、処理対象のデータ量自体を減らせます。たとえば全20列のデータのうちA列、C列、E列だけが必要なら、
=QUERY(データシート!A:T, "SELECT A, C, E ORDER BY E DESC")
のように書きます。
また、SORTN関数を使って上位N件だけを取得するのも非常に有効です。10万行のデータを全部並び替えるのではなく、上位100件だけを表示する場合は、全データを並び替えてからトリミングするSORT+ARRAY_CONSTRAINの組み合わせよりも、
=SORTN(A2:E100001, 100, 0, 5, FALSE)
のようにSORTN関数を使った方が圧倒的に高速です。SORTN関数は内部的に必要な件数分だけをソートするため、大量データでのパフォーマンスが段違いに良いのです。
「プルダウンリスト付きの列で並び替えるとプルダウンが消える」問題
データ入力規則でプルダウンリストを設定している列を含む範囲を並び替えると、プルダウンの設定が崩れたり消えたりすることがあります。これはデータ入力規則が行に紐づいているため、行が移動するとルールとデータの対応がズレるためです。
対策としては、列全体に対してデータ入力規則を設定する方法が最も確実です。特定のセル範囲(例B2:B100)ではなく、列全体(B:B)にプルダウンを設定しておけば、並び替えで行が移動してもプルダウンが失われません。既に個別のセルに設定してしまっている場合は、一度すべてのデータ入力規則を削除してから、列全体に再設定してください。
ぶっちゃけこうした方がいい!
ここまで原因やら対策やらGASのコードやらをいろいろ書いてきたけど、ぶっちゃけた話をすると、並び替えトラブルの99%は「元データを直接並び替えている」ことが根本原因なんですよね。
10年以上この仕事をしてきて確信しているのは、「元データには絶対に触るな」というシンプルな原則です。元データは入力するだけ。並び替えも抽出もグラフ化も、すべて別のシートから関数で参照して行う。これを徹底するだけで、今回紹介した問題のほとんどは最初から発生しません。
具体的にいうと、スプレッドシートを新規作成したら、まず「入力」シートと「表示」シートの最低2枚構成にしてください。「入力」シートにはひたすらデータを入れるだけ。並び替えもフィルタも絶対にかけない。「表示」シートに
=SORT(入力!A2:E, 5, FALSE)
のようなSORT関数を入れて、そっちで並び替え結果を見る。たったこれだけで、元データの破壊、元に戻せない問題、結合セルの干渉、権限の問題、これらすべてがなくなります。
「でもSORT関数の結果は編集できないじゃん」と思うかもしれません。そのとおりです。でも考えてみてください。そもそも並び替えた結果を直接編集するのって、データ管理としておかしいんですよ。編集すべきは常に元データです。元データを修正すれば、SORT関数の出力は自動で更新される。この流れが一番自然で、一番安全で、一番楽なんです。
そしてもうひとつ。今回紹介したGASのバックアップスクリプト、これだけは騙されたと思って必ず入れてください。並び替えに限らず、スプレッドシート運用のすべてにおいて、バックアップの有無が「ちょっとしたミス」と「取り返しのつかない事故」の境界線になります。設定は5分で終わります。その5分が、将来の何時間もの復旧作業を確実に防いでくれます。
最終的にたどり着く結論は本当にシンプルで、「入力と表示を分離する」「SORT関数を使う」「バックアップを自動化する」、この3つだけ。華やかなテクニックではないけれど、これが10年やってきた人間のぶっちゃけた最適解です。地味だけど、これが最も楽で、最も安全で、最も効率的。ぜひ今日から実践してみてください。
スプレッドシートで並び替えが効かないことに関する疑問解決
並び替えたら関連する列のデータがバラバラになったのはなぜですか?
これは、並び替える列だけを選択して実行してしまったことが原因です。たとえばB列だけを選択して並び替えると、B列のデータだけが移動し、A列やC列のデータは元の位置のままになります。そのため行ごとのデータの対応関係が崩れてしまうのです。必ず表全体を範囲選択してから並び替えを実行してください。「範囲を並べ替え」の詳細オプションを使えば、どの列を基準にするかを指定しつつ、選択範囲全体の行を一緒に移動させることができます。
日付が正しい順序で並ばないのはどう対処すればよいですか?
日付データがテキスト形式で入力されている可能性が高いです。「2024/1/10」のように入力しても、セルの書式がテキストだとスプレッドシートはそれを日付として認識しません。対象の列を選択して「表示形式」から「日付」を設定し直してください。なお、日付を入力する際はISO形式(YYYY-MM-DD)を使うか、
DATE
関数で生成すると確実に日付として認識されます。日本語環境では「2024年1月10日」のような表記も自動認識されますが、ロケール設定によって挙動が変わることがあるので注意しましょう。
SORT関数を入れたのに結果が変わらないのはなぜですか?
SORT関数の引数が不足している可能性があります。SORT関数では、第1引数にデータ範囲、第2引数に並び替え基準の列番号、第3引数に昇順(TRUE)か降順(FALSE)かを必ず指定してください。列番号は、選択した範囲の中での相対的な番号です。たとえばB2:D100の範囲を指定した場合、B列が1、C列が2、D列が3になります。また、数式の出力先に十分な空きスペースがあるかも確認しましょう。出力先にデータがあるとエラーになります。
並び替えた後に元の並び順に戻す方法はありますか?
並び替え直後であれば、
Ctrl+Z
(Macなら
Cmd+Z
)で元に戻せます。ただし、ブラウザを閉じたりタブを閉じたりした後は元に戻せません。重要なデータの場合は、並び替え前にシートのコピーを作成しておくことを強くおすすめします。もっと根本的な対策としては、あらかじめ連番の列(ID列)を作っておくことです。ID列を基準に昇順で並び替えれば、いつでも元の順番に復元できます。なお、SORT関数を使う方法なら元データは変更されないので、そもそも「元に戻す」必要がありません。
SORTN関数とSORT関数はどう違いますか?
SORTN関数は、並び替えと同時に上位(または下位)のN件だけを抽出する関数です。たとえば売上上位5件だけを表示したい場合、SORT関数だとFILTERやARRAY_CONSTRAINと組み合わせる必要がありますが、SORTN関数なら
=SORTN(A2:C100, 5, 0, 3, FALSE)
のように一つの関数で完結します。ランキング表示や在庫の少ない商品リストの表示など、「上位N件」「下位N件」を求める場面ではSORTN関数のほうがシンプルに書けます。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良...もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
スプレッドシートで並び替えが効かないとき、その原因はほとんどの場合「表示形式がテキストになっている」「セルが結合されている」「権限が不足している」「ヘッダーが巻き込まれている」「データ型が混在している」「空白や不可視文字がある」「ブラウザの不具合」のいずれかです。今回紹介した7つの原因と解決策を順番にチェックしていけば、まず間違いなく問題は解消できます。
そしてより大切なのは、そもそも並び替えトラブルを起こさない仕組みを作ることです。SORT関数やQUERY関数を使えば元データを変更せずに並び替え結果を出力でき、フィルタ表示を使えば元の並び順を保ったまま柔軟に並び替えを切り替えられます。2026年のGemini AI機能も積極的に活用して、スプレッドシートのデータ管理をもっと快適にしていきましょう。まずは今日、自分のシートでSORT関数をひとつ試してみてください。それだけで、並び替えの悩みが過去のものになるはずです。






コメント