正規表現にマッチした部分をExcelに書き出す + 階段グラフにする

#概要

[正規表現にマッチした部分をExcelに書き出す + プロットする - Qiita](https://qiita.com/int_main_void/items/f59d9e9f2a8d8f9c6b51)に若干手を加えて、階段グラフにしてみます。

![plot2.gif](https://qiita-image-store.s3.amazonaws.com/0/34777/9695873e-7d28-7634-c80d-9ddced2be7d6.gif)


以下の記事を参考にしています。
[Excelで階段グラフを描く方法 - それ、僕が図解します。](http://rick08.hatenablog.com/entry/2014/11/27/233021)

# 使ったデータ

```plot.txt
(1,100)
(2,200)
(3,300)
(4,400)
(5,500)
```

# 使った正規表現

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

# コード 

```vb: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に書き出す
        ' 階段グラフにするポイントの部分。前回の値をセルに入れる。
        If objExcel.ActiveCell.Row > 1 Then
	        objSheet.Cells(objExcel.ActiveCell.Row, 1) = objSubMatches.item(0)
	        objSheet.Cells(objExcel.ActiveCell.Row, 2) = objSheet.Cells(objExcel.ActiveCell.Row-1, 2)
            'セルを次の行に進めておく
            objSheet.Cells(objExcel.ActiveCell.Row+1,1).Select
        End If
        
        ' 変化した部分の値 (正規表現でマッチした部分)
        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, 300, 200) 'チャートオブジェクトを作る。

objChart.Chart.ChartType = 74 '散布図にする

objChart.Chart.SetSourceData(objSheet.UsedRange) 'データソースに書き出した箇所を設定する

objSheet.Cells(1,1).Select
```

#注意

`objExcel.Visible = False`にする場合は、スクリプトの最後で[Save/SaveAs→Close→Quit(→Set X=Nothing)の流れで閉じる](http://blog.livedoor.jp/midorityo/archives/50735275.html)ようにします。Quitを呼ばないと[Excel.exeが残ります](https://web.archive.org/web/20110405220235/https://technet.microsoft.com/ja-jp/scriptcenter/ff522015.aspx#8)。
[大してメモリ使わないし、サクッと終了する](https://qiita.com/int_main_void/items/8776cc4b9b05478273b3#%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7quit%E3%82%92%E5%91%BC%E3%82%93%E3%81%A7%E3%81%AA%E3%81%84%E3%81%91%E3%81%A9)ならSet X = NothingはなくてもOKです。