表計算ソフトExcelのグラフをVBAで動的に描画してアニメーション的に動かしてみました。
グラフを動的に描画する方法は、次の二つが考えられます。
(1)グラフを1プロットずつ増やして再描画する事を繰り返す。
(2)グラフのデータを変数に格納して1データずつ追加していく。
グラフを1プロットずつ増やして再描画する方法
この例では、グラフシート”Graph1″とデータのシート”Sheet1″を用意しています。
グラフシート上に配置された”Start”ボタンをクリックするとグラフの描画が開始されます。
グラフを再描画するVBAマクロ”Plot_Chart()”は下記のコードになります。実際にグラフを動的に描写している箇所は、For 〜 Nextの間の処理になります。
Sub Plot_Chart()
Dim mySh As Chart
Set mySh = Charts("Graph1")
Dim i As Long
Const dataCount As Long = 302
With mySh
ActiveChart.SeriesCollection(1).Select
Selection.MarkerStyle = -4142
ActiveChart.SeriesCollection(2).Select
Selection.MarkerStyle = -4142
ActiveChart.ChartArea.Select
ActiveChart.Axes(xlCategory).MaximumScale = 400
ActiveChart.Axes(xlValue).MaximumScale = 7
ActiveChart.Axes(xlValue).MajorUnit = 0.5
ActiveChart.Axes(xlValue).MinorUnit = 0.1
ActiveChart.Axes(xlValue).MinimumScale = 0
For i = 2 To dataCount
Application.Wait [Now() + "00:00:00.01"]
ActiveChart.SetSourceData Source:=Worksheets("Data1").Range(Worksheets("Data1").Cells(2, 1), Worksheets("Data1").Cells(i, 3)), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""A"""
ActiveChart.SeriesCollection(2).Name = "=""B"""
DoEvents
Next i
End With
Set mySh = Nothing
End Sub
データを変数に格納して追加していく方法
もう一つの「データを変数に格納して追加していく方法」は、”Sheet1″シート1つで構成しています。
“グラフ描画”ボタンをクリックすると、動的な描画が始まります。
下記がVBAマクロの”plot_data()”のコードです。
まずB41からD60のセルを変数に格納します。
次に一定間隔の時間で、B41からD60のセルに値を戻します。
これてグラフを動的に描いている様に見える仕組みです。
plot_data()
Dim myDataRange1 As Range
Dim countRange1 As Range
Dim myArea1 As Variant
Dim myCount1 As Long
Dim i As Long
Const dataCount1 As Long = 60
Set myDataRange1 = Range(Sheets("Sheet1").Cells(41, 2), Sheets("Sheet1").Cells(dataCount1, 4))
myCount1 = myDataRange1.Count
ReDim myArea1(1 To 1, 1 To myCount1)
For Each countRange1 In myDataRange1
i = i + 1
myArea1(1, i) = countRange1.Value
Next countRange1
myDataRange1.ClearContents
For Each countRange1 In myDataRange1
k = k + 1
Application.Wait [Now() + "00:00:00.01"]
countRange1.Value = myArea1(1, k)
Next countRange1
Set myDataRange1 = Nothing
End Sub
この方式は、グラフ描画中に中断したりするとセルの値が失われてしまう可能性があるので、オリジナルのデータを別のセルに記述しておき、ロードできるマクロ”data_load”も念のため用意しておきます。
Sub data_load()
Range("F41:H60").Select
Selection.Copy
Range("B41").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
まとめ
以上、エクセルのグラフをアニメーション的に動かす方法を紹介しました。途中で処理を中断したい場合は、ESCキーを押して表示されたメニューで終了を選択します。またグラフを描くスピードは、Application.Waitの時間間隔で設定していますが、パソコンの性能に依存し、正確ではありませんので、使用環境にあわせて調整しましょう。
Sponsored Link