dポイントプレゼントキャンペーン実施中!

 EXCEL2002でセルの時刻(A1)が15分更新されるのに対応させて、他のセル(B1)の数値を+1ずつ増加させる方法を教えて下さい!
例として,
A1に9:00 というNOW関数で表示させた値が、9:15⇒9:30⇒9:45⇒10:00
と変化する度に、
B1の値を「1」を初期値として始まり、 1⇒2⇒3⇒4⇒5 と増加させる方法を教えて下さい!

 この際、
 OnTime メソッドを使って、15分ごとに
1.Calculateする
2.セルB1の値に1を加えるか、別途カウント用の変数に保持した値をセルB1に書き込む。(多分Microsoftの推奨は前者)
3.次回(15分後)のOnTime設定をする。
4.閉じるときはOnTime設定を解除する。

 以上の方法で、VBAを組み立てるには、どうしたら良いでしょうか?
 何度やっても失敗します。
たいへん、厚かましい質問で申し訳ありません。
 実行可能なプログラムの形で教えて頂けないでしょうか?
 以前の質問 QNo.2292225の関連質問です。御覧下さい!
 参考URL http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv214.html

A 回答 (12件中11~12件)

こんにちは。



何のために、このようなマクロを行うのでしょうか?

最近、公開株式のデータを取得するという方が、このようなマクロを手に入れたいとおっしゃいます。実際は、内容的にひじょうに特殊な作業をしているようで、その場合は、Calculate イベントが必要になります。しかし、別のアドインなのか、特別なプログラム上なのか、私自身は、元のプログラムを知らないので、以下のように単独では動いても、相手の方の環境では、この種のマクロでは成功しておりません。

なお、掲示no. 2292225 , #3 のエラーの内容が、依然、不明ですが、エラーが出たときは、必ず、エラー番号と内容を教えるようにしてください。回答者の方は、どうしようもないことがあります。

前回のご質問で解決しなかったのですから、できるだけ、前回のほうは、締めたほうがよいと思います。内容が、ほぼ同じですから、マルチポストになってご質問自体が削除の対象になります。

このご質問に書かれてある仕様には直接つながりません。Calculate メソッドは、揮発性関数の値を再取得するためのもので、マクロを動かしている限りは、直接、マクロから行ったほうがよいからです。

なるべく、セルのA1 の書式設定はしておいてください。
必要に応じて、ユーザー設定部分を修正してください。

'--------------------------------------------------------
'標準モジュール設定
Private SetTime As Date
Private TimeFormat As String
'ユーザー設定 何時間おきか? "時:分:秒"
Private Const AddTime As String = "00:15:00"
Sub Auto_Open()
'ブックを開いて起動
Dim myDate As Variant
  Worksheets("Sheet1").Select
  TimeFormat = Worksheets("Sheet1").Cells(1, 1).NumberFormatLocal
  If InStr(TimeFormat, ":") = 0 Then
  '書式が違う場合は、キメウチされます。
    TimeFormat = "yy/mm/dd hh:mm:ss"
  End If
  myDate = Worksheets("Sheet1").Cells(1, 1).Value
  
  If CDate(myDate) + TimeValue(AddTime) <= Now Or myDate = "" Then
    SetTime = (Int(Now / TimeValue(AddTime)) + 1) * TimeValue(AddTime)
    Worksheets("Sheet1").Cells(1, 1).Value = SetTime
    Worksheets("Sheet1").Cells(1, 1).NumberFormatLocal = TimeFormat
  Else
   SetTime = (Int(CDate(myDate) / TimeValue(AddTime)) + 1) * TimeValue(AddTime)
  End If
   Worksheets("Sheet1").Cells(1, 2).Value = 1
  Debug.Print SetTime
  Application.OnTime SetTime, "CountMacro"
End Sub

Private Sub CountMacro()
Dim i As Long
  SetTime = SetTime + TimeValue(AddTime)
  Worksheets("Sheet1").Cells(1, 1).Value = SetTime
  Worksheets("Sheet1").Cells(1, 1).NumberFormatLocal = TimeFormat
  If IsNumeric(Worksheets("Sheet1").Cells(1, 2).Value) Then
   Worksheets("Sheet1").Cells(1, 2).Value _
   = Worksheets("Sheet1").Cells(1, 2).Value + 1
  Else
   Worksheets("Sheet1").Cells(1, 2).Value = 1
  End If
  Debug.Print SetTime
  Application.OnTime SetTime, "CountMacro"
End Sub

Sub Auto_Close()
'設定解除用
On Error Resume Next
  Application.OnTime EarliestTime:=SetTime, _
  Procedure:="CountMacro", Schedule:=False
 
  If Err.Number > 0 Then
  '異常終了
   MsgBox Err.Number & ": " & Err.Description
   Err.Clear
  Else
   MsgBox "時間設定(" & Format(SetTime, TimeFormat) & ")は解除されました", vbInformation
  End If
End Sub


'--------------------------------------------------------
    • good
    • 0
この回答へのお礼

朝方、早い時間にも関わらず、こうして、ご回答下さり、誠に、有難うございます。

貴方は、なんて、お優しい方なのですか?

 見ず知らずの私に対し、これほどの、お骨折りを頂きまして、感謝の言葉に絶えません。

 本当に、有難うございます。


 このサイトで、伺うのは、まだ、経験が浅いため、質問も要領を得ず、解かりにくい点が多く、すみませんでした 前回、質問させて頂いたことを、一旦、締め切ってしまうと、
(1)回答者の方が、『その後、解決方法について、新たに思いついた』ことを書き込めなくなって、失礼。
(2)『もう、解決済みのことだから』、と以降、注目して下さらなくなるのではないか?
 と、思って、気が気でなかったのです。
 このように、また、たいへん、ご親切に解説して下さる、『神様』のような存在の方(ですから、本当に、感謝いたします。)のご登場で、安心して、前回質問に、終幕の幕引きを致したいと思います。

 ところで、本来の質問のテーマに関して、

>何のために、このようなマクロを行うのでしょうか?

Wendy02様の『具体的に、どのような使用目的のマクロであるか?』との御尋ね。
 御推察の通り、証券会社の提供するリアルタイムスプレッドシートという、EXCELに、関数を打ち込んで、株価の変動に合わせ、ほぼ、リアルタイムに”株価を取得”し、連動させた計算を行う”仕様”のものです。

 そこで、上記のような質問をさせて頂きました。。

>なお、掲示no. 2292225 , #3 のエラーの内容が、依然、不明ですが、エラーが出たときは、必ず、エラー番号と内容を教えるようにしてください

に関してですが、『エラー番号』とは、どのようにしても、表示されず、解からなかったのですが、

 頂いた、プログラムならば、状況が一変するかと、思います。

 まずは、『何事も経験から』、早速、頂いたプログラムを、走らせ、実行させて頂きます。

 有難うございます。本当に感謝致します。

 まずは、感謝の気持ちを申し上げたく、御礼の言葉にかえさせて頂きます。

お礼日時:2006/07/29 14:54

> 何度やっても失敗します。


不思議ですね。ヘルプの通りやる他ないと思うのですが。
そのコード、貼ってもらえます?

> 実行可能なプログラムの形で教えて頂けないでしょうか?
何を勘違いされているのか知りませんが、そういうのはありえません。
    • good
    • 0

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