LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-08

概要

正規表現にマッチした部分を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

0
0
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
0