VBAで円・楕円を描く

 レポートには直線や四角形のコントロールはあるものの、円のコントロールがありません。
 Excelなどで作った図形をコピペするという手もありますが、ここではVBAのCirlceメソッドにより描く例をみてみます。
 なお、以下の例ではページヘッダに描画するようにしていますので、ページヘッダのあるレポートを作っておくことが必要です(「レコードソースの値に基づく描画」を除く)。

描画例

基本的な描画(円と楕円)

f:id:accs2014:20190316050253p:plain:right:w600

 ページヘッダのあるレポートを作り、レポートモジュールに次のように記します。

Option Compare Database

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

    '1個目      中心座標    半径      赤色
    Me.Circle (2000, 1500), 500, RGB(255, 0, 0)
    '2個目      中心座標    半径      緑色         縦の拡大率
    Me.Circle (4000, 1500), 500, RGB(0, 255, 0), , , 1 / 2

End Sub

 このようにCircleメソッドにより円を描くことができます。中心点と半径の座標だけでも線は引けますが、ここでは線色も指定しています。
 座標はセクションの左上が起点(0,0)で、正の方向は右(x座標)及び下(y座標)です。単位はtwipです。
 線色は0(黒)から16777215(白)までの数値で指定することができます。この例のようにRGB関数を使うと指定が容易になります。
 また、2つ目の円では最後のパラメータで縦横比(縦/横)も指定しています。これにより楕円を描くことができます。

f:id:accs2014:20190316035521p:plain:right:w400

 印刷プレビューです。

Stepによる座標指定

 上記例と同様に、今度は次のように記します。

Option Compare Database

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

    CurrentX = 1500
    CurrentY = 1500

    '1個目      左上基準             赤色
    Me.Circle (2000, 2000), 500, RGB(255, 0, 0)
    '2個目      CurrentX,Y基準           緑色
    Me.Circle Step(2000, 2000), 500, RGB(0, 255, 0)
    
End Sub

 1個目の円は最初の例と同様に中心点を指定しています。
 2個目は、中心点の指定の際にStepを記すことにより、事前にCurrentX とCurrentYにより指定した座標を基準とする座標指定を行っています。

f:id:accs2014:20190316035518p:plain:right:w350

 印刷プレビューです。

線種指定

 レポートのDrawStyleプロパティにより線種を指定することもできます。

Option Compare Database

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

    'DrawStyleで線種指定 5は透明
    Me.DrawStyle = 0
    Me.Circle (1500, 1500), 450
    Me.DrawStyle = 1
    Me.Circle (2500, 1500), 450
    Me.DrawStyle = 2
    Me.Circle (3500, 1500), 450
    Me.DrawStyle = 3
    Me.Circle (4500, 1500), 450
    Me.DrawStyle = 4
    Me.Circle (5500, 1500), 450
    Me.DrawStyle = 5
    Me.Circle (6500, 1500), 450
    Me.DrawStyle = 6
    Me.Circle (7500, 1500), 450

End Sub

f:id:accs2014:20190316035515p:plain:right:w550

 印刷プレビューです。
 DrawStyleの値は左から順に0~6となっています。

線幅指定

 レポートのDrawWidthプロパティにより

Me.DrawWidth = 30

 といったように線幅を指定することが可能です。ただし、ちょっと太くすると線種の指定にかかわらず見た目が実線になってしまいますので注意してください。
 実例はここでは省略しますが下記の例(線幅・塗り色・塗りパターンの組み合わせ)で使用しています。

塗りパターン指定

 レポートのFillStyleプロパティにより円の内部の塗りのパターンを指定することもできます。

Option Compare Database

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

    'FillStyleで塗りパターン指定
    Me.FillStyle = 0
    Me.Circle (1500, 1500), 450
    Me.FillStyle = 1
    Me.Circle (2500, 1500), 450
    Me.FillStyle = 2
    Me.Circle (3500, 1500), 450
    Me.FillStyle = 3
    Me.Circle (4500, 1500), 450
    Me.FillStyle = 4
    Me.Circle (5500, 1500), 450
    Me.FillStyle = 5
    Me.Circle (6500, 1500), 450
    Me.FillStyle = 6
    Me.Circle (7500, 1500), 450
    Me.FillStyle = 7
    Me.Circle (8500, 1500), 450

End Sub

f:id:accs2014:20190316035513p:plain:right:w600

 印刷プレビューです。
 FillStyleの値は左から順に0~7となっています。

線幅・塗り色・塗りパターンの組み合わせ

 DrawWidthプロパティによる線幅指定、FillColorプロパティによる塗色指定、FillStyleプロパティによる塗りパターンを組み合わせた例です。

Option Compare Database

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

    '線幅指定
    Me.DrawWidth = 30
    '塗り色指定
    Me.FillColor = RGB(191, 191, 191)
    'ベタ塗り指定
    Me.FillStyle = 0
    '                         塗り色と異なる線色指定
    Me.Circle (1500, 1500), 450, RGB(63, 127, 127)
    Me.Circle (2500, 1500), 450, RGB(127, 63, 127)
    Me.Circle (3500, 1500), 450, RGB(127, 127, 63)

End Sub

f:id:accs2014:20190316035510p:plain:right:w350

 印刷プレビューです。

レコードソースの値に基づく描画

f:id:accs2014:20190316035545p:plain:right:w500

 レコードソースになっているテーブルやクエリの値を参照し、その値に応じた図形を描画する例です。
 このようなクエリをレコードソースとするレポートを作成し、人口の大きさに応じて大きくなる円を表示するものとします。

 レポートモジュールの内容は次のようになります。

Option Compare Database

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

    Me.FillStyle = 0
    Me.FillColor = RGB(0, 192, 192)
    Me.Circle (6000, 630), 1.5 * Sqr(Me.人口), RGB(0, 192, 192)

End Sub

 半径に「Sqr(Me.人口)」が掛かっていることで、人口が多いほど半径が大きくなるようになっています。

f:id:accs2014:20190316035542p:plain:right:w450

 印刷プレビューです。
 人口の値に応じて大きくなる円が描かれています。

Circleメソッドの構文

expression.Circle [Step] (中心点x , 中心点y),半径,[,色,始点,終点,縦横比]

 expressionにはレポートオブジェクトを記します。
 Stepを記すことでCurrentX,CurrentYを基準とする座標の指定を行うことができます。省略するとセクション左上端が基準となります。
 座標と半径の単位はtwipです(1in=1440twip。1cmは567twipに相当します)。
 色は0(黒)から16777215(白)までの値で指定します。上記例のようにRGB関数を用いるのが便利です。
 縦横比は楕円を描く際に指定します。「縦/横」の比率を指定することにより、横幅はそのままで、縦の高さを変化させることができます。
 
 なお、始点と終点は弧や扇形を描く際に指定します。これについては次の記事を参照してください。
www.accessdbstudy.net