値を変えても式の結果が変わらないときは、計算方法が手動になっている。厄介なのは、この設定がブック1つのものではなく、開いているExcel全体に効くことだ。
手動で保存したブックを先に開くと、そのあと開いた自動のブックまで手動になった。自動で保存したはずのブックで値を変えても、式が動かない。
以下の結果は、Microsoft 365のExcel(バージョン16)で実際に作って確かめたものだ。確認日は2026年9月22日。Windows 11で確かめている。
手動計算は、開いたExcel全体に効く
2つのブックを作った。片方は計算方法を手動にして保存し、もう片方は自動のまま保存する。自動のほうにはA1を10倍する式が入っている。
新しいExcelで手動のブックを先に開くと、設定は手動になった。そのまま自動のブックを開いても、手動のままだった。
その状態で自動のブックのA1を1から7に変えると、式のセルは10のまま動かない。本当は70になるはずだ。
設定はブックごとではなく、Excelの1つの窓の中で共通になる。だから朝いちばんに開いたブックが手動だと、その日に開く全部のブックが手動で動く。自分が作ったブックだけ見ていると原因が見つからない。
直し方は、数式タブの計算方法の設定で自動にする。そのあと、手動で保存されていたブックを自動にし直して保存する。しないと次に開いたときに同じことが起きる。
F9を押せばその場では計算されるが、設定は手動のままだ。押して直ったように見えても、次に値を変えるとまた止まる。
F9とShift+F9は、動く範囲が違う
手動のまま計算し直す方法は3つあって、届く範囲が違う。2枚のシートに20行ずつ式を置いて数えた。
シートだけを計算すると、開いていたシート1の20行だけが新しい値になり、シート2は0行のままだった。Shift+F9にあたる。
F9にあたる計算をすると、シート1もシート2も20行とも新しくなった。ブックの中で値が変わったところを全部見る。
さらに強制的に全部を計算し直す方法もある。今回は同じ20行と20行で、結果は変わらなかった。式を書き換えていないので、計算し直す必要のあるセルが増えなかったためだ。
ふだんはF9でよい。どうしても合わないときだけ、全部強制に計算する方法を使う。そのかわり時間がかかる。
文字列の列に入れた式は、表示形式を戻しても直らない
表示形式を文字列にした列に、100行ぶんの式を入れた。
100行とも文字列のまま残った。セルには=$A1*10という文字が出る。計算はされない。
その列の表示形式を標準に戻して計算し直しても、100行とも文字列のままだった。表示形式は次に入力するときの扱いを決めるだけで、すでに入っている中身は変えない。
区切り位置をかけると0行になった。B列を選んで、データタブの区切り位置を開き、そのまま完了を押す。100行とも数値になり、B1に10が出た。
1つか2つなら、そのセルでF2を押してEnterでも直る。100行あるなら区切り位置のほうが早い。日付が文字列になるときと同じ直し方で、まとめて型を入れ直す。
先頭にアポストロフィが付いていると文字になる
もう1つ、見た目で区別しにくいものがある。
式の前にアポストロフィを付けて入れると、そのセルは文字列になる。数式バーには=$A$1*2と出て、セルにも同じものが出る。アポストロフィは画面に出ない。
他所から貼ったデータや、テキストから取り込んだ表で混ざる。表示形式は標準のままなので、書式を見ても分からない。
見分けるには、そのセルを選んでISNUMBERやISTEXTで型を見る。文字列と返れば、アポストロフィか文字列の書式のどちらかだ。どちらも区切り位置で直る。
循環参照は0を返す。反復計算をONにすると意味のない数が入る
A2に=$A$1+$A$3、A3に=$A$2+1と入れた。互いに参照している。
計算するとA2が10、A3が0になった。Excelは循環しているセルを0として扱い、そこで止める。数式タブのエラーチェックから循環参照を開くと、該当するセルの番地が出る。確かめるとA2と出た。
反復計算をONにして計算し直すと、A2が4399、A3が4400になった。この数に意味はない。繰り返しの回数を100回に指定したので、そこまで足し続けた途中の数が残っただけだ。
反復計算は、答えが1つに決まる式のために使うものだ。利息を含む計算のように、繰り返すと値が収束するものに使う。今回のように足し続ける式では、回数を変えるたびに答えが変わる。
循環参照があるのに反復計算がONだと、エラーも警告も出ない。数字が入っているので気づかない。このほうが0が出るより危ない。
数式の表示がONだと、シート全体が式のまま見える
セルに式が文字で見えているとき、原因は2つに分かれる。
そのセルだけなら文字列の書式かアポストロフィだ。シート全体で式が見えているなら、数式の表示がONになっている。
確かめると、ふつうのときはB1に6と出て、数式の表示をONにすると=$A$1*2と出た。値は変わっていない。見せ方が変わっただけだ。
CtrlキーとShiftキーと@を一緒に押すと切り替わる。意図せず押してしまうことがある。数式タブの数式の表示を押すと戻る。
シート全体か1つのセルか。ここを最初に見ると、どちらの原因かがすぐ分かる。
設定を読むスクリプト
計算方法と反復計算の設定は、ファイルの中に書かれている。開かずに読むスクリプトを置いた。
python calc-check.py ブック.xlsx
わざと設定を崩した3枚のブックにかけると、こう出る。
ブック全体
計算方法 手動
開いたときに全部計算し直す する
反復計算 ON
日付を使う表 数式 100 / 文字列で入った数式らしきもの 0
文字列になった表 数式 0 / 文字列で入った数式らしきもの 30
明細 数式 400 / 文字列で入った数式らしきもの 0
再計算のたびに動く関数
OFFSET 200 か所
TODAY 50 か所
NOW 50 か所
見るところ
計算方法が手動になっている。開いたExcel全体がこの設定になる
反復計算がONになっている。循環参照があっても止まらず、途中の数が入る
文字列になった表 に文字列のまま入った数式が 30 個ある
再計算のたびに動く関数が 300 か所ある。入力のたびに全部計算し直す
文字列で入った数式らしきものは、文字として保存されていて先頭がイコールのセルを数えている。30個と出た数は、さっき作った30行と合う。
再計算のたびに動く関数も数えている。TODAY、NOW、RAND、OFFSET、INDIRECTなどは、どこかのセルを1つ触るだけで全部が計算し直される。数が多いとブックが重くなる。
受け取ったブックにかけると、手動のまま渡されていないかが分かる。開く前に分かるのが利点で、開いてしまうとその時点で自分のExcelも手動になる。
ブックが重いときに中を数えるスクリプトと組み合わせると、配る前の点検が一通り終わる。
見る順番
最初に、式が文字で見えているかを見る。見えているならシート全体か1つのセルかを分ける。全体なら数式の表示、1つなら文字列の書式かアポストロフィだ。
値は出ているのに古いままなら、計算方法が手動になっている。数式タブの計算方法の設定を見る。
0が出ていて理由が分からないなら、循環参照を疑う。数式タブのエラーチェックから循環参照を開く。
どれにも当たらないなら、参照先が別のブックになっていないかを見る。閉じたブックを参照している式は、開くまで前の値のままになる。ここは確かめていない。
印刷の設定を読むスクリプトと同じで、配る前に機械で一通り見る形にしておくと、受け取った人に聞かれてから探す手間が減る。
確かめていないこと
別のブックを参照している式の動きは確かめていない。参照先を閉じたままだと値が更新されない、という話があるが試していない。
アドインやマクロが計算方法を変える場合も確認していない。開いた瞬間に手動になるアドインがあるという話を見かけるが、再現していない。
Web版のExcelとGoogleスプレッドシートでも試していない。計算方法の持ち方が違う。



