エクセルのマクロを起動させておいて、1日に10回ほど決まった時刻に決まった作業をさせるマクロの書き方をお教えください。具体的には楽天証券のRSSで決まった時刻の株価を記録しておきたいのです。

回答の条件
  • 1人2回まで
  • 登録:2009/03/29 01:30:07
  • 終了:2009/04/05 01:35:03

回答(3件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/03/29 03:13:56

ポイント35pt

(1)ループさせ続ける

無限ループのようなコードを書き、時刻を適宜チェックするという荒業。

CPU使いっぱなしになりますし、ループを続ける事によって

フリーズしたりする可能性も結構高いので、一時凌ぎ以外には使えません。


(2)タイマーコントロール系のフリーソフトを使う

どれがどれやら・・・何とも言えません。


(3)Windowsのタスクスケジューラを使う

Excelを動かし続けるのではなくて

WindowsのタスクスケジューラでExcelを定時的に起動させるのがスマート。

マクロ名をAutoExecにしておけばブックを開いた時に動きだします。

VBScriptを使えればExcelを起動することなく(実際には裏で動いているけど)行えるので

よりスマートなシステムにすることも可能だけれど覚える事が増えるので割愛。

@IT:Windows TIPS -- Tips:タスク・スケジューラとWSHで定例処理を実現する

id:karoneko

回答ありがとうございます。いろいろ難しそうですね。高齢者になって・・・頭がなかなか回りません(笑)

エクセルシートにボタンを付けて押すとその時の株値等をコピペできるようにしましたが、

これを8:30 8:50 9:00 9:15 9:30 11:00 に自動で押してくれるととてもウレシイのです。

2009/03/29 10:30:48
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/29 13:11:56

ポイント35pt

kn1967さんの(1)の方法でやってみました。

Do~Loopで無限ループにすると、私のPC環境はクアッドコアだったので、

4つのコアの内1つが常に最大状態で、25%程度の使用率。

できなくもないが、一般的じゃなくてメモリのこともあるし実用的じゃないですね。

(3)のタスクスケジューラでブックを開くときにマクロが実行されて、終了したら閉じるようにするのが実用的だと思います。


因みに、(1)で作ったコードは以下。

シートにスタートストップボタンを作って、シートモジュールに

Private Sub CommandButton1_Click()
    If fRun Then
        fStop = True
        CommandButton1.Caption = "スタート"
    Else
        CommandButton1.Caption = "ストップ"
        Call TimerTest
    End If
End Sub

標準モジュールに

Option Explicit

Public fStop As Boolean
Public fRun As Boolean

Sub TimerTest()
    Dim i As Integer
    Dim f As Boolean
    Dim strTime  As String
    Dim strTime2 As String
    Dim setTime(1 To 6) As String
    
    setTime(1) = "8:30"
    setTime(2) = "8:50"
    setTime(3) = "9:00"
    setTime(4) = "9:15"
    setTime(5) = "9:30"
    setTime(6) = "11:00"
    
    fRun = True
    Do
        DoEvents
        If fStop Then Exit Do
        
        strTime = Hour(Now) & ":" & Minute(Now)
        f = False
        For i = 1 To UBound(setTime)
            If setTime(i) = strTime And setTime(i) <> strTime2 Then
                f = True
                strTime2 = setTime(i)
                Exit For
            End If
        Next
        
        If f Then
            'ここに処理が入ります。
            MsgBox strTime
            
        End If
    Loop
    fRun = False
    fStop = False
End Sub
id:karoneko

ご丁寧な回答を本当に有難うございます。

明日からインターネットのできる温泉に1週間籠もりますので・・・さっそくチャレンジしてみます。

2009/03/29 21:46:38
id:airplant No.3

airplant回答回数220ベストアンサー獲得回数492009/03/31 00:42:37

ポイント10pt

既に解決しているかもしれませんが・・・

一般的に、10回/日であれば、kn1967さんが書かれているWindowsのタスクの機能がいいと思います。

標準モジュールにauto_run()を記載しておき、タスクでそのExcelファイル名を指定しておく。

ボタンを押した処理をauto_run()に書いておく。

(ただし、セキュリティレベルを「低」にしておく必要があります)

autoexecはAccessの方と思いますので、Excelではauto_runですね。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません