第24講 各種グラフの作成
第3話 知らなくてどうしてプログラミングできてしまうの?
Private Sub CommandButton1_Click()
  Dim x As Single, y As Single
  Dim cn As Integer
  cn = 0
  For x = -9 To 9 Step 0.01
    y = x * x
    Cells(1 + cn, 1) = y
    cn = cn + 1
  Next
  ActiveSheet.Shapes.AddChart2(227, xlLineMarkers, 100, 100, 200, 500).Select
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$A$1800")

End Sub
ピンクの部分については、
私も知りませんでした。
でも、知らなくてもプログラミングできます。
では、どうやったのでしょうか。
マクロに詳しい方は、『多分〜を使ったんだろう』と予想できますよね。
そうです。〜を使ったのです。
そして、〜から学んだのです。
解答は、30行下に示します。






















〜はマクロの記録です。
では、皆さんご一緒にやってみましょう。
  Dim x As Single, y As Single
  Dim cn As Integer
  cn = 0
  For x = -9 To 9 Step 0.01
    y = x * x
    Cells(1 + cn, 1) = y
    cn = cn + 1
  Next
については、解説は必要ありませんね。
A1に
q
という表を作らせただけです。
問題は、この表からどのようにしてグラフを作らせるかです。
まず、コードを
Private Sub CommandButton1_Click()
  Dim x As Single, y As Single
  Dim cn As Integer
  cn = 0
  For x = -9 To 9
    y = x * x
    Cells(1 + cn, 1) = y
    cn = cn + 1
  Next

End Sub
として、実行して表
wを作っておいて下さい。
それで、e開発タブを選び、
シートのどこかをクリックします。どこでも結構ですから、
C4辺りでもクリックして下さい。
クリックすると
rマクロの記録ができるようになります。
以降、マクロの記録クリック→
tOK→yA1からA19までドラッグで範囲指定→
u挿入→iおすすめグラフ
o→赤い囲いを選んでからOK
の順に進めます。
p
さらに、グラフの縦横の長さを調節して、
aとしてから、
s
開発→記録終了
の順に進めます。
すると、『記録終了』は『マクロの記録』に戻っています。
この状態でAlt+F11でVBAに戻り、
m
標準モジュールを選ぶと、Module5等が出ています。
ただし、最初からご自分で作った方はModule1のみとなっているはずです。
添付ファイルの参考ダウンロード添付ファイルから作った方は、
上の図のようになっているでしょう。
添付ファイルが4つのモジュールがすでに出来てしまっている理由は、
講義をするために私が4回試行錯誤をしたためです。
さて、Module1などの該当モジュールをクリックすると、
Sub Macro1()
'
' Macro1 Macro
'

'
  Range("A1:A19").Select
  ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$A$19")
  ActiveSheet.Shapes("グラフ 3").ScaleHeight 1.7777777778, msoFalse, _
    msoScaleFromBottomRight
  ActiveSheet.Shapes("グラフ 3").ScaleHeight 1.333984375, msoFalse, _
    msoScaleFromTopLeft
  ActiveSheet.Shapes("グラフ 3").ScaleWidth 0.60625, msoFalse, msoScaleFromTopLeft
End Sub
というコードが出来ているはずです。
もちろん、コードの内容はそれぞれ微妙に変わっているはずです。
先ほどの『マクロの記録』における一連の操作とコードを比較することによって、
  Range("A1:A19").Select
は、A1からA19までドラッグで範囲指定
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$A$19")
は、
p
グラフを作る操作なのだろうと予想でしますし、
その後のコードは縦幅・縦幅の調整をやっているだろうと、推測できます。
そして、一番のメインは
  ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
なのだということを予測することは決して困難ではありません。
そこで、ActiveSheet.Shapes.AddChart2をコピーしてGoogle等の検索サイトで検索します。
すると、
n
赤い囲いがランキング上位に出てくるはずです。
赤い囲いを選ぶと、
b
v
というマイクロソフトのページが出てきます。
このページを読むことによって、
  ActiveSheet.Shapes.AddChart2(227, xlLineMarkers, 100, 100, 200, 500).Select
のそれぞれのパラメータ
227, xlLineMarkers, 100, 100, 200, 500, False
は順にグラフのスタイル、グラフの種類、グラフの左端の位置、
グラフの上端の位置、グラフの横幅、グラフの縦幅を意味していたことが、
予想できたわけです。
さらに、
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$A$19")
がグラフを作る際の基データであろう、と考えることは容易といえます。
SetSourceData Source:のスペルが入っているのですから。
以上を学べば、
Sub Macro1()
はもはや不要ですので、全文削除してしまいましょう。

以上の過程を通して
Private Sub CommandButton1_Click()
  Dim x As Single, y As Single
  Dim cn As Integer
  cn = 0
  For x = -9 To 9 Step 0.01
    y = x * x
    Cells(1 + cn, 1) = y
    cn = cn + 1
  Next
  ActiveSheet.Shapes.AddChart2(227, xlLineMarkers, 100, 100, 200, 500).Select
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$A$1800")

End Sub
というコードが完成したのです。
以下いろいろなグラフを作っていきますが、
同様にして、マクロの記録から学んでいけば、
よいわけです。
慣れていけば、マクロの記録など要らなくなるでしょう。
尚、 Step 0.01 を入れた理由はグラフのかくかくをなくすためです。
$A$1800の1800もデータ数が9×2÷0.01=1800からすぐに計算できます。

では、皆さん今回学んだ手法を利用して、サインのグラフを作って下さい。
l
サインはy = Sin(x) です。


第2話へ 第4話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ