[Excel]VBAでレーダーチャートを作る - FB post for mutter

[Excel]VBAでレーダーチャートを作る

| コメント(0) | トラックバック(0)

ExcelのVBAによるグラフ作成です。今回は、少し変わり種です。『レーダーチャート』を書いてみます。
個人的にはたまに利用するグラフですが、資料を作る上でたびたび登場するタイプのグラフではありません。その分、公開されている情報も少ない様です。

基本的な仕様は、

[Excel]VBAでインライングラフを作成する
[Excel]VBAでインライングラフを作成する2

と同じです。

多くのグラフでは、縦軸, 横軸それぞれ1つづつのデータを持ち、それを視覚化しますが、レーダーチャートの場合、縦軸に対して複数に横軸の項目があり、それぞれの項目を並列的に扱いたい場合に使用します。
一般的には、特殊なデータ形式を表現するため、使用頻度が少なくなりがちです

今回用意したデータは、珈琲の味覚を示すデータを基に、レーダーチャートを作成するパターンです。1つのアイテムに対して、

  • 香り
  • 甘み
  • 苦味
  • 酸味
  • コク

と言ったそれぞれに別の意味を持ち、かつそれが揃ってはじめて1つのアイテムの特徴を表す。この様なデータにはピッタリのグラフです。

このパターンで解決しなければならない事は、

  • アイテム毎に複数ある項目をどの様に定義付けるのか。
  • 項目事に単位が変わってしまう場合、どの様に対応すれば良いのか。

あたりでしょうか。下の項目は、グラフを作る過程と言うよりは表現上の方法論の話しなので、直接的な話しではありません。
基本的には、今まで学んだ知識だけでどうにかなる様に感じられます。

いつもの様に、先ずは『マクロの記録』を取り、その情報から他のグラフと同様な仕様に落とし込んで行きます。

完成版

まずは、完成版をご覧ください。
今回もデータは架空のものです。特定の珈琲屋をイメージしている訳でもありませんし、特定のブレンドをイメージした物でもありません。
が、敢えて言えば。個人的にはDブレンドが好みかな。

完成版のExcel画面

典型的なレーダーチャートタイプのグラフだと思います。

グラフ部分

グラフ部分だけ見ていると、もう少し細かい体裁編集ができれば良いのにな。
と、少し贅沢な事も感じて来ます。

完成版ソース

次に、完成版のソースをご覧いただきます。実にシンプルで、特に説明が必要な場所も見当たらないと思いますが、一応追いかけて説明します。

Sub NewGraph4()
    ' 変数定義
    Dim i As Integer

    ' グラフの削除
    For i = ActiveSheet.ChartObjects.Count To 1 Step -1
         ActiveSheet.ChartObjects(i).Delete
    Next i

    ' グラフエリア確保
    ActiveSheet.Shapes.AddChart.Select

    ' レーダーチャートをつくる
    ActiveChart.ChartType = xlRadar

    ' グラフは J2~N15 の範囲に入れる
    ActiveChart.Parent.Top = ActiveSheet.Range("J2:N15").Top
    ActiveChart.Parent.Left = ActiveSheet.Range("J2:N15").Left
    ActiveChart.Parent.Height = ActiveSheet.Range("J2:N15").Height
    ActiveChart.Parent.Width = ActiveSheet.Range("J2:N15").Width

    ' データソースを指定
    ActiveChart.SetSourceData _
      Source:=Range("A2:F6"), _
      PlotBy:=xlRows

    ' タイトルを設定する
    With ActiveSheet.ChartObjects(1).Chart
        .HasTitle = True
        With .ChartTitle
            .Text = Range("A1").Value
            .Format.TextFrame2.TextRange.Font.Size = 12
        End With
    End With

    ' カーソルをA1へ移動
    Range("A1").Select
End Sub

変数定義~グラフエリアの確保

既にグラフが存在している事を想定し、グラフの削除を行います。
今回は、データソースのエリアを固定にしたため、データソースのサイズを探す処理は入れてありませんが、X軸方向, Y軸方向それぞれ複数データ対応とし、データソースのサイズを探す処理を入れても良いと思います。

' 変数定義
Dim i As Integer

' グラフの削除
For i = ActiveSheet.ChartObjects.Count To 1 Step -1
     ActiveSheet.ChartObjects(i).Delete
Next i

' グラフエリア確保
ActiveSheet.Shapes.AddChart.Select

グラフのタイプを設定

今回は、レーダーチャートを指定します。

' レーダーチャートをつくる
ActiveChart.ChartType = xlRadar

グラフを配置する位置と大きさ

セルの領域に併せてグラフ領域を指定する定義です。

' グラフは J2~N15 の範囲に入れる
ActiveChart.Parent.Top = ActiveSheet.Range("J2:N15").Top
ActiveChart.Parent.Left = ActiveSheet.Range("J2:N15").Left
ActiveChart.Parent.Height = ActiveSheet.Range("J2:N15").Height
ActiveChart.Parent.Width = ActiveSheet.Range("J2:N15").Width

データソースの指定

元となるデータの領域を指定します。今回は、エリアのサイズを固定にしました。

' データソースを指定
ActiveChart.SetSourceData _
  Source:=Range("A2:F6"), _
  PlotBy:=xlRows

可変にすると、

' 変数定義
Dim table_bc As Integer, table_br As Integer

' 表のサイズを調べる
Range("A2").CurrentRegion.Select
table_bc = Selection(Selection.Count).Column
table_br = Selection(Selection.Count).Row

' データソースを指定
ActiveChart.SetSourceData _
  Source:=Range(Cells(2, 1), Cells(table_bc, table_br)), _
  PlotBy:=xlRows

こんなコードになると思います。

タイトルを指定する

Excelの画面上で実行した時には、タイトルが付いていましたが、VBAで実行したらタイトルがついていかったので、タイトルを追加するコードを入れました。
タイトル文字列は、セル上から取得する様にしました。

' タイトルを設定する
With ActiveSheet.ChartObjects(1).Chart
    .HasTitle = True
    With .ChartTitle
        .Text = Range("A1").Value
        .Format.TextFrame2.TextRange.Font.Size = 12
    End With
End With

このコードも(似たコードも)既に学んだパターンです。
コードが長くなったので、WithEnd Withで積極的に省略可しました。

カーソルをA1へ戻す

必要なコードは全て書けたので、カーソルをA1へ戻して置きます。

' カーソルをA1へ移動
Range("A1").Select

これで全て完了です。実にシンプルでした。
グラフ作成は、パーツ毎にパターンがあって、そのパターンを組み合わせて上げると、様々なハーツを付け加える事がでぎ。と言う事が分かって来ました、

トラックバック(0)

トラックバックURL:

コメントする

サムネイル

[Excel]VBAでレーダーチャートを作る - FB post for mutter
RSS 0.91
RSS 0.92
RSS 1.0
RSS 2.0
ATOM

twitter

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 6.3.3

このブログ記事について

このページは、いまい やすゆきが2017年2月 3日 16:04に書いたブログ記事です。

ひとつ前のブログ記事は「[Excel]VBAで組み合わせグラフを作る」です。

次のブログ記事は「[Excel]VBAで株価チャート(ローソク足)を作る」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。