こんにちはイエスキです。
今のプロジェクトが佳境を迎えてバグが発生するとピリつく時期になってます。
何度経験しても、慣れるものじゃないですね。このなんともいえない緊張感は。
そんな時期にはやたらと『影響は?』『類似は?』と調査作業が多くがち。
やる作業は大体『サクラエディタ』でGrepして、Excelで調査結果としてまとめてって感じが多い
もう整形してExcelに貼り付けるの飽きたよ・・・
とまぁ、そんな作業やったことある人しかわからないぼやきをしましたが、そんな作業をちょっとだけ楽にするツール。
今回はサクラエディタでGrepした結果を手軽にExcelに転記するツールを紹介します!
こうする!
それだけ!
コード:キー一つでGrep結果をExcelに整形・貼り付け
- 下記のコードをコピペして、vbsファイルとして保存
- サクラエディタのマクロに登録
- 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をよく使ってますが、ファイル間検索の便利さは『サクラエディタ』に遠く及ばないですね。
サクラエディタいいよサクラエディタ!!
いじょー!!