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

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

上記の作業を実現できるマクロを
教えていただけませんでしょうか。

よろしくお願いいたします。

A 回答 (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で何か処理をしていると、待機しますのでデータの更新の方法によっては、処理されない?可能性があります
    • good
    • 0

何分間隔で実行など、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() などに変えて、タイマーのコードから実行するマクロとして書けばよい。
    • good
    • 0

今現在は手作業で行っているのでしょうか。


マクロの記録でほとんど作成されると思います。
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

補足日時:2008/12/05 11:11
    • good
    • 1

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