※注意 : 今日の内容はマニアックです。 ごめんなさいごめんなさい。
【Excel + VBA でグラフを描こう】
フーリエ解析のレポートの中に、

のグラフを描け …… みたいな課題がありました (本当は g (x ) の式も導かなきゃいけないんだけど)。
◆
恐らく、理系のひとがグラフを描くときには、C 言語 (または Fortran) + gnuplot という組み合わせが一般的だと思います。 …… Unix の世界ではね。
しかし!!
gnuplot を Windows で使おうとすると、gz ファイルの解凍とかが面倒だし (←おい!)、ほら、C 言語ってなんかプロ仕様の言語じゃん。
もっと簡単にやりたいのです。
そこで考えました。
Windows ユーザーが手軽にグラフを描くときに用いるソフトとして、まず思い浮かぶのが Microsoft Excel。
お店やさんでパソコンを買うと、Microsoft Office がプリインストールされている。 つまり、実質タダで手に入るソフトです。
今回は、Excel だけを使ってグラフを描いてみようではありませんか!!
◆
Excel には、標準で Visual Basic for Applications (以下 VBA) というプログラミング言語が附属しています。
文法は Visual Basic にそっくりです。
お金がなくて Visual Studio が買えなかった高校時代、実質タダの Excel VBA でプログラミングごっこをして遊んだものです (3年前、Visual Studio はタダではなかった)。
閑話休題。
今回は VBA で座標データを大量に生成し、Excel のグラフ描画機能を駆使してステキグラフを描こうという方針です。
ただし、x 軸は -5 ~ 5 の範囲に限定します (←大した意味はないよ)。
◆
まずは、Excel を起動しましょう。
VBA は、まがりなりにもプログラム言語なので、それ相応に危険なモノを作る事もできてしまいます。
そのため、初期状態では プログラムの実行がかなり制限されるような設定がなされています。 この設定を解除してしまいましょう。
[ツール (T)] → [オプション (O)] をクリック。

オプション画面が出現します。
[セキュリティ] タブの、[マクロ セキュリティ (S)] をクリック。
[中 (M)] または [低 (L)] を選択して、[OK] をクリックしましょう。
今回は、それほど危険な実験ではないので、[低 (L)] を選択しても大丈夫です。
オプション画面は、[×] または [OK] で閉じましょう。
いよいよ、プログラミングを始めます。 ワークシート画面に戻りましょう。
[表示] → [ツールバー] → [Visual Basic] をクリック。
すると、こんなの (↓) が出てきます。
Visual Basic Editor (以下、VBE) アイコンをクリックしましょう。
VBE という開発ツール (↓) が起動します。

ちょっと解りづらいですが、[▼] → [標準モジュール (M)] をクリックしてください。

赤枠内の領域に、以下のソースを入力しましょう。
Option Explicit
Sub DataOutPut()
Const dx As Double = 0.001
Const MIN As Integer = -5
Const MAX As Integer = 5
Dim x As Double
Dim y As Double
Dim i As Integer
x = MIN
For i = 1 To Round((MAX - MIN) / dx, 0) Step 1
y = g(x)
Cells(i, 1).Value = x
Cells(i, 2).Value = y
x = x + dx
Next
Range(Cells(1, 1), Cells(i - 1, 2)).Select
End Sub
Function g(ByVal x As Double) As Double
Dim n As Integer
Dim y As Double
For n = 1 To 100 Step 2
y = y + Sin(n * x) / n
Next
g = y * 4 / Application.WorksheetFunction.Pi()
End Function
入力したら、[×] をクリックして VBE を閉じます。 べつに、保存しなくてもかまいません。 してもいいけど。
それではさっそく、プログラムを実行してみましょう。
Visual Basic ツールバーの [マクロの実行] アイコン を押すと、こんな画面が出てきます (↓)。
[実行 (R)] をクリック。
すると、大量のデータがセルに書き込まれます。
実行直後は、入力されたデータが全て選択されている状態なので、このままグラフを描く事ができます。
いよいよグラフを描きますよー ヽ(´ー`)ノ

グラフウィザードのアイコンをクリックしましょう。
今回は、散布図を描きます。
プロットした点を、なめらかな曲線で結ぶタイプです。
完成品:

おまけとして、「データの生成は VBA じゃなくて C がいいな」 という人のために、C のソースも載せておきます。 『続きを読む』 をクリックしてくださいね。
最近のコメント