EXCELが突然エラーを吐いてしまいました
あるお客様への提案をするのに調査をしていたところ、エラーが出てしまいました
操作をするたびに「いくつかの数式の計算中にリソース不足になりました。 そのため、これらの数式の値が求められません。」と表示されます
そのまま作業は続けられるのですが、リソース不足になるほど数式も入っておらず、ファイルサイズも1MBにも満たない小さいものでした
念のためリソースモニタをチェックしたところ
メモリもCPUもかなり余裕のある状態です
MSコミュニティなどでも調べたのですが、これといった解決策がない状況。。。
サンプルでもらったEXCELファイルがxls形式と古いタイプだったので、それを現行のxlsxに変更したのが原因なのかと思い、いろいろ試したのですがエラーは表示されてしまいます
サンプルファイルに数式が入っていて、どこから値を参照しているのかを「参照元のトレース」を使って調査している際に、特殊な方法ですが一括で参照元のトレースで表示される矢印を出したことが原因となっていたようです
OFFICE365やOFFICE2019あたりから使える機能を使っていますので、参考までに載せておきますね
参照元のトレースを一括で表示させる
どこでもよいので空白セルに数式「=」を入力し行列ルーラーの左上隅をクリックします。セルには「=1:1048576」と入りますので確定します
この時点で「いくつかの数式の計算中にリソース不足になりました。 そのため、これらの数式の値が求められません。」が表示されますが、そのまま無視します
次にこのセルにカーソルを移動し、[数式]→[参照元のトレース」を2回クリック(ダブルクリックではありません)するとシート上のすべての数式がトレースされます
原因はスピルだった
今回リソース不足のエラーが出た原因はハードウェアのスペック不足ではなく、EXCEL側の問題でした。「=1:1048576」の数式ですが「スピル」と呼ばれる新機能となっていて、指定した範囲を別の場所に表示させたり、まとめて計算させる場合に便利な機能です
OFFICE365、OFFICE2019で実装されている機能ですので古いOFFICEでは使えません
見積書などを作るときに、数式を欄外に入れて、指定した部分だけを印刷するという面倒な処理がありますよね。これを使うと、指定した場所だけを別のシートに表示することができるので、範囲指定は要りません
このシートのA1:F17だけを印刷したい、表示したい場合、新たなシートを作ってリンク貼り付けと方法がありますが、大量の数式が入ってくるので修正も大変です
印刷用シートを1つ追加し、任意の場所に「=シート名!セルの範囲」を記入し確定すると、範囲内の文字、数字がそのまま表示されます。書式は引っ張ってこれないようです
一括トレース元参照はこのスピルの参照をシート全エリア1行目~1048576行目にしたため、何かの作業をするたびにセルの自動計算を全エリアに対して行ってしまうのでリソース不足になったようです
トレース完了後にこの数式は削除してしまえば、エラーは解消されます
スピルの本来の使い方
スピルの機能は配列関数と似ていていますが、同じ数式をまとめて1つのセルに書いてしまって簡略化させるものです
表で同じ計算式がいくつも入っている状態があります
D3にはB3*C3の結果を表示させていますが、下のセルには同じように数式をコピーしていくのが今までのやり方です
スピルを使うと、I3には配列G3:G9配列H3:H9と値A群、値B群という塊で指定する形になります。このセルに数式を入力すると、下のセルはなにも入れていないのにそれぞれの値A値Bの結果が表示されます
実はこの機能に似ている関数がGoogleスプレッドシートには古くから実装されています
「ARRAYFORMULA」という関数になりますので、スプレッドシートで同じことをやる場合は「=ARRAYFORMULA(G3:G9*H3:H9)」のような記載になります
後発のスピルは関数が要らないので使い方はかなり便利ですよね
ちなみに、指定した範囲を別のシートに表示させるのをスプレッドシートで行う場合は「IMPORTRANGE」という関数があり「=IMPORTRANGE("Sheet1!A2:F17"、"A1:F17")」のような記載になります
古いソフトを使い続けるといろいろ大変になる
そもそも、なぜこのエラーが発生したのかというところですが、そのお客様が見積作成用に使っていたソフトは「Microsoft Works」という製品で、MS OFFICEの出る前のオフィススイートとして使われていました
2009年には販売終了され、後継として無料版のOffice Starter 2010がリリースされましたが、それも2020年にはサポート終了となり、現在はダウンロードもできない状態です
EXCEL同様、表計算ができるツールなので、OFFICE365のEXCELで開こうしたところ、この拡張子が見当たらず、たまたまWorksが入っているPCにあったEXCEL2000で開けたので、一旦xls形式に変換して、xlsxに再変換する作業をしていました
このWorksですが、サポート終了のOffice Starter 2010を2020年までにインストールしていたPCでは、そのままWin11にアップグレードすれば動くという情報もありましたが、2023年の時点ではソフト自体がダウンロードできないため使えませんでした
Worksが使えるPCはWin7で、買い換えてしまうとWorkは動かない。仕方なくそのまま残している状態でしたが、いよいよPCが古すぎて動作も悪くなってきたので移植を検討していたようです
移植か乗り換えか
中身を調査したところ、顧客管理や見積もりはWorksを使っていたものの、データベースとの連携もなく表計算として単体で利用だったので、移植自体は可能です
EXCELやGoogleスプレッドシートに移植すれば、体裁だけ整えればそのまま使えます
クラウドサービスが普及しているなか、もっと便利な機能を装備したサービスも多く存在しているので乗り換えたほうが良いという提案をITコンサルならするでしょう
しかしながら、利用者の長年使いなれたやり方、年齢的にも新しいシステムを覚える柔軟性などを考慮すると、単純に乗り換えましょうとは言えません
操作性はほとんど変えずに自動化できるところは改良して、まずは移植し、他のシステムとの連携などを考えながらクラウドサービスへの乗り換えをお勧めするのが負荷をかけずにやんわりと変更するやり方なのかなと思いました
ITのお悩み解決します
KOAMOOTではITに関するお悩みごとを解決します。社内のIT管理やトラブル対応、新規システム導入の支援、コストを抑えた仕組みの構築など、IT全般のアドバイスをいたします
スポットIT相談受付中
3,000円 / 1時間
(Web会議、チャット、メールにて)