• 締切済み

ある列のリアルタイム数値を3分毎に列をずらしながら記録するEXCELマクロを作りたい

EXECL2002 SP3を使っています。 B2からB99まで数式が入力されています。 この数式の結果はリアルタイムで変わります。 このリアルタイムデータを、 記録するマクロを作成したいと考えています。 9時1分から20時1分まで3分毎にデータを取得し、 C列、D列、E列、と列をずらしながら記録していきます。 以下のようなイメージになります。 ☆数式の状態     A   B 1        =now 2    東京  =tokyo.temperature 3    千葉  =kanagawa.temperature 4    埼玉  =saitama.temperature ☆9時1分のシートの状態     A   B   C 1        9:01  9:01 2    東京  11.5  11.5 3    千葉  11.9  11.9 4    埼玉  10.8  10.8 ☆9時4分のシートの状態     A   B   C   D 1        9:04  9:01  9:04 2    東京  11.6  11.5  11.6 3    千葉  12.1  11.9  12.1 4    埼玉  11.0  10.8  11.0 ☆9時7分のシートの状態     A   B   C   D   E 1        9:07  9:01  9:04  9:07 2    東京  11.8  11.5  11.6  11.8 3    千葉  12.4  11.9  12.1  12.4 4    埼玉  11.1  10.8  11.0  11.1 上記の作業を実現できるマクロを 教えていただけませんでしょうか。 よろしくお願いいたします。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

分かりにくそうな所の一例です 現在時から t_str = Now 3秒ごとに"test_01"を実行 t_str = t_str + TimeValue("00:00:03") 1分過ぎると終了 t_end = Now + TimeValue("00:01:00") のマクロです #1さんの回答も参考にしてアレンジしてください '----------------------------------------------------------- Sub test_00() Dim t_str, t_end As Date t_str = Now t_end = Now + TimeValue("00:01:00") Do Application.OnTime EarliestTime:=t_str, Procedure:="test_01" t_str = t_str + TimeValue("00:00:03") Loop Until t_str > t_end End Sub '----------------------------------------------------------- '----------------------------------------------------------- Sub test_01() MsgBox "コピー処理" End Sub '----------------------------------------------------------- 質問の仕方に一言 一般的ではないものや、紛らわしいものにはコメントをつける等の心遣いを >=now 関数で()を忘れたのかVBAで書き出しているのか紛らわしい >=tokyo.temperature この数式は標準でEXCELにない 表の数値ですが、temperature=気温が一般的ではないので、単位を付ける等、説明が必要では 最後に >この数式の結果はリアルタイムで変わります がちょっと気になります OnTimeはEXCELで何か処理をしていると、待機しますのでデータの更新の方法によっては、処理されない?可能性があります

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

何分間隔で実行など、VBAでも上級の課題だ。エクセル本来の処理を超えている。それを課題を丸投げしていて、回答者にコードを書いてくれということになるが、それは規約違反。 ただしこの課題は有名なものなので、 「何分間隔で実行」のコードは、「何分間隔で実行 VBA」でWEB照会すれば載っている。調べてみること。 1例 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv214.html タイマーを使った制御 あるいはOnTimeで照会。 ーー 右の列に順次追加していくのだけ載せておく。手始めにはコマンドボタンをシートに1つ貼り付け、そのクリックで実行されるコードをテストで確かめるべきだ。 Private Sub CommandButton1_Click() c = Range("iv3").End(xlToLeft).Column MsgBox c d = Range("A65536").End(xlUp).Row MsgBox d Range(Cells(1, "A"), Cells(d, "A")).Copy Cells(1, c + 1) End Sub A列にデータを入れて、ボタンをクリック、次にA列のデータを変えてクリックで、右端列の次に追加される様子が納得できるでしょう。後は Private Sub CommandButton1_Click()  をSub Test01() などに変えて、タイマーのコードから実行するマクロとして書けばよい。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

今現在は手作業で行っているのでしょうか。 マクロの記録でほとんど作成されると思います。 B列は関数で準備します。マクロの記録開始して 3分たったら、C列をコピィ D列に数式をコピィ、C列へ値でコピィ 再計算 上記で作成されたマクロを3分単位で繰り返すには ONTIMEコマンドで実現できます Application.OnTime Now + TimeValue("00:03:00"), "Macro1" こんな感じで使用します。 http://www.moug.net/faq/viewtopic.php?t=34886

kana2hiro2
質問者

補足

ありがとうございます。マクロの記録を使って、以下の検証マクロを作ってみました。 ただこれでは逆おくりになりますので、他の方の意見も参考にして、手を加えてみます。 Private Sub Macro1() Range("B2:B96").Select Selection.Copy Range("C2").Select Selection.Insert Shift:=xlToRight Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("C:C").Select Application.CutCopyMode = False nextTime = Now() + TimeValue("00:03:00") Application.OnTime nextTime, "Macro1" End Sub