この記事では、以下の画像のように3D等高線グラフをVBAを使って作成する方法をご紹介していきます。
基本的にあなたがやることは以下の3つだけでOKです。
①データの存在領域を指定する
②x,y,z軸のタイトルを指定する
③グラフ自体のタイトルを指定する
これだけで一瞬で上記のような3Dグラフを作成できます。
それではさっそくやっていきましょう。
データを準備しておく
実際の解説に入る前に、データがないとどうしようもありませんので、まずはデータ作成から始めましょう。
今回は以下の画像のように
=EXP(-(x^2+y^2))というデータを準備しました。
このデータを使って3D等高線グラフを作っていきましょう。
データの存在領域の指定方法
今回は以下のルールでデータの領域を指定するようにしています。
①一番上の行がx軸
②一番左の列がy軸
③セル内数値がz軸
このルールにのっとって処理が行われますので、あなたがやるべきことはこれらを含むすべての領域を指定してあげるだけです。
(上の画像で言うとA1セルからJ10セル)
3D等高線グラフを作成するVBAコード
それでは前置きはこのくらいにして実際のコーディング作業に入りましょう。
以下が冒頭で紹介したような3D等高線グラフを作成するVBAコードです。
Sub make_3d_surface()
Dim data_region As Range
Dim grf_name As String
Dim xtitle As String, ytitle As String, 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行ずつ読んでいけばざっくりと処理内容を理解できるはずです。
サンプルコードの実行結果
最後に先ほどのコードを実行してみましょう。
以下のグラフがシート上に出力されていました。
いい感じですね。
苦労しただけあって大満足です。
おわりに
というわけで今回はデータから3D等高線グラフを作成する方法をご紹介しました。
ぜひ業務効率化にご活用ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント