Skip to content

MS_VB6ToVBNETConversion

nishi_74322014 edited this page Aug 12, 2026 · 1 revision

VB6.0からVB(.NET)へのコンバージョン

概要

本ページでは、VB 6.0からVB.NETへの
コンバージョン(手修正有りのコンバージョン移行)の作業範囲を扱います。

コンバージョン・ツール

.NET が登場した 2003年当時、ベンダ提供のものもいくつか開発されましたが、
現在は軒並みサポート切れで、
Visual Basic 2008 でコンバージョンするのが主流になっています。

以下の様な手順でコンバージョンが可能です。

  1. VB6 がインストールされた環境に、Visual Basic 2008 Express をインストールする
  2. Visual Basic 2008 Express で対象の VB6 プロジェクトを開き、コンバートする
  3. 最新の Visual Studioでコンバートしたプロジェクトを開く
  4. コンバーターが自動で付加した、エラー、警告、情報のコメントをみて、対処を行う
  5. コンパイルエラー、警告を確認しながら、エラー対策を行う

補足(この手順が成立する理由と限界): アップグレード ウィザードは
Visual Studio 2008 が最後
で、VS2010 以降には搭載されていない。
このため「わざわざ VB2008 Express を入れて 1 回通す」という
遠回りの手順になっている。

ただし、VS2008 Express の入手は年々難しくなっている
(公式ダウンロードが整理された)。
現在の選択肢を整理すると次のとおり。

方針 内容
VS2008 でウィザード 従来手順。環境の入手が課題
商用ツール Mobilize.Net VBUC など。C# / .NET 8 への直接変換も可
手作業で書き直し 規模が小さい場合はこれが最短のことも多い
据え置く VB6 ランタイムは Windows 11 でもサポート対象(アプリのサポートは別)

なお、VB6 ランタイム自体は Windows と同じライフサイクルで
サポートが継続
している(IDE のサポートは 2008年に終了)。
「明日動かなくなる」という性質の話ではない点は、
移行判断の前提として押さえておきたい。

移行見積もり

先ず、前提として、

確認して下さい。コレを踏まえると、


VB 6.0の開発環境は既に 2008年をもってサポートを終了しており、
VB.NETへの移行が求められてきています。しかしながら、
コンバージョンによる VB 6.0VB.NET移行は、
実際には容易ではありません。例えば、VB 6.0で使用する
3rd パーティ製ライブラリ利用部分がコンバージョン ツールでサポートされない
等々に起因する修正範囲拡大の可能性が
VB 6.0VB.NETコンバージョンにはあります。

特に VB 6.0は GUI アプリケーション開発に利用されてきたため、
上記 3rd パーティ製 GUI コンポーネントの多用によって、
コンバージョンの修正範囲が拡大するケースが多い事が
過去事例からも判明しています。このような「手修正有りのコンバージョン移行」の
場合は、新規開発時と同程度のテスト工数に加え、ポーティング工数が必要になり、
トータルで VB.NETでの新規開発以上の工数が
必要となるようなケースも考えられます。

このようなケースでは VB 6.0VB.NETコンバージョンは
適切な移行パスではありません。


となることがあるため、以降の準備作業として、

  • 移行性評価作業を実施したり、
  • ベンダ提供のツールなどを使用してコードの変換率を調査

する必要があります。

  • 3rd パーティ製ライブラリを使用している場合、
    移行先に同じ I/F をサポートするライブラリが存在しているか?
    などにも注意して下さい。

  • 以前は、某社提供のコードの変換率の調査ツールなども存在していましたが、
    現在は、サポート切れとなっています。

補足(何が自動変換できないのか): 「容易ではない」の中身を
具体化しておくと、見積もりの精度が上がる。

領域 変換可否
構文・制御構造 概ね自動Dim / If / For など)
標準コントロール 概ね自動(Microsoft.VisualBasic.Compatibility 経由)
3rd パーティ ActiveX / OCX 不可。代替品の選定と作り直しが要る
Variant 型・遅延バインディング 半自動。実行時に初めて壊れる箇所が残る
Control 配列 不可(.NET に概念が無い)。書き直し
既定プロパティText1 = "a" 半自動。曖昧な箇所は手修正
Err / On Error Goto 動くが、例外処理への書き換えが望ましい
COM相互運用 自動(RCW 経由)だが、64bit対応の制約を受ける

とくに Microsoft.VisualBasic.Compatibility 名前空間は
.NET Core 以降に移植されていない
点に注意が要る。
ウィザードが生成するコードはこれに依存するため、
「VB6 → VB.NET (.NET Framework) → .NET 8」という 2 段階では、
2 段目で再度の手直しが必要になる。

規模によっては、VB6 → C# を直接狙う(商用ツールまたは書き直し)方が
総工数が小さいこともある。VB ⇔ C Sharp 変換
併せて参照されたい。

関連リンク

VB6系

  • VB6の保守(MS_VB6Maintenance.md
  • VB6→VB.NET移行 FAQ(MS_VB6ToVBNETFAQ.md

リエンジ

Microsoft

Qiita


Tags: 移行, .NET開発, Visual Basic

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally