データを確認したりグラフにしたりってのをよくやる
この書き出したデータを基にして物体の動きの軌跡をオートシェイプで簡単に描画したい
結構簡単だったけど、忘れそうなのでメモ
やりたいこと
セルからデータを読み込み、二次元座標で質点の位置を描画する
オートシェイプの追加方法
直線と円形の二つだけメモ直線の図形を追加
'線の作成 With ActiveSheet.Shapes.AddLine(FromX, FromY, ToX, ToY).Line .Visible = msoTrue '線の有無(今は有り) .Style = msoLineSingle '線の種類(実線) .ForeColor.RGB = RGB(0, 0, 0) '線の色(今は黒) .Transparency = 0 '線の透明度(今は0) .Weight = 1 '線の太さ End With
円形の図形を追加
'球の作成(shapeX=左上x座標、shapeY=左上y座標、shapeW=図形幅、shapeH=図形高さ) Set myShape = ActiveSheet.Shapes.AddShape(Type:=shapeType, _ Left:=shapeX, Top:=shapeY, Width:=shapeW, Height:=shapeH) '今作ったシェイプを選択 myShape.Select '塗りつぶしの設定 With Selection.ShapeRange.Fill .Visible = msoTrue '塗りつぶしの有無(今は有り) .ForeColor.RGB = RGB(50, 50, 50) '塗りつぶしの色(今は灰色) .Transparency = 0 '塗りつぶしの透明度(今は透明度0) End With '線の設定 With Selection.ShapeRange.Line .Visible = msoTrue '線の有無(今は有り) .Style = msoLineSingle '線の種類(実線) .ForeColor.RGB = RGB(0, 0, 0) '線の色(今は黒) .Transparency = 0 '線の透明度(今は0) .Weight = 1 '線の太さ End With
エクセルのセルからデータを読み込む
ここでは倍精度浮動小数点(double型)を読み込むとするデータはエクセルに
といった感じで書き出しているとする
・まずはデータを保管する配列を用意
(配列にしないで次の値を上書きするんでもいいけど、1個前or1個後のデータを使って描画したいときも多いと思うので配列に全部入れちゃいます)
VBAでの変数宣言と配列変数宣言の形式は以下の通り
変数宣言
Dim x1 As Double 'double型の変数x1を宣言 Dim x2 As Single 'float型の変数x2を宣言 Dim x3 As Integer 'int型の変数x3を宣言 Dim x4 As Long 'long型の変数x4を宣言 Dim x5 As String 'string型の変数x5を宣言
配列宣言
Dim x() As Double 'double型の配列xを宣言 ReDim x(100) 'xの配列サイズを100にする
セルからデータを読み込む
Dim x() As Double 'double型の配列xを宣言 ReDim x(100) 'xの配列サイズを100にする Dim y() As Double 'double型の配列yを宣言 ReDim y(100) 'yの配列サイズを100にする Dim z() As Double 'double型の配列zを宣言 ReDim z(100) 'zの配列サイズを100にする 'データ読み込み(セルは1からスタートなので注意) For i = 1 To 100 x(i) = ActiveSheet.Cells(i, 2).Value y(i) = ActiveSheet.Cells(i, 3).Value z(i) = ActiveSheet.Cells(i, 4).Value Next
割と簡単にできた(実は半日かかったけど)
それから数字(や文字)をユーザー入力から読み込む方法
Dim input As Integer input = InputBox("整数を入力してください")
すでに作られているオートシェイプを消す方法(円と線の図形のみ消す)
'全てのシェイプが処理対象 Do Until i > ActiveSheet.Shapes.Count With ActiveSheet '円形のときは削除する If .Shapes(i).AutoShapeType = msoShapeOval Then .Shapes(i).Delete '要素番号は進めない 'タイプ9の時(直線)は削除する ElseIf .Shapes(i).Type = 9 Then .Shapes(i).Delete '要素番号は進めない Else '要素番号を次に進める i = i + 1 End If End With Loop
直線と円で質点の制御の結果を表示
0 件のコメント:
コメントを投稿