1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelVBA練習 タイマーを作る

Posted at

はじめに

Excel VBAの練習としてタイマーを作るというのが流行っているみたいなので作ってみました。

動作確認環境

デスクトップアプリ版 Office 365 Enterprise Excel
(おそらく大体のバージョンで動作します)

目標のもの

最終的な目標の設定はとても重要です。

動作例

① SETのセルに時間をセット

今回は分、秒、デシ秒(10分の1秒)まで設定できるようにしましょう。
動作例図1

② 「開始」ボタンをクリック

ボタンをクリックすることでマクロを実行します。
動作例図2

③ NOWに現在の残り時間が表示されながら減少

この間,Excelでの操作はできないですが,今回はこれで妥協します。
動作例図3

④ 残り時間が 0分00.0秒になったら「時間です」とメッセージを表示

シンプルながらタイマーとしての役割は果たしています。
動作例図4

ソースコード

これがソースコードの全文です。(ボタンへの追加などは後で)

Timerモジュール
'===================================='
' タイマー             '
' MysoShake             '
'===================================='

'変数選言の強制
Option Explicit

'ミリ秒単位で待機させる関数を使えるようにする
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'ボタンクリック時に呼び出す
Sub OnButtonClick()
    
    'ループ用フラグ
    Dim run_flag As Boolean
    
    '今の残り時間
    Dim t_min As Long
    Dim t_sec As Long
    Dim t_dsec As Long
    
    'B2,C2,D2セルからそれぞれ分,秒,デシ秒を取得(minute,second,decisecond)
    t_min = Cells(2, 2).Value
    t_sec = Cells(2, 3).Value
    t_dsec = Cells(2, 4).Value
    
    'とりあえずはじめはループする
    run_flag = True
    
    Do Until run_flag = False
        
        '1回分(1ds = 100ms)残り時間を減らす
        t_dsec = t_dsec - 1
        
        '繰り下がり計算 [1秒-1デシ秒 = 9デシ秒]
        If t_dsec = -1 Then
            
            t_sec = t_sec - 1
            t_dsec = 9
            
            '繰り下がり計算2 [1分-1秒 = 59秒]
            If t_sec = -1 Then
                
                t_min = t_min - 1
                t_sec = 59
                
            End If
            
        End If
        
        'タイマーが0分0.0秒になったら終了
        If t_min = 0 And t_sec = 0 And t_dsec = 0 Then
            
            run_flag = False
            
        End If
        
        '今の残り時間をB4,C4,D4セルに表示
        Cells(4, 2).Value = t_min
        Cells(4, 3).Value = t_sec
        Cells(4, 4).Value = t_dsec
        
        '100ms待つ
        Call Sleep(100)
        
    Loop
    
    'お知らせ
    Call MsgBox("時間です")
    
End Sub

これを新しいモジュールTimer(好きな名前)に入れて保存しましょう。
VBEでモジュール作成

ボタンの追加と見た目の設定

あとは体裁を整えてボタンを配置するのみです。

① 体裁を整える

時間入力の枠を適当に作成します。(B2,C2,D2セルが初期設定,B4,C4,D4が処理中の値で,今回は変更できません)
SETやNOWの枠を作成

②-1 ボタンの配置

ボタンをメニューから選んで配置します。
ボタンを配置するためのメニュー

[開発タブ] → [挿入] → [ボタン] (左上の何もない箱っぽいアイコン)がボタンです。
そのあとでシート上でドラッグ&ドロップするとボタンが作られます。

②-2 マクロの登録

事前に作ったマクロを選んでOKを押しましょう。
マクロ登録画面

ボタンは右クリックすると編集モードになるので移動や表示ラベルの変更もできます。
また[Alt]キーを押しながら操作するとボタンをセルに合わせて配置できます。
ボタンの配置

おわりに

お読みくださりありがとうございました。
何かお気づきの点がありましたらお教えいただければ幸いです。

追伸
サクッと作ろうとしたのに、説明のスクショをとりながらの作業で少し長くなりました(所要時間 40分)

ループがあって短いソースでも書けるので,適度に勉強になりそうないい題材だと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?