
Excelのブックです。普通のブックです。そう見えます。でも、このブックの中に、どんな名前が定義されているか分かりますか?ユーザー定義の表示形式は、いくつ登録されていますか?無駄な条件付き書式や入力規則は設定されていませんか?どのセルに、どんな数式や関数が使われていますか?ブックに記録される情報は、セルに入力した数値や文字列だけじゃありません。実に、さまざまな情報が記録されています。もちろん、必要であれば、名前でも入力規則でも何でも使ってください。でも、その結果、ブックのサイズが肥大化したり、Excelの動作が重たくなります。分かってやっているのならいいです。でも、ほとんどの人は、そのブックがどんな状態か。いわばブックの健康状態を気にしません。ワークシート診断ツールは、ブック内の情報を調べて、診断結果として提示します。
ブックのサイズが肥大化したり、動作が重たくなる程度なら、まだいいです。ブックの中には個人情報などが記録されることをご存じですか?このツールを開発したとき、実際に試してみました。東京都23区などでは、それぞれホームページを公開しています。たいていは人口統計などの資料をExcel形式のブックでダウンロードできるようになっていますよね。それをダウンロードし、診断ツールでチェックしたところ、PCへのログインユーザー名や、サーバーへのフルパスなどが記録されていたブックもありました。ハッキングとか情報漏洩というのは、こうしたミスがきっかけになります。あなたのブックとて例外ではありません。
ここをクリックするとダウンロードできます
ファイル名:chkBook_105.zip
サイズ:約144KB
「ワークシート診断ツール」で診断できるのは、次の項目です。一部をご紹介します。

ブック全体の情報を一覧表示します。ブックに含まれるワークシートの数や、非表示シート、保護されたシート、ロックされたセルの個数などの一覧リストです。それぞれの詳しい情報は、セルのリンクをクリックすることで詳細ページに移動できます。

シートに関する情報です。[結合セル]列は"結合されているセルの個数"ではなく"結合されている箇所の数"です。

記録されている"ユーザー定義書式"です。ちなみにこれ、VBAでは取得できません。

ユーザーが独自に作成したスタイルです。別ブックからシートごとコピーなどを繰り返すと、これが増殖する場合もあります。

項目から説明します。[定義された名前]列はその名のとおり定義されている名前です。[参照]列とは、その名前が参照しているセルまたは値を表します。一般的には"結合!前年売上データ_1"のようにセルやセル範囲を参照しますが、"曜日リスト"のように値も定義できます。「表示」列は、その名前が[名前の定義]ダイアログボックスに表示されるかどうかを表しています。"FALSE"は非表示の名前定義であり、ダイアログボックスに表示されません。そうした非表示の名前定義は、一般的にExcelが内部で使用するために定義されていることが多いです。今回の結果で[参照]列が"=#NAME?"になっているのは、すべてExcelによる内部定義です。おそらくこれらは、古いバージョンのExcelでブックを開いたときの下位互換性のために用意されていると思います。こうした内部で定義された名前として、ほかにも"_FilterDatabase"や"_Print_Area"や"Print_Titles"などが登録される場合もあります。[範囲]列は定義された名前のスコープ(有効範囲)です。ブックレベルの名前定義にはブック名が表示され、シートレベルの名前定義は使用できるシート名が表示されます。[エラー]列は表示される名前定義のうちエラーになっているものです。この"エラーになっている名前定義"は、[名前の定義]ダイアログボックスから削除可能です。

ブック内に入力されている全ての数式をリストアップします。エラーを返している数式は[エラー]列に"#DIV/0!"などと表示します。Ctrl + Shift + Enterで入力する古い配列数式は[配列数式]列に"配列"と表示します。配列数式の[数式]列に"{}"は表示されません。スピルを使った動的配列数式はチェックしていません。それよりも、古い配列数式をいまだに使っているのなら、新しいスピル形式に変えるべきですね。留意していただきたいのは124行目、[4月]シートセルI9の数式です。この数式は別ブックのセル範囲を参照しています。このとき、デスクトップなどに保存されたブックを参照していると、このように"外部参照"になり、数式内にはOneDriveのURLが記録されます。"***"部分にはOneDriveのユーザーIDが記録されます。怖いですから、できるだけ外部ブックへの参照はしない方が良いでしょう。

ブック内で何の関数が使われているかを、シート別に表示します。難しい関数を多く使っていると、引き継ぎで困るかもしれません。10行目の"SORTBY"ですが、これはおそらく数式内で"セル内改行"されていると思われます。詳しくは[数式]項目を見れば分かります。関数名抽出を高速に行うため、このような表示にしています。まあ、手抜きです。

数式がアクティブシート外を参照しているかをチェックします。外部ブックを参照していると、ブックのフルパスを表示します。

設定されている条件付き書式の一覧です。設定されている適用範囲は[アドレス]列に表示されます。ここは要チェックですね。

設定されている入力規則の一覧です。

存在するテーブルの一覧です。クエリの結果であるテーブルはクエリ名を表示します。

存在するピボットテーブルの一覧です。Power Queryから取得したピボットテーブルは、上記のようにクエリ名も表示されます。

シート上に配置したオブジェクトの一覧です。ワークシート上にある、いわゆる"埋め込みグラフ"もVBA的にはオブジェクトです。登録しているマクロなども表示します。[親オブジェクト]というのは、正直よく分かりません。VBAの仕組み的にそうなっていたので抽出しています。たぶんですけど、いくつかのオブジェクトをグループ化して、そうしたパーツをさらにグループ化して、みたいな複雑なケースかと思いますけど、それほど詳しく検証していません。Excelでやることじゃないです。あと、[種類]列の"OLE コントロール オブジェクト"と表示されるのは、[開発]タブ[挿入]の「ActiveXコントロール」です。Microsoftは、ActiveXコントロールを使わないようにと注意喚起していますから、これがあったら「フォーム」に変更しましょう。セキュリティ的に危険です。

Excelには昔から"クエリ"という機能があるのですが、最近ではもっぱら"Power Query"ですね。なので、それを中心に抽出しています。M言語も表示します。これ、かなり喜ぶ人がいるのでは?実は"クエリ"って、けっこう奥が深くて、やろうと思えばかなり複雑なことも可能です。すみませんが、全てのあらゆるケースには対応していません...と思います。

このへんは難しいです。そもそも"クエリ"と"データ接続"って何が違うの?って話なんですが、難しい話は割愛しますけどExcel的には別物として扱っています。とりあえず、こんな感じに抽出します。

セルに設定しているハイパーリンクです。[リンク先]列にフルパスなどが表示されるのは、いわゆる"外部ファイルへのリンク"です。

プロシージャの一覧などを表示します。[API]列はAPIの宣言をしているかどうか。[注意][警告][互換性]は私の独断です。内容は[ログ]シートをご覧ください。宣言セクションに"Option Explicit"があると、プロシージャがなくても"コードがある"と認識されます。
重要:
VBAの中を診断するには、[Excelのオプション]-[トラストセンター]-[トラストセンターの設定]をクリックして表示される[マクロの設定]で[VBA プロジェクト オブジェクト モデルへのアクセスを信頼する]チェックボックスがオンになっている必要があります。これは、ブックの設定ではなくExcel全般の設定です。診断ツールを実行するPCのExcelでオンにしてください。このチェックボックスをオンにすると、VBAからVBEにアクセスが可能になります。心配な方は、診断ツールを実行するときだけオンにして、終わったらオフにすれば良いでしょう。



診断時のログです。見てお分かりのように、ほとんどは1分程度で完了します。
実はこの「ワークシート診断ツール」ですが、開発のきっかけは"マイクロソフトからの依頼"でした。Excel 2007が発売されて数年が経った頃、何かの用事でマイクロソフトと打ち合わせをしていたとき、Excelの担当者から「2003で作ったブックを2007で開くと、描画がズレるみたいな問い合わせが来てるんですよ。あと、機能的にも大きく変わったじゃないですか。条件付き書式とか。なので、2003までで作ったブックの内容を調べて、2007以降で開いても問題ないかどうか確認するツールが欲しいんですけど、田中さん作ってくれません?」みたいな。簡単に言うわ~w と思いましたけど、面白そうだったので「そうですね、作りましょうか」という感じでスタートしました。最初は画面描画や、Excel 2007の新機能だけ調べるつもりだったのですが、作っていくうちに「あれも欲しいな、これも欲しいな」と確認項目が増えていき、そして現在に至ると。
そんな経緯で、今からおよそ10数年前に作った「ワークシート診断ツール」ですが、最近のAIブームにおいて、改めて脚光を浴びています。大きな理由は次の二つです。
開発してから十数年経ちますが、今や「ワークシート診断ツール」は、単にブック内を調べるツールではなく、実務の現場とAIをつなぐ架け橋になったわけですね。いやぁ~ようやく時代が私に追いついたみたいなw
ここをクリックするとダウンロードできます
ファイル名:chkBook_105.zip
サイズ:約144KB