ある日突然、特定のPCだけで Excel の ActiveX コントロールが「Class Not Registered」になり、regsvr32 では登録できるのに登録解除ができない……。そんな“1台だけおかしい”MsControl.ocx / MsScript.ocx トラブルを、原因候補ごとに整理しながら、現場で使える具体的な切り分け手順と対処策をまとめます。
MsControl.ocx / MsScript.ocx で「Class Not Registered」が発生する状況
今回の想定シナリオは次のようなものです。
- Excel VBA で ActiveX(MsControl.ocx / MsScript.ocx)を利用している
- ある PC だけで Excel 起動時やコントロール読み込み時に「Class Not Registered」エラーが出る
- regsvr32 で OCX の登録(/i なし)は成功するが、/u で登録解除ができない
- 他の PC では同じブックが正常に動作する
このような “1台だけおかしい” パターンでは、以下の要因が絡んでいることが多いです。
| 要因カテゴリ | 概要 |
|---|---|
| ビット数の不一致 | Excel(ホスト)と MsScript.ocx(コントロール)の 32/64bit が合っていない |
| regsvr32 の使い分け | 32bit / 64bit それぞれ別の regsvr32 を誤って使用している |
| レジストリの食い違い | CLSID や ProgID の登録が壊れている or 別ファイルを指している |
| システムファイル破損 | OCX 本体や依存 DLL が壊れている/OS まわりの不整合 |
| 権限・セキュリティ | ファイル権限やグループポリシー、Defender / EDR によるブロック |
| レガシー化 | MsScript.ocx がそもそも 32bit 専用で、64bit Excel から直接は使えない |
以下では、再現が 1 台のみという条件で、現場で実行しやすい順番での切り分け手順と対処策を解説します。
「Class Not Registered」の意味とよくあるパターン
「Class Not Registered(クラスが登録されていません)」は COM / ActiveX の基本エラーで、ざっくり言うと、
- Excel(VBA)が指定した ProgID / CLSID に対応する COM クラスをレジストリから見つけられない
- あるいは見つかったが、実際にロードできる DLL/OCX が存在しない or ビット数が合わない
MsScript.ocx / MsControl.ocx の場合、特に多いのは次の 2 パターンです。
| パターン | 典型的な状況 | 代表的なエラー |
|---|---|---|
| ビット数不一致 | 64bit Excel から 32bit 専用 MsScript.ocx を呼ぼうとしている | 「Class Not Registered」0x80040154 / 0x80004005 など |
| レジストリ不整合 | 別の MsScript.ocx を指している、登録解除しようとしているファイルが違う | regsvr32 /u で「モジュールが見つかりません」等 |
それでは、実際に何から確認していくべきかを見ていきましょう。
最優先で確認すべきポイント
Excel と MsScript.ocx のビット数をそろえる
MsScript.ocx は 32 ビット専用のコンポーネントです。つまり、
- 32bit Excel や 32bit の実行ホスト(VB6 アプリ、WSH 等)からは利用可能
- 64bit Excel から直接ロードすることはできない
そのため、以下の組み合わせでは確実に問題が起こります。
| ホスト(Excelなど) | MsScript.ocx | 結果 |
|---|---|---|
| 32bit Excel | 32bit MsScript.ocx | 原則として利用可能(他要因でエラーの可能性はあり) |
| 64bit Excel | 32bit MsScript.ocx | 「Class Not Registered」ほぼ確定 |
まずは、問題が出ている PC の Excel のビット数を確認します。
- Excel の [アカウント] → [Excel のバージョン情報] から「32 ビット」か「64 ビット」かを確認
- 正常な PC とビット数が違っていないかを確認
64bit Excel しか入っていない PCで MsScript.ocx をどうしても使いたい場合、現実的には次のいずれかになります。
- Office をアンインストールし、32bit 版 Office / Excel を再インストールする
- MsScript.ocx をやめ、.NET クラスライブラリや Office アドインなどに置き換える(後述)
まずは 32bit Excel 環境で再現するかを確認することで、ビット数不一致が本当に原因なのかを切り分けることができます。
正しい regsvr32 を使って「同じファイル」を登録/解除する
64bit Windows には、実は regsvr32.exe が 2 つ存在します。
| 用途 | パス | 対象 |
|---|---|---|
| 64bit 用 regsvr32 | C:\Windows\System32\regsvr32.exe | 64bit COM/ActiveX の登録・解除 |
| 32bit 用 regsvr32 | C:\Windows\SysWOW64\regsvr32.exe | 32bit COM/ActiveX(MsScript.ocx など)の登録・解除 |
ここを間違えると、
regsvr32 "C:\Windows\System32\msscript.ocx"と登録したつもりが、実際には別パスを指している- /u では別のファイルを指定しているため、「モジュールが見つかりません」などのエラーになる
管理者権限の PowerShell または CMD で、次のように実行してみてください。
rem まず MsScript.ocx の実体がどこにあるかを特定
cd C:\Windows
dir /b /s msscript.ocx
rem 見つかったパスを使って、両方の regsvr32 で解除を試す
C:\Windows\System32\regsvr32.exe /u "C:\Windows\System32\msscript.ocx"
C:\Windows\SysWOW64\regsvr32.exe /u "C:\Windows\SysWOW64\msscript.ocx"
rem その後、32bit 用として再登録
C:\Windows\SysWOW64\regsvr32.exe "C:\Windows\SysWOW64\msscript.ocx"
ポイントは、
- 同じパスの MsScript.ocx について /u → 登録の順で実行する
- 同名ファイルが複数ある場合、正常 PC の状態と照らし合わせて「本来どのパスを使うべきか」を決める
「登録はできるのに解除だけ失敗する」場合、
- 解除時に使っている regsvr32 のビット数が違う
- 解除時のパスが誤っている(別コピーを指定している)
- 壊れたファイルで DllUnregisterServer が呼べない状態
などが典型です。まずは パスと regsvr32 の組み合わせをきちんと揃えることから始めましょう。
SFC / DISM で OS 側の破損を修復する
原因がはっきりしない「Class Not Registered」や 0x80004005 のような汎用エラーの場合、システムファイルの破損も疑うべきです。Microsoft が推奨する基本的な修復手順は以下の 2 コマンドです。
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
実行手順の一例:
- 管理者として PowerShell または CMD を起動
sfc /scannowを実行し、100% 完了するまで待つ- 再起動
- 再度管理者で
DISM /Online /Cleanup-Image /RestoreHealthを実行 - 再起動後、Excel で再現確認
これで OS 側の DLL やコンポーネントの破損が修復され、ActiveX の読み込みが正常に戻るケースもあります。
再現が 1 台だけのときに見るべき差分ポイント
ここからは、他の PC では再現しないときに確認したい“差分”です。正常な PC と比べながら見ていくと効率的です。
OCX ファイルの権限・セキュリティ設定
同じパスに MsScript.ocx / MsControl.ocx が存在していても、NTFS 権限が壊れていると Excel が読み込めない場合があります。
- 該当ファイルを右クリック → [プロパティ] → [セキュリティ] タブを開く
- Users / Administrators / SYSTEM / TrustedInstaller などに「読み取り」「実行」の権限があるか確認
- 正常な PC の権限と比較し、明らかに異なっていれば icacls などで初期化を検討
企業環境では、ウイルス対策ソフトや EDR が自動的に権限や所有者を変更しているケースもあるため、ログを確認しつつセキュリティ担当と連携するのが安全です。
レジストリ登録の正当性(正常 PC からのコピーが近道)
COM クラスの登録はレジストリに保存されます。MsScript.ocx / MsControl.ocx では、だいたい次のようなキーが存在します。
HKEY_CLASSES_ROOT\MsScriptControl.ScriptControl(ProgID 例)HKEY_CLASSES_ROOT\CLSID\{…}(CLSID)
これらが壊れていると、
- Excel からは「Class Not Registered」
- regsvr32 /u では別の CLSID を参照している
といったギャップが生じます。手早い修復方法は、
- 正常な PC で該当キーを .reg ファイルとしてエクスポート
- 問題 PC でレジストリをバックアップしたうえで、エクスポートした .reg をインポート
という手順です。レジストリエディタの操作はリスクもあるため、必ずバックアップを取り、社内ルールに従って実施してください。
依存コンポーネントの不足(Visual C++ ランタイムなど)
ActiveX コントロールは、内部的に Visual C++ Runtime や特定の DLL に依存している場合があります。特に MsScript.ocx のような古いコンポーネントは、
- Visual C++ 2005 / 2008 / 2010 などの x86 ランタイム
- .NET Framework(VBA から直接ではなく周辺ツールで)
が不足していると、regsvr32 自体は成功しても実行時にロードに失敗することがあります。
正常な PCと比較しながら、以下の点を確認します。
- 「アプリと機能」(もしくは「プログラムと機能」)の一覧にある Visual C++ ○○ Redistributable(x86) の有無
- 無ければ Microsoft 公式から同じバージョンをダウンロードしてインストール
- 可能であれば 2005~2015-2022 までの x86 ランタイム一式を入れ直す
インストール後は再起動し、再度 Excel での再現確認を行います。
セキュリティ製品・グループポリシー・Kill Bit
特に企業環境では、ActiveX がセキュリティ的に嫌われやすく、
- ウイルス対策ソフト / EDR が MsScript.ocx の読み込みをブロックしている
- グループポリシーで特定の ActiveX が「禁止」になっている
- Internet Explorer 互換の「ActiveX Kill Bit」が立てられている
などにより、正しく登録されていても実行時に弾かれるケースがあります。
チェックのポイント:
- Windows のイベントビューアーで、セキュリティログやアプリケーションログに関連エラーがないか確認
- セキュリティ製品のログ(管理コンソール)で MsScript.ocx / MsControl.ocx に対するブロック履歴が無いかを見る
- ポリシーや Kill Bit は独断で変更せず、情報システム部門やセキュリティ担当に相談する
ユーザープロファイル起因の問題
同じ PC でも ユーザーを変えると症状が出ない、というケースがあります。この場合、
- 特定ユーザーの AppData 配下の Excel / Office 関連設定が壊れている
- レジストリの
HKEY_CURRENT_USER配下の設定差分
などが疑われます。手軽な切り分けとしては、
- その PC に新規ローカルユーザーを作成
- 新規ユーザーでログオンし、Excel を起動
- 問題のブックを開き、ActiveX 利用時に同じエラーが出るか確認
もし 新規ユーザーでは正常であれば、プロファイル側の問題が濃厚です。この場合、
- 問題ユーザーのプロファイルをバックアップしつつ、新しく作り直す
- Office のユーザー設定だけリセットする
といった対応が現実的です。
環境差分の詳細調査(Process Monitor など)
上記を試しても原因が見えない場合には、Process Monitor(Sysinternals の Procmon) を使うと「どのファイル/レジストリへのアクセスでコケているか」が見えてきます。
ざっくりとした使い方は以下の通りです。
- Procmon を起動し、Excel プロセス(EXCEL.EXE)だけにフィルターを設定
- Excel を起動し、ActiveX を読み込ませてエラーを再現
- Procmon 上で「Result = NAME NOT FOUND」「ACCESS DENIED」などを中心に調査
正常な PC で同じ操作を行い、ログを比較すると、どのファイルやレジストリが不足しているか、どの権限で弾かれているかが見えてきます。
現場でそのまま使えるチェックリスト
ここまでの内容を、すぐ試せる形でチェックリストにまとめます。
| チェック項目 | 確認内容 | 優先度 |
|---|---|---|
| Excel のビット数確認 | 問題 PC の Excel が 32bit か 64bit かを確認し、MsScript.ocx(32bit専用)と整合が取れているか | 高 |
| regsvr32 の使い分け | SysWOW64 の regsvr32 で MsScript.ocx を /u → 再登録しているか | 高 |
| OCX ファイルのパス統一 | dir /s で MsScript.ocx の実体を確認し、登録/解除とも同じパスを指定しているか | 高 |
| SFC / DISM | sfc /scannow と DISM /RestoreHealth による OS 側の修復を実施済みか | 中 |
| ファイル権限 | MsScript.ocx / MsControl.ocx の NTFS 権限が正常か、正常 PC と比較したか | 中 |
| レジストリ差分 | 正常 PC から該当 COM キーをエクスポートし、問題 PC と差分を比較・統一したか | 中 |
| 依存ランタイム | Visual C++ 再頒布可能パッケージ(x86)が不足していないか確認・再インストールしたか | 中 |
| セキュリティ製品・ポリシー | Defender / EDR / グループポリシーで ActiveX がブロックされていないか確認したか | 中 |
| 新規ユーザーでの確認 | 新規ローカルユーザーでログオンし、同じブックで再現するか確認したか | 中 |
| Procmon による詳細調査 | Excel がどのファイル/レジストリアクセスで失敗しているかをトレースしたか | 低(最終手段) |
チェックリスト形式で進めることで、「結局何をやって何をやっていないか」が整理しやすくなります。
レガシー ActiveX からの移行を検討すべき理由
MsScript.ocx や MsControl.ocx は、すでにレガシーな 32bit ActiveX コンポーネントであり、今後の Windows / Office のアップデートでさらに非互換が増えることが予想されます。
特に、
- 会社全体で 64bit Office に移行したい
- Windows 11 / その後の OS で長期運用したい
といった場合、これらレガシー ActiveX に依存し続けるのはリスクが高いと言えます。
.NET クラスライブラリ(C# など)に置き換える
もっとも現実的な移行先のひとつは、.NET でクラスライブラリを作成し、COM 可視化して VBA から呼び出す方法です。
- Visual Studio で C# クラスライブラリを作成
- プロジェクトのプロパティで「COM 相互運用機能の登録」を有効化
- 必要な機能(スクリプト実行、正規表現、文字列処理など)を C# で実装
- ビルドして regasm /codebase などで登録
- VBA から
CreateObjectや参照設定で呼び出す
.NET の利点:
- 64bit / 32bit 両方に対応しやすい(AnyCPU+必要に応じて x86 / x64 切替)
- MsScript.ocx に依存しない、より安全でメンテしやすい実装が可能
- 将来の Windows / Office のアップデートにも追従しやすい
Office アドイン(Office.js)への移行
クライアント環境が Microsoft 365 中心であれば、Office アドイン(Office.js) も選択肢になります。
- HTML / JavaScript ベースで、Excel 上で動く Web 技術ベースのアドイン
- ActiveX に依存せず、ブラウザでもデスクトップ版でも同じコードを使える
- 配布・更新も中央管理しやすい
既存の VBA コードが巨大な場合、いきなり全てを移行するのは難しいので、
- 新機能は Office アドインで実装し、古い VBA は徐々に縮小する
- VBScript.RegExp など一部の機能だけを .NET / Office.js に置き換えていく
といった「段階的移行」が現実的です。
よくある質問と補足
Q. MsScript.ocx を 64bit Excel でどうにか使えませんか?
A. 基本的には不可能と考えるべきです。MsScript.ocx 自体が 32bit 専用であり、64bit プロセスから直接ロードすることはできません。どうしてもスクリプト実行機能が必要な場合は、.NET 経由で代替実装を行うか、32bit Excel 環境を維持する必要があります。
Q. regsvr32 で「モジュールが見つかりません」と出てしまいます
A. 指定したパスが実在しないか、ビット数の異なる regsvr32 を使っている可能性があります。まず dir /s msscript.ocx で実体の場所を確認し、SysWOW64 の regsvr32 と組み合わせて正しいパスを指定してください。また、ネットワークドライブや暗号化フォルダ上の OCX を直接指定していないかも確認しましょう。
Q. 正常な PC とほぼ同じ構成に見えるのに、なぜ 1 台だけ再現しますか?
A. 見えない差分として、
- ユーザープロファイルの破損
- 一部のランタイムや更新プログラムのインストール順序
- セキュリティ製品のポリシー適用タイミング
などが影響していることがあります。この場合、新規ユーザーでの再現確認やSFC / DISM の実行、さらには Procmon での詳細トレースが有効です。
Q. 最終的にどこまでやってダメなら OS の再インストールを検討すべきですか?
A. 次のようなステップをすべて試してもなお改善しない場合、OS の修復インストール(インプレースアップグレード)やクリーンインストールを検討する段階と言えます。
- Excel ビット数の確認と 32bit 環境での再現確認
- SysWOW64 の regsvr32 による MsScript.ocx の再登録
- SFC / DISM によるシステム修復
- Visual C++ ランタイムの再導入
- 新規ユーザープロファイルでの確認
- セキュリティ製品・ポリシーの確認
- Procmon による詳細な原因特定の試行
企業環境であれば、ここまで来た時点で ヘルプデスクや情報システム部門へ正式にエスカレーションし、OS 再セットアップも含めて方針を決めるのがおすすめです。
まとめ:1台だけの「Class Not Registered」は順序立てて潰す
MsControl.ocx / MsScript.ocx で「Class Not Registered」が発生し、しかも regsvr32 で登録できるのに解除がうまくいかない——そんな厄介なケースでも、原因候補を整理して一つずつ潰していけば、解決の糸口は必ず見えてきます。
- まずは Excel と MsScript.ocx のビット数整合を確認し、32bit 環境で再現するかをチェック
- SysWOW64 の regsvr32 と正しいファイルパスを使って、登録解除 → 再登録を丁寧に実施
- それでもダメなら、SFC / DISM・ファイル権限・レジストリ・ランタイム・セキュリティ・ユーザープロファイルと順番に疑っていく
- 長期的には、レガシー ActiveX から .NET や Office アドインへの移行を検討する
特に、質問文のように「多くのことは試したが、依存コンポーネントの再導入と新規プロファイルでの検証は未実施」という状況であれば、
- Visual C++ ランタイム(x86)の再インストール
- 新規ローカルユーザーでの検証
- 併せて 32bit Excel での再現確認
この 3 つから着手することで、かなりの確率で原因の切り分けが進むはずです。 最終的に MsScript.ocx を使い続けるか、別の技術に置き換えるかはシステム全体の方針次第ですが、少なくとも現時点でのトラブルシュートは、本記事の流れに沿って進めることで効率的に行えるでしょう。

コメント