2023/06/04

Notes - Excel 連携:#11)グラフの作成

Excel とせっかく連携するなら、Notes が苦手とするグラフを作成させたいですよね。これからしばらくは、Excel グラフの操作に関して整理します。

グラフを作成するには、Shapes オブジェクトの AddChart2 メソッドを利用します。

Shapes.AddChart2 メソッド (Excel)

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 件のコメント:

コメントを投稿