Home / Microsoft / Excel / 【2026年最新版】Excelの動的配列数式(スピル)が古いバージョンで使えない時の対処法【完全ガイド】

【2026年最新版】Excelの動的配列数式(スピル)が古いバージョンで使えない時の対処法【完全ガイド】

※本ページにはプロモーション(広告)が含まれています

Excelで「=FILTER(...)」や「=XLOOKUP(...)」といった便利な関数を使ったブックを、別のパソコンで開いた途端にすべてのセルが #NAME? エラーになってしまった——そんな経験はありませんか。さらにエラーセルを編集モードで覗くと、関数名の頭に見たことのない _xlfn. という文字列が付いていて、何が起きているのか分からず途方に暮れる方も少なくありません。これは Microsoft 365 や Excel 2021 以降で導入された「動的配列数式(スピル)」が、Excel 2019 以前のバージョンでは正しく解釈できないために起こる現象です。本記事では、動的配列数式が古いバージョンで使えない原因の本質と、状況に応じた具体的な対処法を、初心者の方にも分かるよう丁寧に解説していきます。

バージョン確認手順

この記事でわかること

  • 動的配列数式(スピル)と _xlfn. プレフィックスが付く理由
  • FILTER・SORT・UNIQUE・XLOOKUP・SEQUENCE などの新関数が古いExcelで動かない仕組み
  • Excelのバージョンを確認して状況を切り分ける方法
  • 新関数を従来の INDEX+MATCH や SUMPRODUCT で書き換える具体的な代替手順
  • 互換モード・互換性チェック機能の使い方と注意点
  • 共同編集時にバージョン違いで起きるトラブルの予防策

原因の基礎解説

まず、動的配列数式(スピル)とは何かをかんたんにおさらいしておきましょう。スピルとは、1つのセルに数式を入れるだけで、その結果が自動的に隣接する複数のセルにあふれるように展開される機能のことです。たとえば =SEQUENCE(5) と入力すると、入れたセルから下方向に1〜5の数字が一気に並びます。これは Microsoft 365(旧 Office 365)と Excel 2021 以降で正式にサポートされた、比較的新しい計算エンジンの仕組みです。

_xlfn. プレフィックスの正体

_xlfn.」は、英語の「Excel Function」の略で、Excelの内部識別子の一つです。新しい関数を使った数式を保存し、それを古いバージョンで開くと、Excel側がその関数を「自分が知らない関数」と判断します。このとき、ファイル形式の互換性を保ったまま関数名を伝えるために、Excelは関数名の前に _xlfn. を自動的に付けてセルに格納します。古いバージョンの Excel は、この _xlfn. 付きの関数を実行できないため、結果として #NAME? エラーが表示されるわけです。

動的配列数式が使える環境と使えない環境

動的配列数式が「ネイティブで」使えるのは、おおむね次の環境です。Microsoft 365(サブスクリプション型のExcel)、Excel 2021、Excel for the Web(ブラウザ版)、Excel for Mac 2021以降、iOS/Android のモバイル版Excelの新しいバージョンなどが該当します。一方、Excel 2019、Excel 2016、Excel 2013、Excel 2010 といった買い切り型の古いバージョンでは、動的配列数式そのものが実装されていないため、スピル動作も新関数も利用できません。

なぜ問題が起きるのか

動的配列数式の問題が顕在化するのは、ほぼすべて「環境をまたいだとき」です。たとえば、自宅のMicrosoft 365で作ったブックを、職場の Excel 2019 で開いたとき。あるいは、最新版で作ったテンプレートを、共有サーバー経由で別部署の人が古いExcelで開いたとき。同じExcelという名前のソフトでも、内部のバージョン差は想像以上に大きく、新関数の互換性は基本的に「下位互換のみ」(古い関数は新しいExcelで動く)であって、上位互換(新関数を古いExcelで動かす)はサポートされていません。

スピルの「ゴースト」と #SPILL! エラー

もう一つ覚えておきたいのが、動的配列数式特有の #SPILL! エラーです。これは、スピルが展開しようとする範囲に既にデータがあって、結果をあふれさせる場所がないときに発生します。古いExcelで作ったブックを新しいExcelで開いたときによく見られる現象で、スピル機能と従来の配列数式の動作の違いから生じます。新しいExcelでスピルを使う側でも、この挙動を理解しておくとトラブル時の切り分けが早くなります。

代替関数置き換え

具体的な対処法(手順別)

対処法1:自分のExcelのバージョンを確認する

まず最初にやるべきは、現在使っているExcelが動的配列数式に対応しているかの確認です。Excelを開いたら、左上の「ファイル」タブをクリックし、左メニューの一番下にある「アカウント」を選択します。画面右側に「製品情報」というセクションがあり、「Microsoft 365 Apps for Business」や「Microsoft Office Professional Plus 2021」などの表記が見られます。さらに「バージョン情報」のボタンを押すと、ビルド番号まで含めた詳細が表示されます。ここで Excel 2019 以前と表示されていれば、その環境では動的配列数式は使えないと判断できます。

もしバージョンが Excel 2019 以前であっても、Microsoft 365 へのアップグレードが組織のポリシー上できない場合は、以降で説明する代替関数による書き換えで対応します。

対処法2:互換性チェックでブックを診断する

動的配列数式を含むブックを古いExcelで配布する予定がある場合、事前に「互換性チェック」機能を使って、どの関数が問題を起こすかを把握しておくと安全です。手順は次のとおりです。「ファイル」タブから「情報」を開き、「問題のチェック」ボタンを押して「互換性チェック」を選びます。表示されるダイアログに、互換性のない数式や機能の一覧が出てきます。「これらの問題が発生するExcelのバージョンを選択」のドロップダウンで Excel 2019 などの古いバージョンを指定すると、より具体的な指摘が得られます。

このチェック結果を新しいシートに「コピー」できるオプションがあるので、出力しておくと書き換え作業のチェックリストとして使えます。

対処法3:FILTER関数を IF+INDEX+ROW で書き換える

FILTER関数は、条件に合うデータだけを抜き出す動的配列数式の代表格です。古いバージョンでは、配列数式(Ctrl+Shift+Enterで確定する古い形式)を組み合わせて再現します。たとえば、A列の名前一覧から「東京」と一致するB列のIDを抜き出すには、新しい書き方なら =FILTER(B2:B100, A2:A100="東京") ですが、古い書き方では次のような配列数式に置き換えます。

具体的には、結果を表示したい範囲を選択した状態で、=IFERROR(INDEX($B$2:$B$100, SMALL(IF($A$2:$A$100="東京", ROW($A$2:$A$100)-ROW($A$2)+1), ROW(A1))), "") を入力し、確定時に Enter ではなく Ctrl+Shift+Enter を押します。これで配列数式として登録され、下方向にコピーすると条件に合うIDが順に並びます。最初は複雑に見えますが、SMALL関数で「条件に合う行番号のN番目を取得し、INDEX関数でその行のデータを引っ張る」という発想を覚えると応用が利きます。

対処法4:UNIQUE関数を SUMPRODUCT や ピボットテーブルで代替する

UNIQUE関数は重複を除いたユニークな値の一覧を返す動的配列数式です。古いExcelでは、これと同じ結果を得る方法が複数あります。最も手軽なのは、対象の列を範囲選択し、「データ」タブの「重複の削除」を使う方法です。元データを残しておきたい場合は、いったん別のシートに値だけコピーしてから重複の削除を実行します。

数式で動的に処理したい場合は、SUMPRODUCTとIFを組み合わせる方法があります。たとえばA列のユニーク値をB列に並べたいなら、B2に =IFERROR(INDEX($A$2:$A$100, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$100), 0)), "") を配列数式として入力します。Ctrl+Shift+Enter で確定し、下方向にコピーすると、上から重複しない値が順に取得できます。最初の $B$1:B1 の絶対参照と相対参照の組み合わせがポイントで、これによって「自分より上に既に出ている値はカウントしない」という動作を実現しています。

もう一つ実用的な選択肢は、ピボットテーブルを使うことです。元データを範囲選択して「挿入」タブから「ピボットテーブル」を作成し、ユニークにしたい列を「行」エリアにドラッグすれば、自動的に重複が排除された一覧が表示されます。データ量が多いときはこちらのほうが圧倒的に高速です。

対処法5:SORT関数を範囲のソート操作に置き換える

SORT関数は範囲を並べ替えた結果を返す動的配列数式ですが、古いExcelでは関数で動的にソートするのは現実的ではありません。素直にデータタブの「並べ替え」機能を使うのが最も確実です。並べ替えたいキー列を選択し、「データ」タブから「昇順」または「降順」のアイコンをクリックします。複数のキーで並べ替えたい場合は「並べ替え」ダイアログから条件を追加できます。

どうしても数式で表現したい場合は、補助列にRANK関数で順位を出し、INDEX+MATCH で順位に対応する値を取り出す、という二段構えの方法があります。ただし、この方法は数式が複雑になりがちなので、可能ならば手動ソートか、後述の「値貼り付け化」をおすすめします。

対処法6:XLOOKUP を VLOOKUP または INDEX+MATCH に置き換える

XLOOKUPは、VLOOKUP/HLOOKUPの上位互換として登場した関数で、左側検索や複数条件など強力な機能を備えています。これも古いExcelでは使えませんが、用途別に従来の関数で代替可能です。

単純な検索(左から右への参照)であれば、VLOOKUPで置き換えられます。たとえば =XLOOKUP(A2, D:D, E:E)=VLOOKUP(A2, D:E, 2, FALSE) とほぼ同じ動作になります。ただし VLOOKUP は完全一致を明示するために第4引数 FALSE を必ず付けることを忘れないでください。

左方向への検索や、より柔軟な参照が必要な場合は、INDEX+MATCH の組み合わせが万能です。=XLOOKUP(A2, E:E, D:D) のように右側のキーで左側の値を引きたい場合は、=INDEX(D:D, MATCH(A2, E:E, 0)) と書きます。MATCH関数で行番号を取得し、INDEX関数でその行の指定列の値を返す、という考え方は動的配列以前から使われてきた定番テクニックで、古いExcelでも完全に動作します。

対処法7:SEQUENCE を ROW(INDIRECT()) で代替する

SEQUENCE関数は連番を生成する動的配列数式ですが、これも古いExcelでは ROW関数とINDIRECT関数の組み合わせで代用できます。たとえば =SEQUENCE(10)(1〜10の連番)は、=ROW(INDIRECT("1:10")) を配列数式として入力することで再現できます。INDIRECT関数は文字列で指定した範囲を実際の参照に変換する関数で、ROW関数と組み合わせることで動的に行番号の配列を作り出せます。

ただし、INDIRECT関数は揮発性関数(再計算が頻繁に走る関数)なので、大量に使うとブックの動作が重くなる点には注意が必要です。連番を頻繁に変える必要がなければ、単純に手入力した連番列を補助列として用意するほうが、ファイルの軽快さの面では有利です。

対処法8:動的配列数式の結果を「値貼り付け」で固定する

もし配布先で再計算する必要がない、つまり計算結果さえ正しく表示されればよい用途であれば、動的配列数式の結果を値として固定してしまう方法が最も手早く確実です。手順は、結果が表示されている範囲をすべて選択してコピーし、同じ場所に「値の貼り付け」を実行するだけです。これで数式が消え、計算結果のテキストや数値だけが残ります。

このやり方なら、配布先のExcelのバージョンが何であろうと、表示は崩れません。ただし、元データを変更しても結果は更新されなくなる点だけは、配布前に必ず確認してください。「動的に変わる必要のない、レポートとしての完成版」を作るときには、これが最もシンプルな選択肢になります。

対処法9:ファイルを Microsoft 365 の方を基準に運用する

そもそも組織やチーム内で頻繁にブックをやり取りするなら、ファイル単位の互換対応に終始するより、ライセンスを Microsoft 365 に統一するほうが長期的には合理的です。動的配列数式だけでなく、LET関数やLAMBDA関数といったさらに新しい機能も使えるようになり、生産性が大きく向上します。買い切り版とサブスクリプション版のコスト差は意外に小さく、機能差を考えると Microsoft 365 のほうがコストパフォーマンスに優れる場面が多くあります。

互換性チェック手順

比較表

新関数 主な用途 古いExcelでの代替手段 難易度
FILTER 条件抽出 INDEX+SMALL+IF(配列数式)または オートフィルター
UNIQUE 重複排除 「重複の削除」機能 または ピボットテーブル
SORT 並べ替え 「並べ替え」機能 または RANK+INDEX+MATCH
XLOOKUP 柔軟な参照 VLOOKUP(右側参照のみ)または INDEX+MATCH
SEQUENCE 連番生成 ROW+INDIRECT(配列数式)または 手入力
SORTBY キー指定の並べ替え 補助列+RANK+INDEX+MATCH
RANDARRAY 乱数配列 RAND を範囲にコピー
TEXTSPLIT 文字列分割 「区切り位置」機能 または LEFT/MID/RIGHT
🛒

この記事に関連するおすすめ商品

ロジクール ワイヤレスキーボード 静音 K295

約3,000〜4,500円

長時間のExcel作業に最適・静音設計



Amazonで探す

ロジクール 静音 ワイヤレスマウス M650

約3,500〜5,500円

セルの選択操作が快適・静音クリック



Amazonで探す

Microsoft 365 Personal 1年版 公式

約14,000円

Excel最新版の動的配列数式が常に使える公式ライセンス



Amazonで探す

※ 価格は変動する場合があります。最新価格はリンク先でご確認ください

FAQ(よくある質問)

Q1. ファイルを開いたら全部の数式が _xlfn. 付きでエラーになりました。データは消えていますか?

A. データそのものは無事です。_xlfn. プレフィックスは、Excelが「この関数は知らないが、文字列としては保持しておく」という意味で自動付与する識別子で、関数の中身や引数はそのまま保存されています。したがって、新しいExcel(Microsoft 365 や Excel 2021 以降)で同じファイルを開けば、_xlfn. は外れて元どおりに計算されます。古い環境で恒久的に使いたい場合のみ、本記事の代替関数への書き換えが必要になります。

Q2. Excel for the Web(ブラウザ版)なら無料で動的配列数式が使えますか?

A. はい、Microsoft アカウントがあれば無料の Excel for the Web で動的配列数式が利用できます。会社の買い切り版が古くて使えない場合の応急処置として有効です。ただし、ブラウザ版は機能制限があるので(マクロが使えないなど)、複雑な業務で常用するのは難しい場面もあります。

Q3. 動的配列数式を使ったブックを保存するときに警告が出ます。どう対応すべきですか?

A. 「このブックには互換性のない機能が含まれています」という警告は、配布先のExcelのバージョン次第で表示崩れが起きる可能性があることを伝えるものです。配布先がすべて Microsoft 365 や Excel 2021 以降であれば無視してかまいません。古いバージョンが混在する場合は、互換性チェックの結果を確認して、必要なら代替関数に置き換えるか、結果を値貼り付けで固定してから配布します。

Q4. 配列数式を Ctrl+Shift+Enter で確定するのと、通常のEnterで確定するのは何が違いますか?

A. 古いExcelでは、複数のセルにまたがる結果を返す数式(配列数式)は Ctrl+Shift+Enter で確定する必要があり、確定すると数式バーに { } の中括弧が自動で付きます。これは「この数式は配列として評価する」という指示です。新しいExcelでは動的配列数式が標準になったので、通常のEnterで確定するだけで自動的にスピルが起こり、中括弧は不要になりました。古いExcel向けに代替関数を書くときは、Ctrl+Shift+Enter での確定を忘れないようにしましょう。

Q5. INDEX+MATCH と VLOOKUP、どちらを覚えるべきですか?

A. 長く使えるのは INDEX+MATCH の組み合わせです。VLOOKUP は左から右への検索しかできず、列を挿入したときに参照がずれやすいという弱点があります。INDEX+MATCH なら左方向の検索もでき、列を挿入しても破綻しにくい構造です。新しいExcelで XLOOKUP に移行するときも、INDEX+MATCH の発想がそのまま応用できるため、まずはこちらを習得しておくと将来的にもムダになりません。

Q6. 古いExcelで作ったブックを新しいExcelで開くと #SPILL! エラーが出ます。原因は?

A. これは新旧の混在で起きる「逆方向」のトラブルです。古いExcelで配列数式として登録された数式が、新しいExcelではスピル動作として再解釈され、結果を展開しようとした先のセルに既にデータがある場合に #SPILL! となります。対処は、結果を展開する範囲を空けるか、エラーセルをクリックして表示される警告から「スピル範囲を空にする」を選ぶか、あるいは数式を @(暗黙のインターセクション演算子)付きで =@FUNC(...) のように書き換えて、従来の単一セル動作に戻す方法があります。

Q7. テンプレートとして配布したExcelファイルが、配布先で「保護ビュー」になり編集できないと言われました。動的配列数式と関係ありますか?

A. 直接の関係はありません。保護ビューはインターネット経由でダウンロードしたファイルを安全に開くための機能で、配布先のExcelの標準動作です。配布先には「ファイルを保存してから、ファイルのプロパティで『ブロックの解除』にチェックを入れて、編集を有効にしてもらう」と案内すれば解消します。動的配列数式の互換性問題とは別系統の話なので、両方のチェックを並行して進めるのが安全です。

Q8. 関数を書き換えるたびに数式が長くなって、メンテナンスが難しくなります。何かコツはありますか?

A. 配列数式を多用する場合、各セルの数式をそのまま長く書くより、補助列・補助シートを使って中間計算を分けるのがメンテナンス性に優れます。たとえば、まず別のシートで「条件に合う行のフラグ」をIF関数で立てておき、本シートではそのフラグを参照して INDEX+MATCH するように構造化します。一見遠回りですが、数式が分割されることで、誰がいつ見ても各セルの役割が分かりやすくなり、結果的にバグの原因を素早く特定できるようになります。

Q9. 動的配列数式を含むブックを CSV に書き出すと、結果はどうなりますか?

A. CSV はテキスト形式で値だけが保存されるため、動的配列数式の結果は「展開された後の値」として書き出されます。つまり、CSV経由で渡せば、相手のExcelのバージョンに関係なく結果は正しく見えます。ただし、CSVは1シート1ファイルで書式やセル結合などは保持されないため、レポートとしての見た目を維持したい場合は、新しいExcel側で値貼り付けしてから .xlsx として保存するのが望ましいです。

まとめ

動的配列数式が古いExcelで使えない問題は、本質的には「Microsoft 365 / Excel 2021 以降に追加された新しい計算エンジンが、買い切り型の古いバージョンには搭載されていない」というExcelの世代差から生まれるものです。_xlfn. プレフィックスや #NAME? エラーは、その世代差を Excel が機械的に処理した結果として表示される印に過ぎません。

本記事で繰り返し触れた「サーバー側」「ファイル側」「アプリ側」のレイヤー分け、つまり、計算エンジン自体が新世代のExcelにしかないという事実、ファイル形式は同じでも内部の関数識別が異なるという仕組み、そしてアプリの表示はあくまで信号でありエラーが出ても元の数式は壊れていないという理解、これらを押さえておくと、慌てず冷静に対処できます。

もし業務で頻繁にExcelファイルを共有する立場にあるなら、動的配列数式を使ったテンプレートを作る前に、配布先の主流バージョンを把握する習慣をつけましょう。社内のITシステム部門に「最も古いExcelのバージョンは何か」を尋ねれば、半分以上のケースで Excel 2019 や Microsoft 365 の混在状況がわかります。それに合わせて関数の選択を最初から行えば、後から大規模な書き換えを迫られることがなくなります。逆に自分が受け取る側であれば、送り主に「何のExcelで作ったか」を一言尋ねるだけでも、エラー時の切り分けが格段に早くなります。

対処の方向性は大きく3つです。一つ目は「環境を新しくする」、つまり Microsoft 365 への切り替えやブラウザ版 Excel の利用です。二つ目は「数式を古い記法に書き換える」で、INDEX+MATCH、SUMPRODUCT、配列数式(Ctrl+Shift+Enter)を組み合わせて新関数の機能を再現します。三つ目は「結果を値として固定する」で、計算結果さえ正しければよい配布シーンに最適です。状況や目的に応じて、これら3つを使い分けるのが最も現実的なアプローチです。

大切なのは、慌ててすべてを新関数で書き直すのではなく、自分が今どの環境で、誰に渡すブックを作っているのかを最初に整理することです。そのうえで、互換性チェックを活用しながら、必要な箇所だけを代替手段に置き換えていけば、新旧のExcelが混在する環境でも安定して運用できます。本記事の対処法を一つずつ試して、ご自身の業務に合った最適なバランスを見つけてみてください。

Check Also

ExcelのCOUNTIFSでOR条件を複数組み合わせる方法完全ガイド

【2026年最新版】ExcelのCOUNTIFSでOR条件を複数組み合わせる方法完全ガイド

【2026年最新版】Excel …