Excel VBAでグラフ作成を自動化させる
業務上よく装置が出力したテキストファイルから可視化する作業が多く手作業でグラフ作成するのが億劫なのでVBAを使って楽しようと思った次第です。
実現したい事
1.サーバーから取得した複数のファイルをマージする
2.マージしたファイルとマージ前のファイルは別フォルダで管理する
3.マクロを使いマージしたファイルのデータを整形する
4.何度も使いまわし可能なマクロファイルにしたい
5.ダイアログでファイルを開き任意のファイルからグラフを作成できるようにしたい
全体フロー
1.実現したい事で述べた1に関して、カレントディレクトリにマージしたい複数のファイルを格納する
2.バッチファイルを実行することによりファイルをマージし、ファイルを移動させる。
3.マージされたファイルを読み込みcsvファイルを生成する
4.csvファイルの内容を確認しデータに欠陥がないか確認する
5.csvファイルを読み込みグラフを作成する。
6.開発が完了したらbackupはVBCAで取得し、ソースコードはGithubで管理する
実装
マージされたファイルを読み込みcsvファイルを生成するコード
Option Explicit
Sub data_set()
Application.ScreenUpdating = False
'シートにデータがある場合は削除する
Call del
'グラフ作成用のデータを生成
Call file_open
Call writing2
Application.Quit
ThisWorkbook.Close
End Sub
Sub del()
Cells.clear
If ActiveSheet.ChartObjects.Count = 1 Then
ActiveSheet.ChartObjects.delete
Else
End If
End Sub
Sub file_open()
Application.ScreenUpdating = False
Dim txtName As String 'ダイアログで任意のファイルを開く
Dim buf As String
txtName = Application.GetOpenFilename("テキストファイル,*.log")
If txtName <> "False" Then '読み込みモードで file open
Open txtName For Input As #1
End If
Call writing1
End Sub
Sub writing1()
Application.ScreenUpdating = False
Dim r As Long
r = 1 '1行目から書き出す
'EOF関数でファイルを読み込む
Do Until EOF(1)
Dim buf As String
Line Input #1, buf
Dim arry1 As Variant
arry1 = Split(buf, ",")
Dim i As Long
For i = LBound(arry1) To UBound(arry1)
Cells(r, i + 1) = arry1(i)
Next
r = r + 1
Loop
Close #1
End Sub
Sub writing2()
Application.ScreenUpdating = False
'不要データの削除
Columns("C:F").delete
Columns("D").delete
Dim j As Variant
j = 1
Do While Cells(j, 3) <> ""
Cells(j, 4) = Replace(Cells(j, 3), ":", ";")
j = j + 1
Loop
Columns("C").delete
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Marge.csv", FileFormat:=xlCSV
ThisWorkbook.Close
End Sub
グラフ作成用のデータを作成するコード
Option Explicit
Sub single_macro()
Application.ScreenUpdating = False
'シートにデータがある場合は削除する
Call del
'グラフ作成用のデータを生成
Call file_open
Call writing2
'折れ線グラフ
'Call Graph1
'散布図
Call Graph2
End Sub
Sub del()
Cells.clear
If ActiveSheet.ChartObjects.Count = 1 Then
ActiveSheet.ChartObjects.delete
Else
End If
End Sub
Sub file_open()
Application.ScreenUpdating = False
Dim txtName As String
Dim buf As String
'ダイアログで任意のファイルを開く
'txtName = Application.GetOpenFilename("テキストファイル,*.csv")
'FILE PATHを指定
txtName = "C:\Users\darry\デスクトップ\TempGraph\temp_graph\bin\Marge.csv"
If txtName <> "False" Then '読み込みモードで file open
Open txtName For Input As #1
End If
Call writing1
End Sub
Sub writing1()
Application.ScreenUpdating = False
Dim r As Long
r = 1 '1行目から書き出す
'EOF関数でファイルを読み込む
Do Until EOF(1)
Dim buf As String
Line Input #1, buf
Dim arry1 As Variant
Dim arry2 As Variant
arry1 = Replace(buf, ";", ",") '置換
arry2 = Split(arry1, ",")
Dim i As Long
For i = LBound(arry2) To UBound(arry2)
Cells(r, i + 1) = arry2(i)
Next
r = r + 1
Loop
Close #1
End Sub
Sub writing2()
Application.ScreenUpdating = False
'不要データの削除
Columns("C").delete
Dim j As Variant
j = 1
'温度の計算
Do While Cells(j, 3) <> ""
Cells(j, 4) = Cells(j, 3) * 0.1
j = j + 1
Loop
Columns("C").delete
Columns("C").Select
Selection.NumberFormatLocal = "0.0"
'1行目に行を挿入する
Cells(1, 1).EntireRow.Insert
Range("B1").Value = "Time"
Range("C1").Value = "Runnung"
Range("D1").Value = "Not Runnung"
Columns("A:D").Select
Selection.AutoFilter
End Sub
グラフ作成用コード
Option Explicit
Sub Graph2()
Range("B1:D1").Select
Range(Selection, Selection.End(xlDown)).Select
'Graph_Create
ActiveSheet.Shapes.AddChart2.Select
'Graph_Type
ActiveChart.ChartType = xlXYScatter '散布図
'Add_Title
ActiveChart.HasTitle = True
'Title_Name
ActiveChart.ChartTitle.Text = "TEMP"
'時間軸の位置を下にする
ActiveChart.Axes(xlCategory).Select
Selection.TickLabelPosition = xlLow
With ActiveChart
.Axes(xlCategory).Select
'.Axes(xlCategory).MajorUnit = 0.041667 '1hr
'.Axes(xlCategory).MajorUnit = 0.0125 '3hr
.Axes(xlCategory).MajorUnit = 0.5 '12hr
.Axes(xlCategory).MinorUnit = 0.01
End With
End Sub
###【参考記事】
vbacでエクセルVBAのソースコードをGitバージョン管理する方法