アプリ版:「スタンプのみでお礼する」機能のリリースについて

測定機器のカウンターからRS232C経由でエクセルにA1、B1から順番にA1 B1,A2 B2、A3 B3とその時刻とデーターを書き込んでいくソフトがあります。A列の最後まで行くとそこで終了です。
この1分毎のデーターをリアルタイムでたとえばD列とE列にその時刻とデーターの30分間分をVBAを使ってコピーしたいのです。30分終了したら全部消去してまた新たに30分間分をコピーする。この繰り返しです。目的はこのD列とE列のデーターでリアルタイムのグラフにして観測したいと思っています。こんなことがVBAを使って出来るのでしょうか。また、実はこのデーターは15桁ありその中の9桁目から5桁目までの5桁だけコピーしたいのです。私には敷居が高すぎてとても解決できません。どうかよろしくお願いします。この記録されるエクセルにはVBAとかの記録は特に無いようです。

A 回答 (3件)

>A1、B1から順番にA1 B1,A2 B2、A3 B3とその時刻とデーターを書き込んでいくソフトがあります



そのソフトが自動的にデータを記入していくのなら、マクロにコピーさせずに例えば「常に最新の(いま入ってる一番下から)30行分をD:E列に数式で表示させ、それを元にグラフを表示」させておいた方が、簡単で安全です。
#ソフトが自動でデータを記入する都度、勝手にグラフが時系列を「流れていく」(30分ごとにワイプするのではなく)といった見え方になります

#マクロが30分ごとに割り込みをかけるそのタイミングで、通信ソフトとバッティングしてデータ欠損みたいな事が起きる心配も無くなります


作成例:「30分」でどんだけデータが蓄積されるのか不明なので仮に30行分
E1に
=IF(COUNT(A:A)>30-ROW(E1),INDEX(A:A,MAX(1,COUNT(A:A)-30+ROW(E1))),NA())
F1に
=IF(COUNT(B:B)>30-ROW(F1),INDEX(B:B,MAX(1,COUNT(B:B)-30+ROW(F1))),NA())
E1:F1をE30:F30までコピー貼り付け
E1:F30でグラフを描画。

A1:B1以下に順繰りデータが入る都度、下から上にデータが自動スクロールします。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
どんな感じになるか試してみたいと思います。

お礼日時:2013/01/12 17:08

>時刻とデーターを書き込んでいくソフトがあります



このソフトの動作を制御できないようであれば、難しいと思われます

ソフトの動作としては、
”ソフト上でExcelの新規ブックを開き一定間隔でデータの書き込みを行なっている”
こんな感じなんでしょうか?

・新規に作成されたブックにマクロを登録することが出来ない
(ソフトで開くブックをマクロを含むテンプレートブックに指定することが出来れば可能?)

・他のユーザー(ソフト)が開いているブックを別のユーザ(ソフト)がアクセス出来ない
(読み込み専用として開くことは可能ですが、新規作成されたブックは保存されるまでは読みこみ専用としても開くことは出来ないので、ソフト上で一定間隔で保存するような設定を行うことが出来れば可能)

上記2点がネックになります
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
エクセルだけの問題ではないのですね。単純に考えていました。

お礼日時:2013/01/12 17:06

関数で対応できるでしょう。


A1セルとB1セルから下方に1分ごとにデータが自動的に追加されていくとします。
なお、B列のデータは15ケタで9ケタ目から5ケタ目までをE列に抽出したいとのことですね。
D列とE列への最初のデータの取り込み時刻を8:00からとしたい場合にはC1セルに9:00と入力します。C1セルには必ず時刻を入力します。
その指定した時刻からスタートして30分ごとに表が自動的に変わるようにします。A列でのデータの最終行を判断してD列およびE列のデータが自動的に変化します。

D1セルには次の式を入力して下方にオートフィルドラッグします。

=IF(ROW(A1)>30,"",IF(INDEX(A:A,INT((COUNT($A:$A)-MATCH($C$1,$A:$A,1)-1)/30)*30+MATCH($C$1,$A:$A,1)+ROW(A1)-1)=0,"",INDEX(A:A,INT((COUNT($A:$A)-MATCH($C$1,$A:$A,1)-1)/30)*30+MATCH($C$1,$A:$A,1)+ROW(A1)-1)))

E1セルには15ケタの数値の内の9ケタ目から5ケタ目までの数値を表示するために次の式を入力し下方にドラッグコピーします。

=IF(ROW(B1)>30,"",IF(INDEX(B:B,INT((COUNT($A:$A)-MATCH($C$1,$A:$A,1)-1)/30)*30+MATCH($C$1,$A:$A,1)+ROW(B1)-1)=0,"",MID(INDEX(B:B,INT((COUNT($A:$A)-MATCH($C$1,$A:$A,1)-1)/30)*30+MATCH($C$1,$A:$A,1)+ROW(B1)-1),7,5)*1))

なおE列のセルの表示形式は標準にします。
    • good
    • 0
この回答へのお礼

早速に回答ありがとうございました。
やりたかったことが出来ました。関数を使うんですね。私から見たら正に天才としか言いようがありません。ありがとうございました。

お礼日時:2013/01/12 21:49

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