【VBScript】サクラエディタをより便利に:Grep結果をExcelに

この記事は約6分で読めます。

こんにちはイエスキです。

今のプロジェクトが佳境を迎えてバグが発生するとピリつく時期になってます。

何度経験しても、慣れるものじゃないですね。このなんともいえない緊張感は。

そんな時期にはやたらと『影響は?』『類似は?』と調査作業が多くがち

やる作業は大体『サクラエディタ』でGrepして、Excelで調査結果としてまとめてって感じが多い

もう整形してExcelに貼り付けるの飽きたよ・・・

とまぁ、そんな作業やったことある人しかわからないぼやきをしましたが、そんな作業をちょっとだけ楽にするツール。

今回はサクラエディタでGrepした結果を手軽にExcelに転記するツールを紹介します!

この記事の著者
のら

お家大好きSE

イエスキ

yeskey

プロフィール

都内で働くシステムエンジニア
素早く家に帰るために日々技術を磨いています。
学んだ技術をわかりやすく紹介します! プロフィール詳細

スポンサーリンク

実行イメージ

これを

こうする!

それだけ!

コード:キー一つでGrep結果をExcelに整形・貼り付け

  1. 下記のコードをコピペして、vbsファイルとして保存
  2. サクラエディタのマクロに登録
  3. Grep結果を表示した状態で実行

使い方はそれだけですね。

マクロの登録方法とか下の記事で詳しく書いてあるので、わからなければそっちを参照してみて下さい。

Dim StartTime , EndTime , ProcTime
Dim ClipboardText
Dim ReplacePattern , HeaderPattern , AfterPattern
Dim OutStr

Call StartProc
Call GetAll
Call CreatePattern
Call ReplaceText
Call OutExcel
Call EndProc

'Grep結果全体の情報取得
Sub GetAll()
    Dim objHtml
    Set objHtml = CreateObject("htmlfile")

    'サクラエディタ機能にてコピー
    SelectAll()
    Copy()

    'クリップボードから変数に格納
    ClipboardText = Trim(objHtml.ParentWindow.ClipboardData.GetData("text"))
    Set objHtml = Nothing
End Sub

'置換文字の作成
Sub CreatePattern()
    'Tips:『vbTab』はタブ/『vbCrLf』は改行文字
    '見出し文字
    HeaderPattern = vbCrLf & vbCrLf & "パス" & vbTab & "ソース名" & vbTab & "行" & vbTab & "列" & vbTab & "該当箇所" & vbCrLf

    '置換対象
    replacePattern = "(.*\\)(.*)\((.*),(.*)\).*]:(.*)\r\n"

    '置換後(括弧で囲んだ箇所をタブ区切りで出力)
    AfterPattern = "$1" & vbTab & "$2" & vbTab & "$3" & vbTab & "$4" & vbTab & "$5" & vbCrLf
End Sub

'正規表現置換
Sub ReplaceText()
    Dim tmpNoTab , tmpInHeader

    Dim objRegExp
    Set objRegExp = CreateObject("VBScript.RegExp")

    With objRegExp
        .IgnoreCase = True
        .Global = True
    End With

    'タブ⇒空白
    objRegExp.Pattern = "\t"
    tmpNoTab = objRegExp.Replace(ClipboardText , "    ")

    '見出し文字追加
    objRegExp.Pattern = "\r\n\r\n\r\n"
    tmpInHeader = objRegExp.Replace(tmpNoTab , HeaderPattern)

    'GREP結果編集
    objRegExp.Pattern = replacePattern
    OutStr = objRegExp.Replace(tmpInHeader , AfterPattern)

    Set objRegExp = Nothing
End Sub

'Excelに出力
Sub OutExcel()
    Dim oXlsApp , oSheet
    Dim lines , flds
    Set oXlsApp = CreateObject("Excel.Application")

    ' Excel起動確認
    If oXlsApp Is Nothing Then
        MsgBox "Excelを起動できません"
    Else
        'Excel表示(falseにすると非表示にできる)
        oXlsApp.Application.Visible = true
        'Excelの警告を非表示にする
        oXlsApp.Application.DisplayAlerts = False
        'ブック追加
        oXlsApp.Application.Workbooks.Add()
        'シート選択
        Set oSheet = oXlsApp.Worksheets(1)
        '画面更新を抑止
        oXlsApp.Application.ScreenUpdating = False

        '改行文字で分割
        lines = Split(OutStr, vbCrLf)
        '1行ごとに処理
        For i = 0 To UBound(lines)
            'タブで分割し、セルに設定
            flds = Split(lines(i), vbTab)
            For j = 0 To UBound(flds) 
                oSheet.cells(i+1,j+1).value = flds(j)
            Next
        Next
        '画面更新を再開
        oXlsApp.Application.ScreenUpdating = True

        Set oXlsApp = Nothing
    End If
End Sub


'開始処理
Sub StartProc()
    '開始時間取得
    StartTime = Timer
End Sub

'終了処理
Sub EndProc()
    '終了時間取得
    EndTime = Timer
    '処理時間計算
    ProcTime = EndTime - StartTime
    '処理時間表示    
    MsgBox( "終了(処理時間:" & ProcTime & ")" )
End Sub

最後に

最後まで見ていただきありがとうございます。

完全に自分用の覚書ですが、少しでも誰かの作業が便利になってくれたら嬉しいな。

正規表現の扱いやExcelの出力など部分的に使える箇所あると思う。

余談ですが、最近プライベートでVSCodeをよく使ってますが、ファイル間検索の便利さは『サクラエディタ』に遠く及ばないですね。
サクラエディタいいよサクラエディタ!!

いじょー!!

タイトルとURLをコピーしました