dポイントプレゼントキャンペーン実施中!

この度EXCELに入ってくるCSVデータをリアルタイムで折れ線グラフに変換することになりました。
何とかVBAで出来そうだ・・・まではわかったのですが、初めてVBの画面を開いた私ですので
命令語の意味すらわからず大変困っています。

・約0.5秒に1回セルA1とB1にデータが入ってくる。
・それを別々に折れ線グラフに表示する。
・表示後、セルA1とB1の内容をクリアする。
以上の繰り返しで行いたいと思っています。

どなたか詳しい方がいらっしゃいましたらどのようなプログラムに
なるのか教えて頂けませんでしょうか?
どうかよろしくお願い致します。
OSはXP、Officeは2000を使用しております。

A 回答 (2件)

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 は、あってもなくてもグラフは変化するようです。
もちろん、エクセルのグラフはエクセルデータを反映するもんだから、セルの更新を先にしている。

こんなんでどうでしょうか?
生まれて初めて挑んだんで最適解かどうかはかなり怪しいですが・・・。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
先頭の方の考え方はまさにイメージ通りです!
訳もわからず質問したこちらが申し訳ない程です。
早速使わせていただきます!
結果は後程報告させていただきますね。

こんなに出来て生まれて初めて・・・なんですか?
私はいろいろなHP見てるだけで3日使っちゃいました。
ありがとうございました!

お礼日時:2007/09/07 13:06

もしかしてセルが更新されたらリフレッシュするということかな。


1、更新後グラフが自動更新されないなら
・コードでリフレッシュする。
2、更新イベントが発生しないやり方ならば、
・コードで定期的にチェックする。
が、考えられます。

が、ならば、もう少し、質問の焦点を絞られたがいいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/07 12:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!