Edited at

正規表現にマッチした部分をExcelに書き出す + プロットする


概要

正規表現にマッチした部分をExcelに書き出す + プロットします。

参考:python版

plot.gif


使ったデータ


plot.txt

(1,100)

(2,200)
(3,300)
(4,400)
(5,500)


使った正規表現

"\((\d),(\d{3})\)"


コード

objExcel.Visible = Falseにする場合は、スクリプトの最後でSave/SaveAs→Close→Quit(→Set X=Nothing)の流れで閉じるようにします。Quitを呼ばないとExcel.exeが残ります

大してメモリ使わないし、サクッと終了するならSet X = NothingはなくてもOKです。


plot.vbs

'------ 本題とあまり関係ない部分 ここから ----

' スクリプトにドロップされたファイル名を取得する。
If Wscript.Arguments.Count > 0 Then
fname = Wscript.Arguments.Item(0)
Else
WScript.Echo "テキストファイルをドロップしてください"
WScript.Quit
End If

'オブジェクトの準備
Set objExcel = CreateObject("Excel.Application") 'Excel操作
Set objFso = CreateObject("Scripting.FileSystemObject") 'ファイル操作
Set objRegExp = CreateObject("VBScript.RegExp") '正規表現
Set objWshshell = CreateObject("WScript.Shell") 'Windowsシェル操作

objExcel.Visible = True 'Excelを見えるようにしておく(今回は手で閉じる,保存する)
objWshshell.AppActivate objExcel.Caption 'Excelを最前面にする

Set objSheet = objExcel.WorkBooks.Add().ActiveSheet 'アクティブなシートのオブジェクトを持っておく
'------ 本題とあまり関係ない部分 ここまで----

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 正規表現にマッチした部分をExcelに書き出す + プロットする
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' まずは、正規表現にマッチした部分をExcelに書き出す
objSheet.Cells(1,1).Select 'A1をアクティブセルにする
Set objInFile = objFSO.OpenTextFile(fname) '入力のテキストファイルを開く
Do While objInFile.AtEndOfStream <> True

str = objInFile.ReadLine ' 1行読む

objRegExp.pattern = "\((\d),(\d{3})\)" 'パターン設定

Set objMatchCol = objRegExp.Execute(str) '検索実行
If objMatchCol.Count > 0 Then
'マッチした場合
'マッチした部分をさらに分解する
Set objSubMatches = objMatchCol.Item(0).SubMatches

'Excelに書き出す
objSheet.Cells(objExcel.ActiveCell.Row, 1) = objSubMatches.item(0)
objSheet.Cells(objExcel.ActiveCell.Row, 2) = objSubMatches.item(1)

'セルを次の行に進めておく
objSheet.Cells(objExcel.ActiveCell.Row+1,1).Select
End If
Loop
objInFile.Close '入力のテキストファイルを閉じる

'次に、Excelに書き出したデータをプロットする
Set objChart = objSheet.ChartObjects.Add(120, 20, 200, 150) 'チャートオブジェクトを作る。
objChart.Chart.ChartType = 74 '散布図にする。xlXYScatterLines(74)
objChart.Chart.SetSourceData(objSheet.UsedRange) 'データソースに書き出した箇所を設定する



参考

Regular Expression (RegExp) オブジェクト - msdn