2016年5月6日金曜日

チャート作成プログラムの実行時間

1. Excelシートの説明



   チャートを作成するプログラムの説明と動作確認をします。動作確認に使うExcelは以下のようになります。
 やりたいことは、
  1. チャートの作成
  2. チャートの削除
  3. チャートのデータ入力方法の確認
  4. チャート作成の時間
 そのために、「チャート作成」「チャート削除」のボタンを置きます。さらに、 A1~A20にRAND()で作った数値を入れておきます。これは、チャートで表示するためのデータです。




2. プログラムの説明

「チャート作成」ボタンのプログラムです。Timer関数を使って、プログラムの実行開始時間と実行終了時間を記録して、実行時間を計算します。その間にfor文でCreateChart()関数を実行します。これがチャートを作成する関数になっていて、繰り返し実行するのは実行時間を計算しやすいようにしています。最後に実行時間をM8に代入します。

Private Sub Create_Chart_Button_Click()

    Dim i As Integer
    Dim j As Integer
    Dim startTime As Variant
    Dim stopTime As Variant
    Dim exeTime As Variant

    startTime = Timer
    
     For i = 0 To 2
        For j = 0 To 50
            Call CreateChart(i, j)
        Next
    Next
    
    stopTime = Timer
    
    exeTime = stopTime - startTime
    
    Range("M8") = "実行時間は" & exeTime & "秒"

End Sub


「チャート削除」ボタンのプログラムです。シート上にあるチャートをすべて削除する関数を呼び出します。

Private Sub chart_Delete_Button_Click()

    ActiveSheet.ChartObjects.Delete

End Sub


チャートを作成する関数です。AddChart関数でチャートを追加します。引数は順番に、チャートタイプと、場所(Left, Top),サイズ(Width, Height)を指定します。 次に、SeriseCollection, NewSeriesを変数に入れます。デバッグしやすいように一つずつ変数に入れています。最後にチャートにデータを指定します。 ここで、指定する方法を3つ試しています。


  • シート上のRangeを指定して配置する方法
  • Stringで指定する方法
  • Arrayで指定する方法
Public Sub CreateChart(x_index As Integer, y_index As Integer)
    Dim size As Integer
    Dim ShapeObj As Shape
    Dim ns As Series
    Dim sc As SeriesCollection
    
    size = 200
    
    Set ShapeObj = ActiveSheet.Shapes.AddChart(xlLine, x_index * size, y_index * size, size, size)
    Set sc = ShapeObj.Chart.SeriesCollection
    Set ns = ShapeObj.Chart.SeriesCollection.NewSeries
    
'    ns.Values = Range("A1:A20")
    
'    ns.Values = "{  0.39027587  , 0.177445453 , 0.216884755 , 0.923649472 , 0.971322831 , 0.261088821 , 0.974577475 , 0.913186582 ," _
'                & " 0.366751825 , 0.311130149 , 0.179628318 , 0.3769544   , 0.710572627 , 0.370327454 , 0.491738795 , 0.604844844 ," _
'                & " 0.224992757 , 0.182349875 , 0.209868295 , 0.400079373 }"

    ns.Values = Array(0.39027587, 0.177445453, 0.216884755, 0.923649472, 0.971322831, 0.261088821, 0.974577475, 0.913186582, _
                        0.366751825, 0.311130149, 0.179628318, 0.3769544, 0.710572627, 0.370327454, 0.491738795, 0.604844844, _
                        0.224992757, 0.182349875, 0.209868295, 0.400079373)
                        
                        
End Sub



3.実行結果

 チャートを3 x 51個配置した結果です。実行時間は「0.746秒」となっていました。図を配置するという動作にはこれくらい時間がかかることがわかりました。実際にこのプログラムを応用するためには、ここから軸を追加したり、Seriesを増やしていくことになるが、実行時間を抑えるようにデバッグしながらコーディングしていきます。
 データの入力方法で実行時間が大きく変動するかを調べたかったが、あまり差はなさそうだったので、データ読み出しとの相性の良い方法を選んで使いたいと思います。



0 件のコメント:

コメントを投稿