Excel とせっかく連携するなら、Notes が苦手とするグラフを作成させたいですよね。これからしばらくは、Excel グラフの操作に関して整理します。
グラフを作成するには、Shapes オブジェクトの AddChart2 メソッドを利用します。
Sub Initialize Dim oXls As Variant Dim oSheet As Variant Dim oShape As Variant 'Excel の準備 Set oXls = CreateObject("Excel.Application") Call oXls.Workbooks.Add Set oSheet = oXls.Workbooks(1).WorkSheets(1) 'サンプルデータのセット Call xSetSampleData(oSheet) 'グラフの作成 Set oShape = oSheet.Shapes.AddChart2(, 4, 200, 1, 500, 200) oXls.Visible = True End Sub |
※ サンプルデータをセットする関数は後述
このコードを実行すると以下のようにグラフが表示されます。簡単ですね!
ただ、グラフの設定はすべてExcelが自動で行っており、タイトルは表示されていませんし、横軸のラベルは見ずらいです。”とりあえず”なグラフとなって美しくないですよね。
よりよいグラフとなるよう、少しずつ調整しましょう。
サンプルデータをセットする関数
サンプルデータを準備したり、初期登録するプログラムを作成するのも面倒ですし、毎回同じデータとなるのは面白くありません。
そこで、Rnd()関数で乱数を発生させ、動きを持たせています。乱数は、-3 ~ 6 までの範囲で生成していますので、右肩上がりのグラフになる算段です。
Function xSetSampleData(voSheet As Variant) Dim i As Integer Dim vDT As Variant Dim iUsr As Integer Dim iVal As Integer Dim iMax As Integer '列フォーマットの設定 voSheet.Columns(1).NumberFormatLocal = "yyyy/m/d" voSheet.Columns(2).NumberFormatLocal = "#,##0_ " voSheet.Columns(3).NumberFormatLocal = "#,##0_ " 'ヘッダ行のフォーマット設定 voSheet.Rows(1).NumberFormatLocal = "@" 'カラム名称の設定(ヘッダ行) voSheet.Cells(1, 1).Value = "日付" voSheet.Cells(1, 2).Value = "ユーザ数" voSheet.Cells(1, 3).Value = "増減" 'サンプルデータの設定 Randomize iMax = 30 vDT = Today - iMax iUsr = 100 For i = 2 To iMax + 1 vDT = vDT + 1 iVal = Int(Rnd()*10) - 3 iUsr = iUsr + iVal voSheet.Cells(i, 1).Value = vDT voSheet.Cells(i, 2).Value = iUsr voSheet.Cells(i, 3).Value = iVal Next End Function |
余談ですが、乱数と言っても本当の意味にで乱数ではないそうです。一般に乱数テーブルを参照し順に値を返す仕様と聞いたことがあります。乱数発効前に実行している Randmize はシステム時刻(タイマー)を使用して、乱数テーブルの読み方を指示する命令で、これにより、”ほぼ”乱数を発生しているということだそうです。
前回 | Notes - Excel 連携 | 次回 |
0 件のコメント:
コメントを投稿