• 締切済み

Excelを使って監視盤を作りたいのですが

Excelを使って監視盤を作りたいのですが 1 2010/9/21  16:37 24.9   24.8   23.3 2 2010/9/21  16:37 24.9   34.5   34.2 3 2010/9/21  16:38 24.8   65.3   32.8 上記のように計測機器を用いて上のようにExcelのシート上にどんどん更新されていく3つ数値のそれぞれ一番新しい温度を同時に別のシートに表示させるには、どのようなマクロを使えばいいか教えてください。また、数値だけを表示させるのではなくエラーや3つの数値のうちひとつの温度が表示されなかった場合,例えば24.5  error  23.5と別シートに表示できるようにしたいのでどのようにすればいいのか教えてください。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 最新のデータの表示に関しては、最新のデータが常に最も下に表示されるのでしたら、マクロを使用しなくても、関数でも可能です。  今仮に、元データが表示されているシートの名称がSheet1であり、その1行目には「No.」、「日付」、「時刻」、「温度1」、「温度2」、「温度3」といった各項目の名称が入力されていて、一番上の日付の左隣に書かれている、「1」というデータが入力されているのがA2セルで、データが表示される最大の範囲は999行目までだとします。  まず、別シートの「最新データのNo.」を表示させたいセルに、次の数式を入力して下さい。 =INDEX(Sheet1!$A$2:$F$999,MAX($A$2:$A$999),COLUMNS(Sheet1!$A:A))  次に、そのセルをコピーして、そのセルの右側に連続している5個のセルに貼り付けて下さい。  そして、Sheet1のA2~F2の範囲をコピーして、「形式を選択して貼り付け」機能を使用して、最新のデータを表示させる範囲に、書式のみを貼り付けて下さい。  尚、「No.」欄の数字が、データが表示されていない行にも、最初から表示されている場合には、上記の数式は使用出来ませんから、別シートに入力する数式を次の様に変えて下さい。 =INDEX(Sheet1!$A$2:$F$999,MATCH(9^9,$B$2:$B$999),COLUMNS(Sheet1!$A:A))  又、B列の日付欄に入っているデータが、セルの書式設定で日付として表示されているだけで、データ自体はシリアル値であり、時刻の情報を含んでいる、という場合には、別シートに入力する数式を次の様に変えて下さい。(この場合は日付が順不同であっても有効です) =INDEX(Sheet1!$A$2:$F$999,MAX($B$2:$B$999),COLUMNS(Sheet1!$A:A))  それから、温度データにエラーや欠落がある行のデータを抽出して表示させる場合には、適当な列(例えばSheet3のA列)を作業列として用いて、 まず、Sheet3のA1セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(Sheet1!$D1)*ISNUMBER(Sheet1!$E1)*ISNUMBER(Sheet1!$F1)=0,ISNUMBER(Sheet1!$B1)),ROW(A1),"")  続いて、Sheet3のA1セルをコピーして、Sheet3のA2以下に貼り付けて下さい。  次に、温度データにエラーや欠落がある行のデータを抽出して表示させたいセル範囲の中で、最も左上にあるセルに、次の数式を入力して下さい。 =IF(ROW(A1)>COUNT,"",IF(INDEX(Sheet1!A:A,SMALL(Sheet3!$A:$A,ROW(A1)))="","",INDEX(Sheet1!A:A,SMALL(Sheet3!$A:$A,ROW(A1)))))  次に、そのセルをコピーして、そのセルの右側に連続している5個のセルに貼り付けて下さい。  次に、Sheet1のA2~F2の範囲をコピーして、「形式を選択して貼り付け」機能を使用して、温度データにエラーや欠落がある行のデータを抽出して表示させたいセル範囲の中の1行目に、書式のみを貼り付けて下さい。  次に、温度データにエラーや欠落がある行のデータを抽出して表示させたいセル範囲の中の1行目にあたる範囲を選択して、その範囲の同じ列の、次の行以下に、適当な行数だけ貼り付けて下さい。  以上です。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

マクロなんて要らないでしょ? Sheet1に温度があって、Sheet2に表示するなら Sheet2のセルに以下の式を指定すれば良いでしょう。 =IF(ISNUMBER(Sheet1!C1),Sheet1!C1,"error")

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

エクセルを使ったことがほとんどないので、 詳しくはわかりませんが、CSVなりXLSなりの APPENDされているファイルの最終行をVBAで読むためには Dim FSO As New FileSystemObject Dim TS As TextStream Dim strText As String Set TS = FSO.OpenTextFile("C:\Documents and Settings\Administrator\My Documents\test1.csv", ForReading, False) Do Until TS.AtEndOfStream strText = TS.ReadLine Loop debug.print strText のような感じで簡単にできます。 (Microsoft Scripting Runtime の参照設定が必要です) さらに、 A=split(strText,",") if a(2) = "" then a(2) = "error" if a(3) = "" then a(3) = "error" if a(4) = "" then a(4) = "error" などとすることにより、空白を"error"という文字列に置き換えることができます。 そして、a(0)~a(4)をフォームに表示させるのが妥当な方法だと思います。 お行儀をよくする為に最後に TS.Close Set TS = Nothing Set FSO = Nothing とするのも大切だと思います。 エクセルは確かタイマーがなかったので、何らかの方法で定期的に上記ループを繰り返せばよいと思います。 (表示するフォームはデータとは別ファイル上に作成することをお勧めします。)

  • mumugorou
  • ベストアンサー率100% (1/1)
回答No.1

測定機器との通信は出来ているのでしょうか? 出来ているのなら書き込むセルを指定するだけですけど Ifで判定してerrorって書けばいいんじゃない