この記事では、エクセル上にあるグラフの参照データを、VBAを使って自動で書き換えていくことによって、グラフをパラパラ漫画のように動かしていく方法をご紹介します。
この記事の内容をマスターすれば、エクセルベースで資料作成した際に、時系列データを可視化するのに役立つはずです。
とはいえ、実際にありそうなデータを使って解説するのもおもしろくないので、今回は少し遊んでみることにします。
私は自動車が好きなので、エンジン内部のピストン上下運動をエクセルグラフ上でパラパラ漫画にしてしてみようと思います。
エクセルVBAのスキルと同時に、エンジンのピストンモーションまで勉強できる一石二鳥の記事になっています。
ぜひ最後までご覧ください。
それでは早速やっていきます!
事前準備:グラフの準備
今回のメインテーマはグラフデータを自動で動かすということです。
ですので、まずはグラフがないと始まりません。
というわけで、今回は散布図で以下のようなグラフを準備しました。
この画像上の、ピストン形状を再現しているセルを(B11セルからG11セルまで)VBAをつかって自動で書き換えていくことによって、オレンジの線を処理ステップごとにパラパラ漫画のように動かしていきます。
ピストンの上下運動の式
ピストンの位置は以下の式で表すことができます。
x:クランク軸中心からの距離
r:クランク半径
θ:クランク角度(ピストンが一番上にあるときが0deg)
l:コンロッド長
※詳細は以下のサイトを参考にさせていただきました。
今回はこの数式を用いて、クランク角度に応じたピストン位置を計算していきたいと思います。
グラフをパラパラ漫画のように動かす方法
今回は先ほども少し説明しましたが、グラフ上でピストン位置形状を表現している参照データをVBAでステップごとに書き換えることによって、ピストンの上下運動をパラパラ漫画にしていきます。
◆グラフをパラパラ漫画にするVBAコード
Sub Piston_motion()
'変数の型を宣言
Dim r_len As Single, l_len As Single
Dim deg_val As Integer
'クランク半径、コンロッド長を宣言
r_len = 50
l_len = 150
'ピストン形状データの配列を準備
Dim piston(5) As Variant
'ピストン移動処理開始
For deg_val = 0 To 720
theta_rad = WorksheetFunction.Radians(deg_val)
cos1 = Cos(theta_rad)
sin1 = Sin(theta_rad)
'ピストン位置を算出
x = r_len * cos1 + Sqr(l_len ^ 2 - (r_len * sin1) ^ 2) - 200
'グラフ用データに反映
piston(0) = -20 + x
piston(1) = 0 + x
piston(2) = 10 + x
piston(3) = 0 + x
piston(4) = -20 + x
piston(5) = -20 + x
'エクセルシートに反映
Range("B11:G11") = piston
Application.Wait [Now()] + 0.001 / 86400
DoEvents
Next
End Sub
コード中の何が行われているのかについては、コード中にコメントアウトで記述していますので、なんとなく何をやっているのかわかるはずです。
ぜひ1行ずつ追いかけてみてください。
基本的には、
①ピストンの位置を計算
②エクセルシートに反映
③グラフが動く
という作業をクランクアングル1度ごとに0度から720度まで行っているだけです。
すべての準備が整いましたので、最後に実際にこのコードを動かしてみましょう。
こんな感じでピストンが上下運動しているはずです。
※実際のエクセル上では2往復しかしません。
ぜひあなたも一度この記事の内容を完全コピーしてやってみてください。
けっこうおもしろいですよ。
おわりに
というわけで今回はエンジンのピストン上下運動を事例に、エクセルのグラフをパラパラ漫画のように動かす方法をご紹介しました。
業務の説明資料につかえるのはもちろん、家でお子さんと遊ぶ際にも活躍するスキルですので、ぜひ一度自分の手を動かしてやってみましょう!
このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント