エクセルの学校


[[20060703225951]] 『時系列のグラフを一点ずつプロットするようなアニ』(パソコン音痴) >>BOT

[ 初めての方へ | 一覧(最新更新順) |

|
| 全文検索 | 過去ログ | HOME ]

 

『時系列のグラフを一点ずつプロットするようなアニメーションの設定について』(パソコン音痴)

エクセルで作成した時系列のグラフがあります.このグラフを一点ずつプロットするようなアニメーションの設定をマクロやVBAを使ってやることはできるのでしょうか?マクロやVBAに関してまったくの無知なものでどなたかご存知の方がいらっしゃいましたら教えてください


 ボタンをクリックするたびに1点ずつプロットされるというのだと、マクロを使わずに
 できますが、それではダメですか?
 (ちゅうねん)

ちゅうねんさん

ご意見ありがとうございます.
私のやりたいこととしては,「ボタンをクリックするたびに」という操作はおしい感じです.それならば,実行ボタンをクリックしたら0.1秒おきにプロットを開始してグラフを書いてくれるようにしたいのですが・・・このようなことは可能なのでしょうか?


 自動で順番にということならマクロになるでしょう。
 残念ながら私にはできませんので、どなたか識者の書き込みを待ちましょう。

 全く別の案:
 同じグラフを2つ作り、一方はプロットなしに(あるいは背景色と同じ色に設定)、
 もう一方は背景を透明にする(プロットだけにする)。
 この2つをパワーポイントに貼り付け、プロットだけの図を前面にした後、
 スライドショー→アニメーションの設定で、左側から出てくるようにする。
 (ちゅうねん)

ちゅうねんさん

なるほどぉ そのような案だったのですかぁ・・・プロット数が少ないときにはいいかもしれないですね ありがとうございました


 ん?誤解があるのようなので補足します。

 クリックするたびに1点ずつプロットするというのはエクセルだけで実現する方法で、
 フォームのスピンボタンを使って、グラフのデータを追加してゆこうと考えました。
 これは、プロットするデータの数だけクリックが必要です。

 一方、パワーポイントで実現する方法は、「グラフの背景」と「全ての点をプロット
 した折れ線」の2つに分けて重ねておき、後者をアニメーションの設定で徐々に出そう
 と言うものです。事前の位置あわせなどが面倒だけど、クリックは1回で済みます。
 (ちゅうねん)

ちゅうねんさん

エクセルでそんなことができるんですか?!それは知らなかったです・・・
あとフォームのスピンボタンってのがわからないんですが・・・


 正確には、"[フォーム] ツールバーのコントロール"にある、"スピンボタン"と表現
 すべきでした。
 これは『値を増加または減少させます。値を増加させるには、上向き矢印をクリック
 し、減少させるには、下向き矢印をクリックします』ものです(Excel2002ヘルプ)。
 エクセルのヘルプで「コントロール」と入力して、調べてください。

 でもこの方法ではデータの数だけクリックが必要なので、1クリックでというご要望に
 は応えられません。
 (ちゅうねん)

>ちゅうねんさん
今エクセルで確認してスピンボタンを表示することはできました.
でも1クリックしてデータを表示させていくという方法がわかりません
これってマクロを組んでからボタンを使用できるようにするのではないのですか?

 最初に申し上げたとおり、私が提案したのはマクロを使わずに実現する方法です。
 クリック毎にプロットを1点ずつ増やすので、プロットの数だけクリックが必要です。

 方法の概要を説明します。
 スピンボタンであるセルの値を1ずつ変化させます。
 グラフの1つ目のプロットにあたるデータは、スピンボタンのセルを参照して『1以上
 だったら元データから参照してくる、でなければ(1未満なら)NA()を入力する』とし、
 2つ目のプロットデータは2以上かどうかで、…、n番目のプロットデータはn以上か
 どうかで、…と、セルの値によって変化するように作ります。

 前にも述べましたが『1クリックだけで自動で順番に』というのはマクロになるでしょう。
 (ちゅうねん)

>ちゅうねんさん

ん〜実際にいじっていますが,いまいち上手くできません・・・
もう少し自分でがんばってみます・・・

どなたかマクロの方で書き込みしていただけないかなぁ・・・と期待しているのですが・・・

予想以上に面倒なマクロなのかなぁ・・・


 VBAでやるには情報が少なすぎます。
 セル配置とデータ内容、グラフの種類などなど・・・。

 (川野鮎太郎)

 横からですみません。スピンボタンおもしろそうなのでやってみました。
 以下の表があったとして
 [A]	[B]
 コード	数量
 aaaa	12
 bbbb	14
 cccc	15

 C列に以下のようにいれます。
 [C]
 数量
 =IF($D$1>ROW(),B2,0)
 =IF($D$1>ROW(),B3,0)
 =IF($D$1>ROW(),B4,0)

 それでスピンボタンの右クリックで
 コントロール書式設定で、コントロールの「リンクするセル」を
 D1に設定しておき、D1には2をいれておきます。
 あとは、グラフを作成するときに A1:A4,C1:C4 を選択して
 作成します。
 スピンボタンの上向きの▲を押すと、トントントンとでてきますね〜
 応用すると こんなこともできるんですね。(お邪魔虫)


書き込んでくれたみなさん ありがとうございます.

>川野鮎太郎さん

確かにおっしゃる通りでした.セルAには300行からなる時系列データ,セルBにもどうようの時系列データがあります.このAとBのデータはそれぞれ対応しており,同時刻のデータです(0秒から300秒まで1秒刻みで記録したデータが二つあり,それがA列とB列だとお考えください).このA列のデータに対するB列のプロット,X軸をA列のデータ・Y軸をB列のデータとした散布図を描きたいんです.
タイマーコントロールを使えばできるのでは?とも言われました.

A1とB1からプロットし,0.001秒後にA2とB2のプロットをする.これをループさせてA300とB300まで行うようにさせればいいんじゃないかな?とアドバイスをもらいましたが,なにぶん素人なものでここまで聞いてもプログラムが書けません・・・勉強はしてみてるのですが・・・

>お邪魔虫さん

確かに面白そうですよね.これはこれで別のところで使ってみます.


おじゃまします。

 >>お邪魔虫さん
 >確かに面白そうですよね.これはこれで別のところで使ってみます。

 私なら、お邪魔虫さんが提示して下さった方法をそのまま使い、
 スピンボタンで変化させているD1の値を、マクロを使って変化させちゃいます。
 その方がプログラムも簡単になると思います。(あくまでもマクロ素人の考えですが....)

 (ブックマーク)


 シート名やグラフのオブジェクト名などは適宜修正してください。
 
Sub Chart_Prot()
Dim MySh As Worksheet
Dim i As Long
Const Data_Count As Long = 8      '最終データ行
Set MySh = Worksheets("Sheet1")   'グラフのあるシート名
With MySh
    .ChartObjects("Chart 1").Activate  'シート名を確認のこと
    ActiveChart.Axes(xlCategory).MaximumScale = _
        Application.Max(.Range("A:A"))  'A列の最大値をX軸の最大値に設定
    ActiveChart.Axes(xlValue).MaximumScale = _
        Application.Max(.Range("B:B"))  'B列の最大値をY軸の最大値に設定
    For i = 1 To Data_Count
        Application.Wait Now + TimeValue("0:00:1")
        ActiveChart.SetSourceData Source:=Range(.Cells(1, 1), .Cells(i, 2))
        'DoEvents
    Next i
End With
Set MySh = Nothing
End Sub

 追加:グラフを弄るのではなく、データを一度配列変数に入れて、
 設定秒ごとにセルに書き出してみました。
 
Sub My_Prot()
Dim MyDate_Range As Range, C As Range
Dim MyA() As Variant
Dim i As Long, k As Long
Set MyData_Range = Range(Range("B1"), Range("B65536").End(xlUp))
MyCount = MyData_Range.Count
ReDim MyA(1 To 1, 1 To MyCount)
For Each C In MyData_Range
    i = i + 1
    MyA(1, i) = C.Value
Next C
MyData_Range.ClearContents
For Each C In MyData_Range
    k = k + 1
    Application.Wait Now + TimeValue("0:00:1")
    C.Value = MyA(1, k)
Next C
Set MyData_Range = Nothing
End Sub

 (川野鮎太郎) 両方ともグラフは作成済みのものとして書いてます。

>川野鮎太郎さん

ありがとうございます.本当に助かります.
最後の「両方ともグラフは作成済みのものとして書いてます。」というコメントの意図はどういうことなのでしょうか?非常に申し訳ないのですが,簡単にこのプログラムに対するコメントをいただけると嬉しく思います.本当に素人なもので,いきなりこれを見てもどのような作業をしているのかがわからなくて・・・
エクセル上に「実行」ボタンを作成して,そのボタンをクリックして開くVBAの中に上記のプログラムを書き込めばいいのでしょうか?

あとこのようなプログラムの勉強をするのにいい本を教えていただけると嬉しく思います.


ここでの話しとはちょっとずれますが・・・

今「エクセルで学ぶフーリエ変換」という本を読んでいますが,バタフライ演算がよくわかりません.どなたかご存知ないでしょうか?勉強になる本,より簡単に書いてある本などあったら教えていただけないでしょうか?


 >「両方ともグラフは作成済みのものとして書いてます。」というコメントの意図はどういうことなのでしょうか?
 読んで字のごとくなんですけど・・・。
 A・B列のデータを基に散布図のグラフが書かれていて、そのグラフをアニメーションのように
 見えるようにしたコードです。

 実行方法はおっしゃるようなことで出来るはずです。

 何にしても、基のデータはバックアップを取っておいて、色々試してみないと覚えることは出来ませんよ。

 (川野鮎太郎)

コメント:

[ 一覧(最新更新順) |

]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.