データサービス事業
  オープンテクノロジー(Red Bible)
  パッケージ事業
  SI事業




≪Red Bible≫
  ブラウザ自動操作
  ExcelVBAソースの可視化
  AccessMDBの可視化
  C#プロジェクトソースの可視化
  ExcelをWebクライアントにする NEW! 

≪データサービス≫
  新設法人データ(確報版)
  新設法人データ(速報版)

≪パッケージ≫
  登記データ自動取得プログラム
  新設法人データ自動取得プログラム
  OCR文書管理プログラム

≪サービス≫
  OCRデータエントリーサービス
  登記データ取得代行サービス
  Webデータ情報収集サービス

≪システムインテグレーションサービス≫
  Webシステム業務運用改善技術
  Webクローリングシステム
  IT資産分析サービス
  モデリングサービス(リエンジニアリング)
  レガシーコンバージョンサービス事例
  OCRエントリーシステム構築

≪会社情報≫
  会社情報

≪お問い合わせ≫
  お問い合わせはコチラ
ExcelVBAの可視化
概要
 ExcelVBAの可視化 

 §2   ビジネステクノロジー活用講座

■ExcelVBAのソースコードを可視化/一覧化する

最近のExcelはこれがExcelか!と思うほど、強力な開発機能を備えています。しかし、他に人が作成したExcelVBAは解読や修正が 困難な場合が多々あります。
Sheetや共通モジュール、フォームに散在するVBAソースを1つのExcelシート上にまとめれば、解析も容易。 あとはExcelの機能でExcelVBAを可視化、解析が簡単にできます。
以下のような解析画面はその下に添付したVBAソースをそのまま使用すれば、すぐに作成できます。

☆動かない場合にはお気軽にお問い合わせください☆


ExcelVBAをExportしたフォルダ

Excelに取り込んで作成したソースファイル一覧

Excel上の全VBAソースコード表示

Excelのフィルタ機能やVBAで作成した関数レベルの一覧表

【ExcelVBA可視化プログラム・ソース】


'
'  ソースをExportするプログラムです。解析したいExcelシートのどこかに貼り付けて実行すれば、
'  そのカレントフォルダに\sourceフォルダが作成され、そのフォルダ下にVBAソースがExportされます。
'
Private Sub CommandButton1_Click()
    Dim TempComponent As Object
    Dim ExportPath As String
 
    'Export先フォルダの作成、存在すればデータをクリアー
    ExportPath = ThisWorkbook.Path & "\source"
    If Dir(ExportPath, vbDirectory) = "" Then
      Call MkDir(ExportPath)
    End If
    '
    If Dir(ExportPath & "\BAS", vbDirectory) = "" Then
      Call MkDir(ExportPath & "\bas")
    Else
      Kill ExportPath & "\bas\*.*"
    End If
    '
    If Dir(ExportPath & "\CLS", vbDirectory) = "" Then
      Call MkDir(ExportPath & "\cls")
    Else
      Kill ExportPath & "\cls\*.*"
    End If
    '
    If Dir(ExportPath & "\FRM", vbDirectory) = "" Then
      Call MkDir(ExportPath & "\frm")
    Else
      Kill ExportPath & "\frm\*.*"
    End If
 
    'プロジェクト内全ソースコードをExport
    For Each TempComponent In ThisWorkbook.VBProject.VBComponents
        Select Case TempComponent.Type
          Case 1    '標準モジュール
            TempComponent.Export ExportPath & "\bas\" & TempComponent.Name & ".bas"
          Case 2    'クラスモジュール
            TempComponent.Export ExportPath & "\cls\" & TempComponent.Name & ".cls"
          Case 3    'ユーザーフォーム
            TempComponent.Export ExportPath & "\frm\" & TempComponent.Name & ".frm"
          Case 100  'Excelオブジェクト(ワークブック・シート)
            TempComponent.Export ExportPath & "\cls\" & TempComponent.Name & ".cls"
        End Select
    Next
    MsgBox "Export完了"
End Sub


'
'  上記のExportデータを一括してExcelシートに読込み、関数一覧などを作成するVBAです。
'
Dim out_ctr As Long

'全ソース読込み
Private Sub CommandButton1_Click()
    Dim foldername As String
    Dim i As Long
    Dim x, y As String
    Dim buff As String
            
    out_ctr = 0
    Worksheets("Sheet1").Cells.ClearContents
    Worksheets("Sheet2").Cells.ClearContents
      
    foldername = GetFoldername("c:\")
    If foldername <> "" Then
      Call getFileList(foldername)
      
      out_ctr = 1
      i = 1
      Do Until Worksheets("Sheet1").Cells(i, 1) = ""
        x = Worksheets("sheet1").Cells(i, 2)
        j = InStrRev(x, ".")
        y = StrConv(Mid(x, j, 10), vbLowerCase)
        If y = ".bas" Or y = ".cls" Or y = ".frm" Then
          Open Worksheets("Sheet1").Cells(i, 1) & "\" & Worksheets("Sheet1").Cells(i, 2) For Input As #1
          num = 0
          Do Until EOF(1)
            Line Input #1, buff
            num = num + 1
            y = StrConv(buff, vbLowerCase)
            'If InStr(1, y, "function ") > 0 And InStr(1, y, "end function") < 1 Or _
            '   InStr(1, y, "sub ") > 0 And (InStr(1, y, "end sub") < 1 Or InStr(1, y, "exit sub") < 1) Then

              Worksheets("Sheet2").Cells(out_ctr, 1) = Worksheets("sheet1").Cells(i, 1)
              Worksheets("Sheet2").Cells(out_ctr, 2) = Worksheets("sheet1").Cells(i, 2)
              Worksheets("Sheet2").Cells(out_ctr, 3) = buff
              Worksheets("Sheet2").Cells(out_ctr, 4) = num

              out_ctr = out_ctr + 1
            
             'End If
            
          Loop
          Close #1
        End If
        i = i + 1
      Loop
    End If
    
End Sub

'ファイル一覧作成
Sub getFileList(DirPath As String)
    Dim buff As String, fl As Object
    buff = Dir(DirPath & "\*.*")
    Do While buff <> ""
        out_ctr = out_ctr + 1
        Cells(out_ctr, 1) = DirPath
        Cells(out_ctr, 2) = buff
        buff = Dir()
    Loop
    With CreateObject("Scripting.FileSystemObject")
        For Each fl In .GetFolder(DirPath).SubFolders
            Call getFileList(fl.Path)
        Next fl
    End With
End Sub


'フォルダ選択
Function GetFoldername(pathname) As String
Dim FN As String
With Application.FileDialog(msoFileDialogFolderPicker)
  .InitialFileName = pathname
  If .Show = -1 Then
    FN = .SelectedItems(1)
  Else
    FN = ""
  End If
End With
GetFoldername = FN
End Function



Excelシートに取り込めば、あとはExcelの検索やフィルタ機能、さらにはVBAを使えば本格的なプログラム解析まで簡単に可能です。 システムエンジニアの手作業に依存せず、エンジニアよりも安く、早く、正確に作業が可能です。ぜひお試しください。