VBでリアルタイムにグラフを書く方法

このQ&Aのポイント
  • EXCELに入ってくるCSVデータをリアルタイムで折れ線グラフに変換する方法を教えてください。
  • 約0.5秒に1回セルA1とB1にデータが入ってくる。それを別々に折れ線グラフに表示し、表示後にセルA1とB1の内容をクリアする方法を教えてください。
  • OSはXP、Officeは2000を使用しています。VBでリアルタイムにグラフを描画するプログラムの作成方法を教えてください。
回答を見る
  • ベストアンサー

VBでリアルタイムにグラフを書きたいのですが。

この度EXCELに入ってくるCSVデータをリアルタイムで折れ線グラフに変換することになりました。 何とかVBAで出来そうだ・・・まではわかったのですが、初めてVBの画面を開いた私ですので 命令語の意味すらわからず大変困っています。 ・約0.5秒に1回セルA1とB1にデータが入ってくる。 ・それを別々に折れ線グラフに表示する。 ・表示後、セルA1とB1の内容をクリアする。 以上の繰り返しで行いたいと思っています。 どなたか詳しい方がいらっしゃいましたらどのようなプログラムに なるのか教えて頂けませんでしょうか? どうかよろしくお願い致します。 OSはXP、Officeは2000を使用しております。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

1,2 3,4 5,6, 7,8 9,10 11,12 13,14 15,16 17,18 19,20 こういう<Test.csv>を0.5秒間隔で呼び込んで折れ線グラフにするということですか? Excel は、操作したこともない門外漢ですが、出来そうな気がします。 まず、0.5秒間隔で休止する関数とCSVを読み込む関数を標準モジュールに追加。 Public Sub Pause(ByVal PauseTime As Single)   Dim Finish As Single      Finish = Timer + PauseTime   Do     DoEvents   Loop Until Timer > Finish End Sub Public Function FileRead(ByVal FileName As String, Optional isStop As Boolean = False) As String On Error GoTo Err_FileRead   Static isOpen As Boolean   Static fso  As FileSystemObject   Static fil  As File   Static txs  As TextStream      If Not isOpen Then     isOpen = True     Set fso = New FileSystemObject     Set fil = fso.GetFile(FileName)     Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)   End If   FileRead = txs.ReadLine Exit_FileRead:   If Len(FileRead) = 0 Or isStop Then     isOpen = False     Set txs = Nothing     Set fil = Nothing     Set fso = Nothing   End If   Exit Function Err_FileRead:   Resume Exit_FileRead End Function ※Microsft Runtime Scripting を参照するように設定! 次に、グラフを用意しコマンドボタンを配置しCSVを読み込んでみる。 Private Sub CommandButton1_Click()   Dim N    As Integer   Dim Data  As String   Dim Datas() As String      Do     Data = FileRead("C:\Temp\Test.csv")     Datas() = Split(Data, ",")     N = UBound(Datas())     If N = 1 Then       Me.Cells(1, 1) = Datas(0)       Me.Cells(1, 2) = Datas(1)     End If     ' Worksheets("Sheet1").ChartObjects(1).Chart.Refresh     Pause 0.5   Loop Until Data = "" End Sub Chart.Refresh は、あってもなくてもグラフは変化するようです。 もちろん、エクセルのグラフはエクセルデータを反映するもんだから、セルの更新を先にしている。 こんなんでどうでしょうか? 生まれて初めて挑んだんで最適解かどうかはかなり怪しいですが・・・。

pi-sukekun
質問者

お礼

回答ありがとうございます。 先頭の方の考え方はまさにイメージ通りです! 訳もわからず質問したこちらが申し訳ない程です。 早速使わせていただきます! 結果は後程報告させていただきますね。 こんなに出来て生まれて初めて・・・なんですか? 私はいろいろなHP見てるだけで3日使っちゃいました。 ありがとうございました!

その他の回答 (1)

noname#140971
noname#140971
回答No.2

もしかしてセルが更新されたらリフレッシュするということかな。 1、更新後グラフが自動更新されないなら ・コードでリフレッシュする。 2、更新イベントが発生しないやり方ならば、 ・コードで定期的にチェックする。 が、考えられます。 が、ならば、もう少し、質問の焦点を絞られたがいいです。

pi-sukekun
質問者

お礼

回答ありがとうございます。 1分でも120個x2のデータが入ってきてしまうので定期的チェック よりは毎回グラフに書き込みしたらリフレッシュでイメージして おりました。(0.5秒ごとにデータは入ってきますので・・・) 自分でもよく内容を把握していなかったので漠然とした質問になって しまいました、すみません。 でも、それだけでもいろいろな考え方があるのですね! 参考にさせていただきます。ありがとうございました!

関連するQ&A

  • リアルタイムに動くグラフの作成

    現在、Excel2003を使用し折れ線グラフを作成しようと考えています。 そこで皆さんに教えて頂きたいのですが、 Excelに、 -------------------------------- ○セル番号L・M・N(セルを結合して中央揃え) ○セル番号LMNの5行~10行目にそれぞれ計6個、2から-2ぐらいの変動幅でリアルタイムに数字が表示。 -------------------------------- このようなデータを外部データリンクから取得しています。 そこでこの6個の数値の動きをそれぞれ30分おきぐらいに折れ線グラフに反映させ、一ヶ月くらいの数値の動きを見たいのですが、このようにリアルタイムに動くグラフ(株のチャートのようなもの)は作成可能でしょうか。 どなたか分かる方、知恵をお借りいただける方、よろしくお願いいたします。

  • VBAでリアルタイムで計算結果をグラフに表示

    Excel2010でVBAを使っています。 30分くらいかかる計算があるのですが、 計算が終了するまで待っていたのでは、計算結果がどのようなものになるのか分からないため リアルタイムで計算結果をグラフに表示してくれるプログラムを書きたいと考えています。 検索したところ、 http://www.johoka.net/vbsin.htm VBの場合には、Picture1.Line を使えば、うまくいきそうだということが分かりました。 同様のことをVBA上でやりたいのですが、 http://pasokoma.jp/xp_bto/a_333563 のページにはVBAにはそのような機能はないと書かれています。 本当にユーザーフォーム上でグラフを表示させることはVBAではできないのでしょうか? http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9d92.html そのほか、シート上でのグラフを画像として表示させるという方法も見つかりました。 この方法でリアルタイムで計算結果を表示させるにはどうしたら良いですか?

  • 長い折れ線グラフで、その下に日付を入れたい。

    お世話になります。 エクセルを使ってグラフを書きたいです。 8年間ほぼ、毎日のグラフになるのですが、内容は以下の通り 1. セルAには、日付   午前と午後と、1日あたりふたつのデータなので例えば   セルA1には、2008/8/25 (色は、赤色)赤色は、午前を表す   セルA2には、2008/8/25 (色は、青色)青色は、午後を表す 2.セルBには、データ値   午前のデータと、午後のデータを、分けて入力していきます。 3.シート2に、上記のデータを折れ線グラフで表示させる。   日付は、Aセルに入れたものを、グラフ下に表示させたいです。   出来れば、色も赤色と青色に分けて日付表示させたいです。   と、こんな感じなります。 質問その1 折れ線グラフにした時に、8年間というととても長い折れ線グラフになり、 手動でグラフの領域をドラッグして広げて表示しないと見えないと思います。 エクセルでは、横方向のグラフはどこまで表示できるのでしょうか? 8年というところで、もう無理ですか? 質問その2 日付は、Aセルに入れたものを、グラフ下に表示させたいです。 出来れば、色も赤色と青色に分けて日付表示させたいです。 このような日付のやり方を教えて下さい。

  • Excel2010で分断された折れ線グラフをかく

    Excel2010を使って、時系列データから折れ線グラフを作成しています。 時系列データの元データ用テーブルがあり、そのテーブルのデータは毎日変動します。 それを元データとして、グラフ表示用のテーブルを作成しています。 ある条件の時だけ折れ線グラフを表示したくて(ようするに途中のいくつかの区間で 分断された折れ線グラフを表示したい)、表示用テーブルの折れ線グラフ用データ の各セルには (1) if( セル2>セル1, セル2,"") か (2) if( セル2>セル1, セル2,NA()) という式を入れています。 (1)のケースだと、常にY軸の0にグラフの線が接続され、上下が連続された折れ線 グラフになってしまいます。 (2)のケースだと最後の#N/Aデータの区間はグラフが表示されないのですが、 途中の#N/Aデータの区間は、補完されて連続したグラフ表示になってしまいます。 (分断されない) 表示用のセルを式もデータも入れない、何も設定されていない状態にすれば、 意図したように分断された折れ線グラフになります。 分断したい箇所は、その都度変動しますので、いつも手動でセルの内容を 消去するわけにはいかないので、うまい方法があればどなたかアドバイスを お願いします。 Excel2003では 「メニューの[ツール]→[オプション]の[グラフ]タブで、「空白セルのプロット」の プロット方法を指定するときに、「プロットしない」を選択する」 とすると意図したグラフが表示されたのですが、2010でどう設定すればいいのか わかりません。

  • VBでグラフ表示をするにあたって

    Excelを利用するか、市販のOCXを使用するか迷っています。 この2点を比べるにあたって、 こういうところが違うからこっちの方が良いということを 説明していただけると助かります。 ちなみにVB6.0(SP5)+SQLSERVER2000の環境です。 SQLSERVERの中のデータをグラフ表示しようと思っています。 グラフは、棒グラフ、円グラフ、折れ線グラフなど 何種類か使用する予定です。 もしExcelを使うことになればExcel97になります。 よろしくお願いします。

  • AndroidのWidgetにおけるグラフ表示

     ネットでいろいろとぐぐっているのですが、見つけられないので質問します。  AndroidのWidgetについて、例えば、バッテリーの残量を折れ線グラフで表示しているWidgetがありますが、どのような命令を使えば、Widget上に折れ線のようなグラフを表示することが可能なのか、もしどなたかお分かりであればご教示願います。  Widgetでは基本的にcanvasは使えないようなのですが、ではどうやってリアルタイムにグラフを表示できているのか分からず困っています。

  • エクセルの折れ線グラフにて

    表に書かれたデータを折れ線グラフで表示させています ただ、データ内部に文字も含まれているため 文字や空欄のデータはプロットせず 間も補完せずに折れ線グラフを引きたいのですが うまく出来なくてこまっています。 表のデータは表示されているデータや文字を変更することはできないため 他のセルに元のデータを参照する形でデータを持ち そのデータにてグラフを書いているのですが IF(ISNUMBER(A1)=TRUE,A1,"") とし、見た目は空欄となるのですが グラフを書いた場合、空欄とは判断せず 0にプロットしてしまいます。 また、 IF(ISNUMBER(B1)=TRUE,B1,#N/A) とした場合はプロットはしないのですが 間を補間してしまいます。 ツール-オプション-グラフでは 空白のセルのプロット部分は プロットしない(空白を残す) になっているのですが なぜ補間されてしまうのでしょうか? お力をお貸しください

  • 2種類の違うグラフについて

    いつもお世話になっております。 今回の知恵を拝借したい内容は・・・ データがB列1~10まで入っています。これがF列まであり、G列に各行の合計を出しています。 これを、グラフに表すのですが棒グラフにします。 また同じようにB列15からB24までデータが入っていて、G行に各行の合計がありますので これもグラフにしますが、こちらは折れ線グラフにします。 あっ、忘れていました。A列1は、”A-1”と機械Noが入ります。下にフィルして”A-10”までです。 同じくA列15も、”A-1”で”A-10”までです。 別々に出したこの二つのグラフを一つのグラフに重ねることが出来ませんか? データの入ったセルなどの移動はしないで、一枚のシートに二つのデータと言うかグラフを 重ねることが出来たら、うれしいです。どうか宜しくお願いします。

  • エクセルのグラフで質問です

    Office XPのエクセルで折れ線グラフを作ってるのですが セルの値が0の時はグラフの表示(プロットて言うんですかね)を しないようにしたいのですが、セル自体に関数を使ってゼロの値が 入った時はグラフにゼロが表示してしまうのですが これは、どうしようも無いのでしょうか? 何か方法があればよろしくお願いします。

  • VB6.0で折れ線グラフ作れますか?

    SQLSEVER7.0,VB6.0でシステムを構築しようと 思っています。 例えば SQLSEVERに日別の売上データをいれて それをVB6.0で日付を範囲を指定する 検索条件画面を作り、売上が日別に上がっているのか 下がっているかが簡単にわかる 折れ線グラフを作成したいのですが 可能ですか? なるべく費用を 使いたくないので VB標準のコンポーネントか フリーソフトがあったら 教えてください。

専門家に質問してみよう