VB6/VBA のソースを C# に変換するには

VBA のコードを Java に移植しようと思った。理想としては

  1. 内容を解析し、設計書を起こす。
  2. 設計書を元に Java 版を設計しなおし、実装。

なのだが、手抜きで変換かけられないかと考えてみる。自前でコンバータを書く以外に使えるツールがないかと考えてみた。で、今回試したのは、VBA→VB6→VB.NETC# という変換パス。うわー、超遠回り!

手順

まずは、VBA のモジュールをエクスポートし、適当に作った VB6 のプロジェクトに取り込む。これを VB.NET のコードに変換する前に、エラーになる箇所をある程度チェックすることができる。

Code Advisor for Visual Basic 6
http://www.microsoft.com/japan/msdn/vbasic/downloads/codeadvisor/default.asp

このツールをインストールすると、VB6 の IDE 内に "Code Advisor for Visual Basic 6" ツールバーが追加され、ボタンを押すだけでプロジェクト内のソースをチェックしてくれる。
出力されたレポートにしたがって修正を行ったら、VS.NET から VB6 のプロジェクトファイル (*.vbp) を開く。すると変換ウィザードが起動し、VB.NET への変換を行ってくれる。待つことしばし……。
変換されたソースを見ると、変換に失敗した箇所にコメントが追加されている。まぁ、とりあえずほっといて、次は C# への変換。使うツールは SharpDevelop だ。

SharpDevelop
http://www.icsharpcode.net/OpenSource/SD/Default.aspx

VS.NET で変換が終わると、出力先にプロジェクトファイル (*.vbproj) ができている。これを SharpDevelop の [ファイル]→[プロジェクトインポート] で取り込む。ついで、適当な .vb ファイルを開いてから [ツール]→[ソースをVB.NETからC#に変換] を選択すると、Generated.CS というファイル名で変換結果が表示される。やったー!!

結果

VB.NET への変換あたりまでは、それなりに順調。Variant や Object が絡む箇所はかなり修正が必要になるが、変換結果には特に問題なさそう (ちゃんと見たわけじゃないけど)。
ところが、C# に変換した時点で、Select Case だったところが switch じゃなくて if になっていたり、コメントがざっくりなくなっていたりした。元がきれいなソースなら動くことにはかわりなさそうだけど、変換後に手修正する範囲が意外と多そう。