• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBでリアルタイムにグラフを書きたいのですが。)

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

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

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

  • ベストアンサー
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秒ごとにデータは入ってきますので・・・) 自分でもよく内容を把握していなかったので漠然とした質問になって しまいました、すみません。 でも、それだけでもいろいろな考え方があるのですね! 参考にさせていただきます。ありがとうございました!