質問するログイン新規登録
BASIC

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

530閲覧

自作DLLがエクセルで参照設定でエラー

kakeru

総合スコア64

BASIC

BASICとは、手続き型言語の一つ。英語に準した簡易な記述になっており、基本的には初心者向けのプログラミング言語です。1970年代以降のコンピュータでよく使用された言語で、様々な拡張を加え現在も利用されています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

1グッド

1クリップ

投稿2025/08/28 04:04

1

1

実現したいこと

VBAで正規表現の処理が遅い為、Visual Studio2022を使って一部分だけ高速化したいと思い、VBAからVisual Studio2022のVisual Basic呼出しを勉強始めました。

発生している問題・分からないこと

VBAで独自の.NETライブラリを使うには?[VB]
https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/1063vbausedotnet/vbausedotnet.html
を参考にVisual Studio2022でDLLを作成できたのですがExcel2024で参照設定からDLLファイルを指定しても”指定されたファイルへの参照は登録できません”が出てしまいます。

記事自体が2011/08/04の物で最新の環境では修正が必要なのでしょうか。

エラーメッセージ

error

1指定されたファイルへの参照は登録できません

該当のソースコード

Visual

1Imports System.Net 2 3' クラスをCOM経由でアクセス可能にする 4<ComClass(WebPage.ClassId, WebPage.InterfaceId, WebPage.EventsId)> 5Public Class WebPage 6 7 ' COM用のGUID値{ 8 Public Const ClassId As String = "CC53CCB6-87A8-47C5-8D42-2B5F5513E902" 9 Public Const InterfaceId As String = "1C330656-2A96-4091-80E9-33B2928754F3" 10 Public Const EventsId As String = "8A5C78BF-907E-4BF5-9223-4D9EAE4390AB" 11 12 ' VBAから利用できるメソッド 13 Public Function GetText(ByVal url As String) As String 14 Dim wc As New WebClient() 15 Return wc.DownloadString(url) 16 End Function 17 18End Class 19

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

VBAからVisual Studioを呼び出すでGoogle検索しましたがVisual Basicでの判りやすいサンプルが見つかりませんでした。

補足

特になし

hawawa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2025/08/28 04:57

Visual Studio 2022では.NETアセンブリのCOMでも既定でAnyCPUでビルドされていると思います。Excel2024に合せてx64でビルドしてみてはどうでしょうか。
kakeru

2025/08/28 06:16

コメントありがとうございます。 コンパイラの設定でターゲットCPUをx68にしてDLLを再作成して見ましたが変わらず ”指定されたファイルへの参照は登録できません” が出てしまいます。
xail2222

2025/08/28 07:58 編集

参照設定でdllではなく、tlbを選択してみては?
kakeru

2025/08/28 08:39

コメントありがとうございます。 bin\Debugには.dll .pdb .xmlの3ファイルしかない状態です。 .tlbはコンパイラ時無いか設定すると出るのでしょうか?
xail2222

2025/08/28 09:01

コンパイルの所で、COM相互運用機能の登録にチェックはつけてますか? 2022にはないのかな。。
dodox86

2025/08/29 02:08 編集

@質問者 kakeruさん 回答しようかとも思いましたが今のところ情報が少なく不確かな面があるのでコメントで失礼します。 尚、こちらで試したところではWindows 10, Visual Studio 2022, Excel2013(随分古いですが)の32ビット版で参考にされたページに沿ってやった内容でExcel VBAからCOMのクラスライブラリとしてメソッドを呼び出せました。 > bin\Debugには.dll .pdb .xmlの3ファイルしかない状態です。 > .tlbはコンパイラ時無いか設定すると出るのでしょうか? 1. 使われているExcel 2024は64ビット版ですか? 32ビット版もあるようなのでまずそれも確認してください。まあ、Excelの参照設定から「参照可能なライブラリファイル」一覧に出てくるようなら、大丈夫だと思うのですが。 2. 私の方では環境のせいか.NET 9や8でのクラスライブラリのビルドができなかったので、.NET Framework(4.8)で「COM相互運用機能の登録」をON、x86でビルドしました。 3. 古いCOM(*.dll)が登録されてしまうと何を使っているか分からなくなりがちなので、regasmコマンドで登録解除をするようにして新しいものを試すことをお勧めします。 4. 通常はx64なら ClassLibrary2\bin\x64、x86なら ClassLibrary2\bin\x86 のように、ターゲットを意識した名前のディレクトリ下に生成されます。*.tlbも生成されます。間違ったDLLファイルを登録しないよう、ファイルのタイムスタンプに気を付け、Excelの参照設定などで適切なファイルのPATHになっているか確認してください。GUIDを変えたりして古い*.DLLのCOMの登録情報になったままなどもありがちです。 5. お使いのWindowsバージョン等も詳細に記載すると、より詳しい方がコメントや回答をくださるかもしれません。 [一部修正、追記済み]
kakeru

2025/08/29 03:47

コメントありがとうございます。 C:\Windows\Microsoft.NET\Framework\v4.0.30319>regasm /tlb C:\Users\Win10_1073_TEST\source\repos\ClassLibraryForVBA2\ClassLibraryForVBA2\bin\Debug\ClassLibraryForVBA2.dll /unregister を実行した所下記エラーが出ました。 RegAsm : error RA0000 : 'C:\Users\Win10_1073_TEST\source\repos\ClassLibraryForVBA2\ClassLibraryForVBA2\bin\Debug\ClassLibraryForVBA2.dll' は有効な .NET アセンブリではないため、読み込めませんでした。 その後ビルド実行した所、前回と同じ場所に.tlbも作成され「参照可能なライブラリファイル」一覧にもでてVBAから呼出しできました。 エラーが出ましたがregasmコマンドで登録解除の効果が有った用です。 (今までは参照設定の参照ボタンをクリックでDLL指定してエラーがでてました) 問題が解決し、ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
kakeru

2025/08/29 08:37

すいません、VS2022が入ってる環境ではOKなのですが、別の環境へ.tlb .dllコピーしたらエラーがでました。 VMware(R) Workstation 上Windows10環境でVisual Studio 2022 ビルドExcel 2024は64ビットでは問題ありません。 VMware(R) Workstation 上Windows10環境Excel 2013は64ビットへ.tlb .dllコピーしました。 管理者権限のドス窓でコピーしたフォルダーに移動後 C:\Users\Win_10ENT_TEST\Documents\VS2022テスト>C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm ClassLibraryForVBA2.dll /tlb:ClassLibraryForVBA2.tlb を実行しましたら次のエラーとなります。 RegAsm : error RA0000 : 'C:\Users\Win_10ENT_TEST\Documents\VS2022テスト\ClassLibraryForVBA2.dll' は有効な .NET アセンブ リではないため、読み込めませんでした。 Excelの参照設定でClassLibraryForVBA2.tlbを直接指定すれば組み込めますが html = wp.GetText("http://www.google.co.jp") で”クラスが登録されていません”のエラーがでてしまいます。 .NET Framework はデフォルトの4.7.2及び4.8を試しましたが変わらずです
kakeru

2025/08/29 09:08

regasm登録エラーは32/64ビット指定の間違いでした。 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm でなく C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm を使用した所エラー無く登録できましたが html = wp.GetText("http://www.google.co.jp") で オートメーションエラーです 指定されたファイルが見つかりません がでます。 Visual Studioでビルドした場合.tlb .dll以外で何かコピー必要な物が有るのでしょうか?
dodox86

2025/08/29 19:12

> オートメーションエラーです > 指定されたファイルが見つかりません > がでます。 regasmコマンドでの登録時、"/codebase"オプションを付与して実行してみてください。 [Regasm.exe (アセンブリ登録ツール) - Microsoft Learn] https://learn.microsoft.com/ja-jp/dotnet/framework/tools/regasm-exe-assembly-registration-tool > レジストリに Codebase エントリを作成します。 Codebase エントリによって、グローバル アセンブリ キャッシュにインストールされないアセンブリのファイル パスが指定されます。
dodox86

2025/08/29 19:36

@本コメントを閲覧された皆さま 本件と関係無いですが、teratail、自分のコメント投稿にも通知が来るようになってますね。以前からそうでしたっけ? 先日、メンテがあったと思いますが、teratailの新たな不具合、バグでしょうかね。
kakeru

2025/08/30 02:39

コメントありがとうございます。 regasmコマンドでの登録時、"/codebase"オプションを付与して試したところ問題が解決しました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
dodox86

2025/08/30 06:16

回答欄に転載、一部追記したかたちで投稿しました。
kakeru

2025/08/30 08:42

対応ありがとうございました。 別のプロジェクト立ち上げたら.tlbが出来ないトラブルが再発してしまいましたが、regasmコマンドで.tlbを作る事でExcelから問題無く使える事ができました。
guest

回答2

0

ベストアンサー

解決できたようでよかったです。以下、私が「質問へのコメント」欄で投稿した内容を一部追記して転載します。


Visual Studio 2022では.NETアセンブリのCOMでも既定でAnyCPUでビルドされていると思います。Excel2024に合せてx64でビルドしてみてはどうでしょうか。
...
回答しようかとも思いましたが今のところ情報が少なく不確かな面があるのでコメントで失礼します。
尚、こちらで試したところではWindows 10, Visual Studio 2022, Excel2013(随分古いですが)の32ビット版で参考にされたページに沿ってやった内容でExcel VBAからCOMのクラスライブラリとしてメソッドを呼び出せました。

bin\Debugには.dll .pdb .xmlの3ファイルしかない状態です。
.tlbはコンパイラ時無いか設定すると出るのでしょうか?

  1. 使われているExcel 2024は64ビット版ですか? 32ビット版もあるようなのでまずそれも確認してください。まあ、Excelの参照設定から「参照可能なライブラリファイル」一覧に出てくるようなら、大丈夫だと思うのですが。

  2. 私の方では環境のせいか.NET 9や8でのクラスライブラリのビルドができなかったので、.NET Framework(4.8)で「COM相互運用機能の登録」をON、x86でビルドしました。

  3. 古いCOM(*.dll)が登録されてしまうと何を使っているか分からなくなりがちなので、regasmコマンドで登録解除をするようにして新しいものを試すことをお勧めします。

  4. 通常はx64なら ClassLibrary2\bin\x64、x86なら ClassLibrary2\bin\x86
    のように、ターゲットを意識した名前のディレクトリ下に生成されます。.tlbも生成されます。間違ったDLLファイルを登録しないよう、ファイルのタイムスタンプに気を付け、Excelの参照設定などで適切なファイルのPATHになっているか確認してください。GUIDを変えたりして古い.DLLのCOMの登録情報になったままなどもありがちです。

  5. お使いのWindowsバージョン等も詳細に記載すると、より詳しい方がコメントや回答をくださるかもしれません。

「質問へのコメント」欄の[2025/08/29 18:08]のコメントより

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm
でなく
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm
を使用した所エラー無く登録できましたが
html = wp.GetText("http://www.google.co.jp")

オートメーションエラーです
指定されたファイルが見つかりません
がでます。
Visual Studioでビルドした場合.tlb .dll以外で何かコピー必要な物が有るのでしょうか?

についてですが、regasmコマンドでの登録時、"/codebase"オプションを付与して実行してみてください。

Regasm.exe (アセンブリ登録ツール) - Microsoft Learn

上記記事より引用:

レジストリに Codebase エントリを作成します。 Codebase エントリによって、グローバル アセンブリ キャッシュにインストールされないアセンブリのファイル パスが指定されます。

とのことなので、ユーザーが任意に設定したディレクトリ下にインストールする場合は、regasmコマンドの実行時に/codebaseオプションが必要になると考えられます。

投稿2025/08/30 06:16

dodox86

総合スコア9425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Visual Studio 2022で作成したDLLがExcel 2024で参照できない問題は、主にCOM登録の問題やビット数(32/64ビット)の不一致が原因と考えられます。参照元の記事が古いため、現在の環境に対応していない可能性があります。解決策としては、プロジェクトのプロパティで**「COM相互運用機能の登録」を有効にし、Excelのビット数に合わせてプラットフォームターゲット(x86/x64)を正しく設定した上で、管理者権限でビルドし直すか、regasm.exeコマンドで手動でDLLを登録し直す必要があります。また、より現代的な方法として、COM登録が不要なExcel DNA**ライブラリの利用も検討すると良いでしょう。

投稿2025/08/28 09:47

Jamie309Perez

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問