LoginSignup
0
1

More than 5 years have passed since last update.

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

Posted at

概要

正規表現にマッチした部分をExcelに書き出す + プロットする - Qiitaに若干手を加えて、階段グラフにしてみます。

plot2.gif

以下の記事を参考にしています。
Excelで階段グラフを描く方法 - それ、僕が図解します。

使ったデータ

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

使った正規表現

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

コード

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)の流れで閉じるようにします。Quitを呼ばないとExcel.exeが残ります
大してメモリ使わないし、サクッと終了するならSet X = NothingはなくてもOKです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1