• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでA列のデーターを30分毎に別の列にコピー)

エクセルでA列のデータを30分ごとに別の列にコピーする方法

このQ&Aのポイント
  • エクセルでA列のデータを30分ごとに別の列にコピーする方法について解説します。測定機器のカウンターからRS232C経由でエクセルにデータを書き込んでいくソフトがありますが、このデータをリアルタイムでグラフに観測したいと思っています。
  • VBAを使用することで、A列のデータを1分ごとにD列とE列に30分間分コピーすることができます。コピーが終了したら、データをすべて消去して新たに30分間分のデータをコピーします。また、データの中から特定の5桁のみをコピーすることも可能です。
  • この方法を使えば、エクセル上でリアルタイムのグラフ観測が可能です。VBAの知識が必要ですが、詳しい手順を解説しますので、ぜひチャレンジしてみてください!

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

関数で対応できるでしょう。 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列のセルの表示形式は標準にします。

kirakira3jp
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

>時刻とデーターを書き込んでいくソフトがあります このソフトの動作を制御できないようであれば、難しいと思われます ソフトの動作としては、 ”ソフト上でExcelの新規ブックを開き一定間隔でデータの書き込みを行なっている” こんな感じなんでしょうか? ・新規に作成されたブックにマクロを登録することが出来ない (ソフトで開くブックをマクロを含むテンプレートブックに指定することが出来れば可能?) ・他のユーザー(ソフト)が開いているブックを別のユーザ(ソフト)がアクセス出来ない (読み込み専用として開くことは可能ですが、新規作成されたブックは保存されるまでは読みこみ専用としても開くことは出来ないので、ソフト上で一定間隔で保存するような設定を行うことが出来れば可能) 上記2点がネックになります

kirakira3jp
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>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以下に順繰りデータが入る都度、下から上にデータが自動スクロールします。

kirakira3jp
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A