Excel ActiveXでMsScript.ocxが「Class Not Registered」になる原因と対処法【MsControl.ocx対応】

ある日突然、特定の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 Excel32bit MsScript.ocx原則として利用可能(他要因でエラーの可能性はあり)
64bit Excel32bit 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 用 regsvr32C:\Windows\System32\regsvr32.exe64bit COM/ActiveX の登録・解除
32bit 用 regsvr32C:\Windows\SysWOW64\regsvr32.exe32bit 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

実行手順の一例:

  1. 管理者として PowerShell または CMD を起動
  2. sfc /scannow を実行し、100% 完了するまで待つ
  3. 再起動
  4. 再度管理者で DISM /Online /Cleanup-Image /RestoreHealth を実行
  5. 再起動後、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 を参照している

といったギャップが生じます。手早い修復方法は、

  1. 正常な PC で該当キーを .reg ファイルとしてエクスポート
  2. 問題 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 配下の設定差分

などが疑われます。手軽な切り分けとしては、

  1. その PC に新規ローカルユーザーを作成
  2. 新規ユーザーでログオンし、Excel を起動
  3. 問題のブックを開き、ActiveX 利用時に同じエラーが出るか確認

もし 新規ユーザーでは正常であれば、プロファイル側の問題が濃厚です。この場合、

  • 問題ユーザーのプロファイルをバックアップしつつ、新しく作り直す
  • Office のユーザー設定だけリセットする

といった対応が現実的です。

環境差分の詳細調査(Process Monitor など)

上記を試しても原因が見えない場合には、Process Monitor(Sysinternals の Procmon) を使うと「どのファイル/レジストリへのアクセスでコケているか」が見えてきます。

ざっくりとした使い方は以下の通りです。

  1. Procmon を起動し、Excel プロセス(EXCEL.EXE)だけにフィルターを設定
  2. Excel を起動し、ActiveX を読み込ませてエラーを再現
  3. 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 / DISMsfc /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 を使い続けるか、別の技術に置き換えるかはシステム全体の方針次第ですが、少なくとも現時点でのトラブルシュートは、本記事の流れに沿って進めることで効率的に行えるでしょう。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次