Excel VBAによるPDF出力で取り消し線が付く原因と具体的対処法

最近のExcelアップデートで起こる「PDFにすると取り消し線が入ってしまう」現象に悩んでいませんか。せっかくVBAで効率よく処理を自動化しようとしても、仕上がったPDFに思わぬトラブルが出るととても困りますよね。ここでは原因や対策、具体的なコード例まで分かりやすく解説していきます。

Excelアップデート後に突如現れた「取り消し線」問題とは

Excelの最新バージョンを利用している環境で、VBAを使ったPDF出力時のみテキストに取り消し線が表示されてしまうという問題が一部で報告されています。シート上の見た目には何も問題がないにもかかわらず、いざPDF化して確認するとテキスト全体に斜めまたは水平のラインが入っており、内容が読みにくくなるという厄介な事象です。

この取り消し線は印刷プレビューや「ファイル > 印刷」から直接PDFを作成した場合には発生せず、VBAなどで自動生成したPDFでのみ現れることが多いと言われています。初めてこの現象が出ると「フォント設定が壊れたのでは?」「プリンタの設定が悪いのかな?」と戸惑うかもしれませんが、実は最新版のExcelに搭載された「Format Stale Values」機能が大きく関係しています。

シート上では見えないのになぜPDF化すると取り消し線が?

通常、シートを開いているときには取り消し線が表示されず、あたかも問題がないように見えます。ところが、実際にPDF化を実行すると突如として全テキストや一部の数値に取り消し線が入ってしまいます。これは、Excelがセルの値を「古い値」=“Stale Value”と判定したときに、自動的に取り消し線を付与する仕組みが原因とされています。

「Format Stale Values」とは何か

「Format Stale Values」は、Excelが計算結果を最新の状態に更新していないとき、つまり再計算が必要にもかかわらず古い状態のデータがシートに残っている場合に、その古いセル内容を視覚的に判別しやすくするための新機能です。古い値が含まれているセルをハイライトしたり、ストライクスルー(取り消し線)を入れたりといった設定が可能になっています。
この機能自体は大規模なシートや複雑な数式を扱うとき、どこが再計算漏れになっているのかを把握するのに便利ですが、PDF出力にまで反映されてしまうのは想定外だと感じる方も多いでしょう。

問題の原因を探る

取り消し線がPDFでだけ表示される最大の原因は、シートが「完全に再計算されていない」とExcelが判断していることにあります。具体的には次のようなケースが想定されます。

  1. 自動計算がオフになっている
    ワークブックの計算方法が手動になっている場合、ユーザーが再計算を行わない限りセルの値が古いまま残ります。
  2. 複数のシートや外部リンクを含むワークブックを開いている
    他のシートやブックから値を参照しているセルで、更新されるべきデータが古い状態のままになっている可能性があります。
  3. VBAによる計算制御の不備
    マクロ内で計算を強制するコードを書いていない、あるいは再計算が終わる前にPDF化の処理が走ってしまうなどの問題で、Excelが計算完了状態と認識していないことが考えられます。

なぜExcelの計算が「古い値」と判定されるのか

Excelには「計算モード」が存在し、通常は「自動計算」に設定されているため、数式を編集すればすぐに最新の結果がセルに反映されます。しかし、何らかの理由で計算モードが手動に変更されていたり、アドインやマクロによって計算タイミングが制御されていると、結果的にExcelが「古い値が残っている」と判断しやすくなります。特に外部参照を含むブックを大量に扱っている場合や、大規模な数式の再計算に時間がかかる環境では起こりがちな問題です。

具体的な解決策

ここからは実際に取り消し線が表示されないようにするための具体的な対処法を紹介します。どの方法が最適かは環境や要件によって異なりますが、まずは以下の2つの解決策を試してみると良いでしょう。

解決策1: ワークブックを再計算してからPDF出力

最も手軽な方法は、Excel上の計算が完全に更新された状態を作ってからPDF化を実行することです。手動操作の場合は「F9」キーを押して再計算を実行し、その後に「ファイル > 印刷」を選択しPDF化すれば取り消し線は付かないことが多いです。VBAで処理する場合も同様に、PDF出力の前に再計算を明示的に行うコードを入れましょう。

VBAコード例

以下はサンプルのマクロコードです。PDF出力前に、WorkbookやWorksheetを再計算するためのコードを加えています。

Sub ExportToPDF()
    ' ワークブック全体を再計算
    Application.CalculateFull

    ' 必要に応じて、シート毎の再計算も実行可能
    ' Worksheets("Sheet1").Calculate

    ' PDFとして保存(例: アクティブシートをPDF化)
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:="C:\Test\Output.pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End Sub

このコードで「Application.CalculateFull」を呼び出すことで、全シート・全ブックレベルの計算を強制的に実行し、すべてのセルを最新の状態にします。計算が完了したら、その直後にPDF出力すれば、取り消し線が表示される可能性を大幅に減らせます。

解決策2: 「Format Stale Values」を無効化する

もし、再計算を徹底するのが難しい環境や、大量のブックを開いていて都度計算をかけると処理が重くなる場合は、Excelの「Format Stale Values」機能そのものを無効化する手もあります。ただし、本来は古い値を見分けるための便利な機能でもあるため、オフにすると見落としが増えるリスクもあります。

手動での設定方法

  1. Excelを開き、「ファイル > オプション」を選択します。
  2. 左メニューの「詳細設定」を開き、スクロールしていくと「Formula」や「Calculation」関連の設定項目があります。
  3. 「Format Stale Values」または似た名称のチェックボックスをオフにします。
  4. 設定を保存してExcelを再起動すると反映されます。

VBAでの設定方法

現時点では、Excelオプションにある「Format Stale Values」をVBA上で直接制御するための専用プロパティは公式ドキュメントに明示されていません。しかし、将来的にOfficeのオブジェクトモデルが更新されれば、以下のように制御できるプロパティが提供されるかもしれません。

Sub DisableStaleValues()
    ' 仮例: FormatStaleValues プロパティが存在すると仮定した場合
    ' Application.FormatStaleValues = False
End Sub

実際には、レジストリ編集やグループポリシーなどで制御する方法もあるかもしれませんが、現時点では手動設定が主な方法とされています。

「Format Stale Values」機能のメリットとデメリット

「Format Stale Values」を完全にオフにする前に、機能の長所と短所を理解しておきましょう。
以下に簡単な表を用いて整理しました。

メリットデメリット
古い値を視覚的に区別できるため、大規模なシートの管理や監査に役立つ。PDF出力時に意図せず取り消し線が付くなどの不具合が発生する。
計算ミスや更新漏れを早期に発見しやすくなる。一括でオフにすると、本来便利な機能が使えなくなる。
共同作業時、どのセルが再計算必要かをメンバー間で共有しやすい。大きなファイルではExcelの動作が重くなりやすいとの報告もある。

本番環境での運用時には、これらメリットとデメリットのバランスを考慮して機能のオン・オフを決めることが重要です。

その他の対処方法や注意点

ここまでに紹介した再計算と機能オフの方法のほかにも、いくつか対処できる余地があります。

  • 一時的にプリンタドライバを変える
    稀にPDF化のプロセス自体が原因の場合もあります。Microsoft Print to PDFやAdobe PDFなど、複数の仮想プリンタを試すことで問題が再現しなくなるケースがあります。
  • レイアウトの問題を疑う
    シートの改ページ設定や余白、フォントの互換性が原因となることも考えられます。別のフォントに変更したり、オフィス共通フォントを利用することで取り消し線が出なくなる例も報告されています。
  • Officeの修復を試してみる
    Officeのクイック修復またはオンライン修復を試すと問題が解決される可能性があります。ファイルや設定が破損している場合には修復プロセスが有効です。
  • Excelのバージョンを確認する
    現時点でMicrosoft 365の特定ビルド(例: 2409 Build 16.0.18025.20160 64-bit など)で多く報告されています。以前のバージョン(例: Version 2402 Build 16.0.17328.20550)では問題がないこともあるため、バージョンを戻すかアップデートを待つなどの検討が必要です。
  • 共同作業環境での整合性
    複数PCで共同作業する際には、Excelのバージョンや「Format Stale Values」の設定が異なると予期せぬトラブルが起きやすいです。同一バージョン・同一設定を揃えておくのが理想です。

まとめ

Excelの「Format Stale Values」は、本来は大規模データや複雑な数式を管理する上で便利な機能ですが、PDF出力時に意図せず取り消し線が付与されてしまうトラブルを引き起こすことがあります。根本的な原因は、Excelがワークブックの値を最新状態と判断していないことにあるため、再計算を徹底するだけでも多くのケースでは解決します。どうしても再計算が難しい場合や性能面で課題がある場合は、「Format Stale Values」を無効にするなどの方法を検討しましょう。

実際の運用では、手動でPDFを作る際には問題が起きないのにVBAを介したPDF生成でのみ不具合が出る場合が多いでしょう。そんなときには、まず再計算コードを挿入してみる、機能をオフにしてみる、異なる仮想プリンタを使ってみるなど、一つずつ対処を試すことが重要です。Excelバージョンの違いや、外部ファイルからの参照、マクロの記述方法など複数の要素が絡むこともあるので、丁寧に原因を切り分けながら最善策を見つけてみてください。

コメント

コメントする