- 締切済み
ある列のリアルタイム数値を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 上記の作業を実現できるマクロを 教えていただけませんでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hige_082
- ベストアンサー率50% (379/747)
分かりにくそうな所の一例です 現在時から 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)
何分間隔で実行など、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)
今現在は手作業で行っているのでしょうか。 マクロの記録でほとんど作成されると思います。 B列は関数で準備します。マクロの記録開始して 3分たったら、C列をコピィ D列に数式をコピィ、C列へ値でコピィ 再計算 上記で作成されたマクロを3分単位で繰り返すには ONTIMEコマンドで実現できます Application.OnTime Now + TimeValue("00:03:00"), "Macro1" こんな感じで使用します。 http://www.moug.net/faq/viewtopic.php?t=34886
補足
ありがとうございます。マクロの記録を使って、以下の検証マクロを作ってみました。 ただこれでは逆おくりになりますので、他の方の意見も参考にして、手を加えてみます。 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