Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » 散布図を正多角形用にキレイにするExcelマクロ

散布図を正多角形用にキレイにするExcelマクロ

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2206 ビルド15330.20246 Microsoft Store)

『数学ガールの秘密ノート/丸い三角関数』を読んでいて、Excelの散布図を使って正多角形を描きたくなりました。

『数学ガールの秘密ノート/丸い三角関数』の「第4章 円周率を数えよう」では、アルキメデスが行ったという正96角形から円周率の近似値を求める数学トークが、主人公(僕)と僕の従妹であるユーリとの間で展開されます。

書籍と内容は一部異なりますが、Web連載「数学ガールの秘密ノート」の「円周率を数えよう(後編)」でも正96角形が登場するくだりを読めます。

この内容を読むうちに、正96角形がどれくらい円に近いのか、正48角形や正24角形ならばどれくらいなのかが気になってきたのです。

もちろん検索すれば正96角形・正48角形・正24角形の画像は見つかるのでしょうが、数学トークを読んで手元にはExcelがあるのですから、Excelで三角関数と散布図を使って正多角形を描くことにしました。

散布図で正多角形を描くExcel操作については、別記事として公開しています。

散布図を整えるサンプルマクロ

散布図を使って正多角形を描くこと自体は、SEQUENCE関数の登場によって楽になったのですけれど、作成した散布図を正多角形に相応しい状態に整えるのは、手作業で行うと少々面倒です。

そこで散布図を正多角形用にキレイにする以下のようなExcelマクロを作りました。

Sub 散布図を正多角形用にキレイにする()
On Error GoTo ErrHandl

 With ActiveChart
  .HasTitle = False
  .Parent.Width = .Parent.Height
  .PlotArea.Width = .PlotArea.Height

  Dim ax As Axis
  For Each ax In .Axes
   ax.MaximumScale = 1
   ax.MinimumScale = -1
   ax.HasMajorGridlines = False
   ax.TickLabelPosition = xlTickLabelPositionNone
  Next
 End With

Exit Sub
ErrHandl:
 MsgBox "ワークシート上の散布図をアクティブにしてから実行してください。"
 Err.Clear
End Sub

上図のような本当は正多角形なのに正多角形に見えない散布図をアクティブにしておいて、上述のExcelマクロを実行すると、下図のように正多角形らしくなります。

サンプルマクロで行っている処理内容

上記のマクロでは、拙著『理解するExcel VBA/グラフ操作の基本』で解説しているプロパティ等を使っています。

ActiveChartでChartオブジェクトを取得

まず、拙著でも繰り返し使用している、グローバルメンバーのActiveChartプロパティを使って、アクティブなグラフを表すChartオブジェクトを取得しています。

With ActiveChart

以後の処理では、すべてこのChartオブジェクトから辿れるグラフ関連のオブジェクトを使っています。

グラフタイトル・グラフエリア・プロットエリアの操作

With文の中では、最初に拙著「2-3. グラフタイトル」で解説しているChart.HasTitleプロパティを使ってグラフタイトルを非表示にして、

 .HasTitle = False

「1-2. ChartObjects.Addで埋め込みグラフを作成する」で解説している、ChartObject.WidthプロパティをChartObject.Heightプロパティと同じにすることで、グラフエリアを正方形にしています。

 .Parent.Width = .Parent.Height

このマクロはワークシート上に存在する埋め込みグラフの散布図がアクティブな状態で実行されることを想定しているので、ChartオブジェクトのParentプロパティを使ってChartObjectオブジェクトを取得しています。

同様に、拙著「2-2. グラフエリアとプロットエリア」で解説している、プロットエリアも正方形にしています。

 .PlotArea.Width = .PlotArea.Height

軸に関連する操作

グラフタイトル・グラフエリア・プロットエリアの設定が終わったら、軸に関連する操作です。

拙著「2-10-1. Axis(軸)を取得する」で使用しているのと同様、Chart.Axesメソッドで取得できる全ての軸を表すAxesコレクション(要素はAxisオブジェクト)に対し、For Each~Nextループを回します。

 Dim as As Axis
 For Each ax In .Axes

For Each~Nextループの中で、各軸の最大値と最小値をAxis.MaximumScaleプロパティとAxis.MinumuScaleプロパティを使って設定し、

  ax.MaximumScale = 1
  ax.MinimumScale = -1

拙著「2-10-4. Gridlines(目盛線)を操作する」で解説しているAxis.HasMajorGridlinesプロパティで目盛線を非表示にしてから、

  ax.HasMajorGridlines = False

Axis.TickLabelPositionにxlTickLabelPositionNoneを指定することで、軸の目盛ラベルを非表示にしています。

  ax.TickLabelPosition = xlTickLabelPositionNone

最終更新日時:2022-08-24 15:15

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » 散布図を正多角形用にキレイにするExcelマクロ

「グラフ・Chart」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.