4

私はVBAプログラマーではありません。ただし、誰かのVBAコードを別の言語で再実装するという「不快な」タスクがあります。VBAコードは、1つの大規模な「計算シート」を使用してすべての「グローバル変数」を格納する75個のモジュールで構成されています。したがって、説明的な変数名を使用する代わりに、次のものを使用することがよくあります。

= Worksheets("bla").Cells(100, 75).Value

また

Worksheets("bla").Cells(100, 75).Value =

さらに悪いことに、「計算シート」にはいくつかの数式も含まれています。

そのようなコードをリバースエンジニアリングできる(無料の)ツールはありますか(たとえば、ナッシ・シュナイダーマン図、フローチャートの作成)?ありがとう。

4

1 に答える 1

4

@JulianKnightの提案はうまくいくはずだと思います。これに基づいて、次のことができます。

  1. すべてのコードを、正規表現の検索/置換が可能なテキストエディタ(Notepad ++など)にコピーします。
  2. 次に、RegEx検索/置換を次のような検索クエリで使用します。
    Worksheets\(\"Bla\"\).Cells\((\d*), (\d*)\).Value
  3. そして、次のように置き換えます。
    Var_\1_\2

    これにより、シートに保存されているすべての値が、行と列のインデックスを持つ変数名に変換されます。
    例:

    Worksheets("bla").Cells(100, 75).Value    To    Var_100_75
    
  4. これらの変数はまだ初期化する必要があります。
    これは、「Bla」ワークシートのすべての(関連する)セルを読み取り、それを可変初期化コードとしてテキストファイルに書き出すVBAコードを記述することで実行できます。
    例:

    Dim FSO As FileSystemObject 
    Dim FSOFile As TextStream 
    Dim FilePath As String 
    Dim col, row As Integer 
    
    FilePath = "c:\WriteTest.txt" ' create a test.txt file or change this
    
    Set FSO = New FileSystemObject 
     ' opens  file in write mode
    Set FSOFile = FSO.OpenTextFile(FilePath, 2, True) 
     'loop round adding lines
    For col = 1 To Whatever_is_the_column_limit
        For row = 1 To Whatever_is_the_row_limit
         ' Construct the output line
            FSOFile.WriteLine ("Var_" & Str(row) & "_" & Str(col) & _
                           " = " & Str(Worksheets("Bla").Cells(row, col).Value)) 
        Next row
    Next col
    
    FSOFile.Close 
    

明らかに、使用する必要のある他の言語の出力行構文と変数名構造を修正する必要があります。

PS RegEx(Regular Expressions)に慣れていない場合は、Web上にそれを説明する多数の記事があります。

于 2012-06-27T07:20:17.617 に答える