【エクセルVBA】自動で3D-等高線グラフを作成する方法!領域指定するだけ!

この記事では、以下の画像のように3D等高線グラフをVBAを使って作成する方法をご紹介していきます。

VBAで3D等高線グラフを作成するという概要図

 

基本的にあなたがやることは以下の3つだけでOKです。

①データの存在領域を指定する

②x,y,z軸のタイトルを指定する

③グラフ自体のタイトルを指定する

これだけで一瞬で上記のような3Dグラフを作成できます。

 

それではさっそくやっていきましょう。

 

スポンサーリンク

データを準備しておく

実際の解説に入る前に、データがないとどうしようもありませんので、まずはデータ作成から始めましょう。

 

今回は以下の画像のように

=EXP(-(x^2+y^2))というデータを準備しました。

3D等高線グラフを作成する際に使用するデータの紹介

 

このデータを使って3D等高線グラフを作っていきましょう。

 

スポンサーリンク

データの存在領域の指定方法

今回は以下のルールでデータの領域を指定するようにしています。

①一番上の行がx軸

②一番左の列がy軸

③セル内数値がz軸

3D等高線グラフを作成するときの領域指定ルールの概要

このルールにのっとって処理が行われますので、あなたがやるべきことはこれらを含むすべての領域を指定してあげるだけです。

(上の画像で言うとA1セルからJ10セル)

 

スポンサーリンク

3D等高線グラフを作成するVBAコード

それでは前置きはこのくらいにして実際のコーディング作業に入りましょう。

以下が冒頭で紹介したような3D等高線グラフを作成するVBAコードです。

 

Sub make_3d_surface()
    Dim data_region As Range
    Dim grf_name, xtitle, ytitle, ztitle As String
    
    'グラフ化する領域を指定する
    Set data_region = Range("A1:J10")

    'グラフ化する際の情報取得
    grf_title = "3D-等高線"
    xtitle = "x"
    ytitle = "y"
    ztitle = "z"
    num_col = data_region.Columns.Count
    num_row = data_region.Rows.Count
    grf_name = "3d_surface"
    
    'グラフ化作業開始
    data_region.Select
    ActiveSheet.Shapes.AddChart2(307, xlSurface).Select
    Selection.Height = 300
    Selection.Width = 400
    
    'グラフの表示形式を調整
    For i = 1 To num_row - 1
        xlabel = xlabel & s & data_region(1, i + 1) & s & ","
    Next
    
    For i = 1 To num_col - 1
        s = """"
        bbb = "=" & s & data_region(i + 1, 1) & s
        ActiveChart.FullSeriesCollection(i).Name = bbb
    Next
    
    With ActiveChart
        .Parent.Name = grf_name
        .ChartTitle.Text = grf_title
        .FullSeriesCollection(1).XValues = "={" & Left(xlabel, Len(xlabel) - 1) & "}"
        .Axes(xlSeries).TickLabelSpacing = 1
        .ChartStyle = 311
        .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = xtitle
        .SetElement (msoElementSeriesAxisTitleRotated)
        .Axes(xlSeries, xlPrimary).AxisTitle.Text = ytitle
    End With
    
    With ActiveSheet.ChartObjects(grf_name).Chart.Axes(xlValue, xlPrimary)
        .HasTitle = True
        .AxisTitle.Text = ztitle
    End With
    
End Sub

 

かなり長いですね・・・。

正直これを書くのにかなり苦労しました。

複雑なことをやっていますが、コメントをつけていますので1行ずつ読んでいけばざっくりと処理内容を理解できるはずです。

 

スポンサーリンク

サンプルコードの実行結果

最後に先ほどのコードを実行してみましょう。

 

以下のグラフがシート上に出力されていました。

VBAで3D等高線グラフを作成した結果

いい感じですね。

苦労しただけあって大満足です。

 

スポンサーリンク

おわりに

というわけで今回はデータから3D等高線グラフを作成する方法をご紹介しました。

ぜひ業務効率化にご活用ください。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。

⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました