• ベストアンサー

VBAでのタイマー使用例

お世話になります。 Office2003のエクセルVBAでの質問です。 シートにボタンがあり、ボタンをクリックしたらタイマーが動き出してセル内の数字のカウントアップが始まるってような事を行いたいと考えております。 ボタンを押したらタイマーが動きだし、そのタイマーイベントの中でセル内の数字をカウントアップすると考えたのですが、タイマーの使い方がわかりません。 タイマーを使った簡単なサンプルを教えていただけないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか? Excel VBAの場合は、そういう機能に対するものは、おそらくはクラスとは言わないですが、厳密にはありませんね。 >これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。 それは出来ますが、ワークシートの作業に対して、完全にバックで動かし、影響をなくすのは難しいです。実際は、以下でいう、'指定時刻に実行するマクロ名' マクロの内容にも依存してきます。このマクロ側が、どういう性格なものか分からないと、ちょっと難しいですね。ここのカテゴリで一番良くある例としては、楽天のRSSがあります。 お礼側に出ていコードに手を加えてみました。 'おそらく、標準モジュールのほうがよいでしょう。 Private MacroStop As Boolean Sub 指定時刻にマクロを実行する() Dim myWait As Integer Dim 指定時刻 As Date   myWait = 5 '秒   指定時刻 = Now + TimeSerial(0, 0, myWait)   If MacroStop = False Then     Application.OnTime 指定時刻, "指定時刻にマクロを実行する"     Call 指定時刻に実行するマクロ名   Else     MacroStop = False     End   End If End Sub Sub 指定時刻に実行するマクロ名()   Cells(1, 1).Value = Cells(1, 1).Value + 1    End Sub Sub タイマー停止()    MacroStop = True End Sub

tree1975
質問者

お礼

有難うございました。非常に参考になりました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 私は、ずいぶん、そのコードは書いたけれど、かなり難問のひとつだと思います。理由は、メモリの占有率にあるのですね。タイマーイベントは、VB6 のもので、Excelにはありません。 ですから、Excelでは、どうしても、思ったものが作れないのです。ある方は、APIタイマーを使う人がいますが、責任が持てません。 まず、簡易型を紹介します。1秒ごとに数値が増えるようになっています。ただし、問題点はあります。 Private Sub CommandButton1_Click()  Dim Start As Date  Dim NT As Date  Dim OT As Date  Dim Cnt As Long   On Error GoTo EndLine   'Esc キーでマクロを抜ける   Application.EnableCancelKey = xlErrorHandler   Start = Time   Cnt = 1   Do    NT = Time    If NT > OT Then     Cells(1, 1).Value = Cnt     Cnt = Cnt + 1     OT = NT    End If   Loop While NT < Start + TimeValue("00:10:00") '10分まで EndLine: End Sub

tree1975
質問者

お礼

ご回答有難うございます。 VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか? それがあれば、スレッド内で時間を現在の時間を見ながら処理が行えるように思えるのですが。 下記はググッて見つけた指定時間にマクロ実行するサンプルコードです。 これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。 Sub 指定時刻にマクロを実行する() 指定時刻 = TimeValue("HH:MM:SS") '指定時刻 ※1 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "指定時刻に実行するマクロ名", _ TimeValue(待ち時間) End Sub Sub 指定時刻に実行するマクロ名() ' 'ここへマクロを記入 End Sub

関連するQ&A

  • Excel-VBAでタイマー処理

    お世話になります。 Excel-VBAでユーザフォームを操作したいのですが、VBの場合ツールボックスにタイマーコントロールがありますが、Excel-VBAの場合ツールボックスにタイマーコントロールがありません。 タイマー処理はどうしたら良いのでしょうか?

  • VBAでセルごとにタイマーを使用できますか?

    VBA初心者のものです。が・・・ 'B4に値が入ったら30分後にB4の値をB5に移動する。 '対象セルはB4~AZ4までで、セルごとに30分後に値を一段下移動する。 とういうようなマクロを作りたいのですが、 タイマーはシート単位になるのでしょうか? 現在はダブルクリックイベントにてセルの値を下げています。 Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) Application.ScreenUpdating = False If Intersect(target, Range("b4:zz4")) Is Nothing Then Exit Sub Call 移動 End Sub Sub 移動() Dim c As Range Set c = ActiveCell ' 使用されている c.Select Selection.Cut c.Offset(1, 0).Select ActiveSheet.Paste End Sub 対象セルがたくさんあるので、なんとか自動処理できないものでしょうか?

  • エクセルVBAで文字列変換

    エクセル2010でVBAを書いています。 シートの中のセルを全ての書式を文字列に変換するのはどうすればよいでしょうか。 ボタンをクリックした時にシート内のセルが全て文字列型に変換するという動きにしたいです。 解決法などありますでしょうか。 よろしくお願いします。

  • VBA 入力画面について

    以前、友人から送られてきたエクセルで セルを選んでマウスの右をクリックすると入力画面が出てきてそこに数字を入力しOKボタンを押すと選んでいるセルに足し算されていくような システムになっていました。 多分、VBAだと思うのですが同じようなものを作るのは難しいでしょうか。

  • VBAでタイマー作れますか?

    エクセルでhttp://www.excel-excel.com/tips/vba_82.htmlなタイマー見つけたんですが、 これを応用して、時計と連動した36分固定のタイマーつくれないでしょうか? 0:18~0:54 [今日はもう寝ます] 0:54~1:30 [ただ今睡眠中] 1:30~2:06 [ただ今睡眠中] 2:06~2:42 [ちょっと起きました] 2:42~3:18 [また寝ます] 3:18~3:54 [寝てます] 3:54~4:30 [寝てます] 4:30~5:06 [起きました] 5:06~5:42 [まだ早いのでまた寝ます] 5:42~6:18 [睡眠中] 6:18~6:54 [そろそろ起きる時間です] 6:54~7:30 [テスト1] 7:30~8:06 [テスト2] 8:06~8:42 [テスト3] 8:42~9:18 [テスト4] 9:18~9:54 [テスト5] 9:54~10:30 [テスト6] 10:30~11:06 [テスト7] 11:06~11:42 [テスト8] 11:42~12:18 [テスト9] 12:18~12:54 [テスト10] 12:54~13:30 [テスト11] 13:30~14:06 [テスト12] 14:06~14:42 [テスト13] 14:42~15:18 [テスト14] 15:18~15:54 [テスト15] 15:54~16:30 [テスト16] 16:30~17:06 [テスト17] 17:06~17:42 [テスト18] 17:42~18:18 [テスト19] 18:18~18:54 [テスト20] 18:54~19:30 [テスト21] 19:30~20:06 [テスト22] 20:06~20:42 [テスト23] 20:42~21:18 [テスト24] 21:18~21:54 [テスト25] 21:54~22:30 [テスト26] 22:30~23:06 [テスト27] 23:06~23:42 [テスト28] 23:42~0:18 [テスト29] この時間の間隔で36分のタイマーを作ってほしいのですが可能でしょうか? 0:18、0:54、1:30などの時間で36分のタイマーが勝手にスタートしているようにしたいです。 もちろん時計と連動したものがほしいので、スタートボタンとかはいりません。 ファイルを開いたときに今の時間を判断しタイマーが動いてくれるとうれしいです。 あと、それぞれの時間帯に「コメント」を入れられるようにしたいです。 可能でしょうか?よろしくお願いします。

  • エクセルVBAで出来ますか??

    はじめまして。 私の質問を読んで下さりありがとうございます。 上司にエクセルで少々複雑な?仕組みを作るように指示されたのですが、私自身はエクセルに詳しくはなく、社内にも詳しい人がいなくて困っています。 「Excel VBA パーフェクトマスター」という本を購入して勉強を始めたのですが、あまりに情報が多すぎてどこを参考にすればよいのかすら分かりません・・・。 来週末までに作らないといけないため休日返上でお仕事しながら勉強していますが、さっぱり分からなくて泣きそうです・・。 エクセルVBAに詳しくて親切な方がいらっしゃいましたら、無理のない範囲で構いませんので、どうか教えて頂けないでしょうか。宜しくお願い致します。 前置きが長くなってしまいましたが、具体的には以下のような処理はどうすれば良いのかが分かりません。 (1) 「Sheet1」のセル[A2]をダブルクリックすると「Sheet3」が表示される。 (2) 「Sheet3」のセル[D5]をダブルクリックすると「Sheet2」のセル[C2]の値(文字か数字)が「Sheet1」のセル[A2]と「Sheet4」のセル[B5]に表示され、更に「Sheet5」のセル[F10]の数値が「Sheet1」のセル[N5]に表示される。 (3) 上記の一連の処理が完了すると「Sheet1」が表示される。(「Sheet1の画面に戻る) 以上のような処理を複数組み合わせればできそうなのですが、このような事はエクセルVBAで出来るでしょうか? (私には出来るのか出来ないのかすら分かりません。命令した上司も分かってないと思います。) 出来るか出来ないかだけでも結構なので、どうか教えてください。 もし可能なら、具体的なアドバイスを頂けると、とても助かります。 どうか宜しくお願い致します。

  • エクセルのvba

    こんにちは いつもお世話になります 早速ですがエクセルのVBAでわからないことがあります ある特定のセルを書き換えてENTERを押したときに イベントを発生させるにはどうすればよいのでしょうか Worksheet_Changeではどのセルを書き換えてもイベントが 発生してしまいます 素人ですみません 教えてください お願いします

  • エクセルVBAでタイマーコントロールは使えますか

    エクセルVBAでタイマーコントロールは使えますか。 エクセルVBAで、ある時刻になったらマクロを実行させたいと思っています。 無限ループの中にTIME関数で時刻を呼び出し、それをIF文で判定して、 一定時刻にマクロを実行させるものは作りましたが、CPU負荷が高く、24時間 連続で動作させることに不安を感じています。 この他に、VBのタイマーコントロールのような機能を持つオブジェクトや 便利機能等があったら教えていただけませんか。 (一応、VBで時刻管理をするプログラムを作ってそこからエクセルVBAを呼 び出す方法やタスクスケジューラでエクセルVBAを呼び出す方法、ATコマンド 等も考えていますが、可能ならエクセルVBAで閉じて処理をしたい)。 尚、私はWindowsMe+エクセル2000でVBAを作成しています。 実際にVBAを動かすのは、WinsowNT4.0サーバー+エクセル2000を予定してい ます。

  • VBA(エクセル)で自動的にボタンをクリックさせるには

    いつもお世話になっております。 下記のことがしたいのですがどうやって良いのかがわからなくって困っております。 やりたいこと。 AブックとBブックが有るとします。(双方ともエクセルファイル) エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと Bブックのシート上のコマンドボタンをクリックするという動きを VBAでさせたいのですがどうしてもクリックさせることができません。 試したこと。 初めは、AのボタンをクリックするとBのボタンをセレクトして SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。 何かやり方が有りましたら、お教えいただけませんでしょう。 宜しくお願いいたします。

  • VBAで,ビンゴゲームの数字の生成方法

    初心者です。 ビンゴゲームをつくりたいと思っています。 EXCELのVBAでつくりたいと思っていますが,最初の取りかかりで早くも困っています。 ボタンをクリックするごとに,数字が出てくるようにしたいのですが,その良い方法が思い当たりません。 「1~100までの数字をランダムに出したい。但し,一度出た数字は二度と出ないようにしたい。」 私の知恵では,EXCELのVBAだから,EXCELのシートで乱数を入れて,ソートをするか,又は大量のIF文を使うくらいしか思いつかないのいです。 良い方法があればどなたか教えてください。 よろしくお願いいたします。

専門家に質問してみよう