【解説】Excel VBAでストップウォッチの時間表示を変更する方法

このQ&Aのポイント
  • Excel VBAのコードを使って、ユーザーフォーム上のストップウォッチの時間表示を変更する方法を解説します。
  • 「0:02:29」と表示されている時間を「0:02」と表示するためには、VBAのコード内で時間の表示範囲を調整する必要があります。
  • 具体的には、計測開始時間と計測終了時間の差を計算し、その差を時分秒の形式で表示することで、「0:02」という時間表示を実現できます。
回答を見る
  • ベストアンサー

「○秒」のところの表示を消したい

●質問内容 下記のコードを用いてユーザーフォーム上で ストップウォッチに時間を計測できるフォームを 作成しました。 添付の画像において計測時間は「0:02:29」となっていますが、 これを「0:02」としたいと考えています。 コードをどのように書き換えればよいでしょうか? ちなみに「○秒」のところは全て切り捨てにするつもりです。 ご存知の方ご教示願います。 ●コード Option Explicit Dim inProcess As Boolean ' True なら計測中を表す Private m_Kaishi As Date Private m_Syuryo As Date '開始時間をクリックするとラベル22が時間に変わる Private Sub CommandButton6_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True m_Kaishi = Time Label22.Caption = FormatDateTime(m_Kaishi, vbShortTime) Label23.Caption = "" Label24.Caption = "" CommandButton6.Caption = "作業終了" Case True ' 計測を終了してインターバルを表示 inProcess = False m_Syuryo = Time Label23.Caption = FormatDateTime(m_Syuryo, vbShortTime) Label24.Caption = CDate(m_Syuryo - m_Kaishi) CommandButton6.Caption = "作業開始" End Select End Sub Private Sub UserForm_Initialize() CommandButton6.Caption = "作業開始" Label22.Caption = "" Label23.Caption = "" Label24.Caption = "" End Sub

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

これはVBAの質問ですか?VB6の質問ですか。ユーザーフォームとあるのでVBAでやってみた。 VBAなら日付・時刻は日付・時刻シリアル値が使われているのでFormatDateTimeを使わなくても良いのではと思う。 Label1.Caption = Format(m_Kaishi, "hh:mm")など。 質問のコードはほんとに動きましたか? VBAではないとか、私の方がおかしければ以下解答は無視してください。 ーー この質問のために、全体的にコードを全部書いて質問しなければダメかなと思った。 ーー 標準モジュールに Option Explicit Public inProcess As Boolean ' True なら計測中を表す Public m_Kaishi As Date Public m_Syuryo As Date ーー ユーザーフォームにはコマンドボタン2つと、ラベル3つを設けた。 コマンドボタンは開始用と終了用です。 テストの都合上、コントロールの名称は質問と変わっている。 ユーザーフォームのコードに Private Sub UserForm_Initialize() MsgBox "aaa" CommandButton1.Caption = "作業開始" inProcess = False Label1.Caption = "" Label2.Caption = "" Label3.Caption = "" End Sub ーー Private Sub CommandButton1_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True m_Kaishi = Time MsgBox m_Kaishi Label1.Caption = FormatDateTime(m_Kaishi, vbShortTime) Label2.Caption = "" Label3.Caption = "" End Select End Sub Private Sub CommandButton2_Click() CommandButton1.Caption = "作業終了" Select Case inProcess Case True MsgBox "bbb" ' 計測を終了してインターバルを表示 inProcess = False m_Syuryo = Time Label2.Caption = FormatDateTime(m_Syuryo, vbShortTime) Label3.Caption = FormatDateTime(m_Syuryo - m_Kaishi, 4) CommandButton1.Caption = "作業開始" End Select End Sub Label3.Caption = FormatDateTime(m_Syuryo - m_Kaishi, 4)は http://homepage2.nifty.com/pasocon/nyumon/formatdatetime.html を参考にした。 ==== Formatをつかったっ例 一応テスト済み Private Sub CommandButton1_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True m_Kaishi = Time MsgBox m_Kaishi 'Label1.Caption = FormatDateTime(m_Kaishi, vbShortTime) Label1.Caption = Format(m_Kaishi, "hh:mm") Label2.Caption = "" Label3.Caption = "" End Select End Sub Private Sub CommandButton2_Click() CommandButton1.Caption = "作業終了" Select Case inProcess Case True MsgBox "bbb" ' 計測を終了してインターバルを表示 inProcess = False m_Syuryo = Time 'Label2.Caption = FormatDateTime(m_Syuryo, vbShortTime) Label2.Caption = Format(m_Syuryo, "hh:mm") 'Label3.Caption = FormatDateTime(m_Syuryo - m_Kaishi, 4) Label3.Caption = Format(m_Syuryo - m_Kaishi, "hh:mm") CommandButton1.Caption = "作業開始" End Select End Sub

dradra33
質問者

お礼

imogasi様いつもご回答ありがとうございます。 2番目に記述していただいた Formatを使用した例で 試してみたところ、○秒のところは表示されなくなりました。 ありがとうございます。 参照のHPも閲覧についても「FormatDateTime」関数の使い方も 良く分かりました。今後の参考とさせていただきます。

関連するQ&A

  • 2つの時間から作業時間を算出したい

    ●質問の主旨 「開始時間」と「終了時間」を予め表示させておき、 「終了時間」-「開始時間」=「作業時間」とするには、 どのようなコード記述をすれば良いでしょうか?ご教示願います ●質問の補足 1.「作業開始」ボタンを押すと、「開始時間」が現在の時間に変わります。 2.「作業終了」ボタンを押すと、「終了時間」が現在の時間に変わります。 3.「作業終了」の処理が終わると同時に、赤色の部分が、   「終了時間」-「開始時間」=「作業時間」の時間計算を行い、計算結果を    表示させたいと考えています。 4.時間計算の上、表示を「0:00」(○時間○分)としたいと考えています。 5.現在のコードでは計算がされておらず、常に「0:00:00」が表示されます。 ●コード '開始時間をクリックするとラベル22が時間に変わる Private Sub CommandButton6_Click() With Me.CommandButton6 Me.Label22.Caption = FormatDateTime(Time, vbShortTime) End With End Sub '終了時間をクリックするとラベル23が時間に変わる Private Sub CommandButton7_Click() With Me.CommandButton7 Me.Label23.Caption = FormatDateTime(Time, vbShortTime) End With Call sagyoujikan End Sub '作業時間の算出 Private Sub sagyoujikan() Dim kaishi As Date Dim syuryo As Date kaishi = DateDiff("h", Label22, Label23) syuryo = DateDiff("m", Label22, Label23) Me.Label24.Caption = kaishi + syuryo End Sub 以上よろしくお願い申し上げます。使用機種はWindowsVistaで、 Excel2007です。私はVBA初心者です。

  • オプションボタンの使い分けによる時間計算

    オプションボタンの使い分け(自動入力と手動入力)によって、 「●やりたい操作」を行うには以下のコードをどのように修正すれば、 良いでしょうか?ご存知の方ご教示願います。 使用機種はWindowsVistaでExcel2007です 私はVBAをはじめて2カ月程度の初心者です。 ●やりたい操作 A)「自動入力」を選択(赤色部分)→原則の操作 1.「作業開始ボタン」を押すと「開始時間」が現在の時間になる。 2.「作業開始ボタン」を押すと表記が「作業終了」になる。 3.「作業終了ボタン」を押すと「終了時間」が現在の時間表記になる。 4.3と同時に「作業時間」が「終了時間」-「開始時間」の時間計算を行って   表記される。 ※このとき「手動入力ラベル」や「テキストボックス」には、それぞれロックが かかり、入力不可状態にする B)「手動入力」を選択(青色部分)→例外の操作 1.左から1番目のテキストボックスに「hh:mm」形式で任意の時間を入力 2.左から2番目のテキストボックスに「hh:mm」形式で任意の時間を入力 3.左から3番目のテキストボックスに「hh:mm」形式で2-1の時間計算   を行う ※このとき「自動入力ラベル」、「作業開始ボタン」、「開始時間」、 「終了時間」にそれぞれロックがかかる。 ●コード Option Explicit ' True なら計測中を表す Dim inProcess As Boolean Private j_Kaishi As Date Private j_Syuryo As Date Private s_kaishi As Date Private s_Syuryo As Date Private Sub UserForm_Initialize() OptionButton1 = True OptionButton2 = False TextBox5.Locked = True TextBox6.Locked = True TextBox7.Locked = True Label22.Caption = "開始時間" Label23.Caption = "終了時間" Label23.Caption = "作業時間" 'オプションボタンが1「自動」にオンならば、CommandButton6_Clickを呼び出す If OptionButton1 = True Then Call CommandButton6_Click 'オプションボタン1が「自動」にオフならば、 OptionButton2_Clickを呼び出す Else Call OptionButton2_Click End If End Sub '開始時間を自動入力クリックするとラベル1が時間に変わる Private Sub CommandButton6_Click() Select Case inProcess Case False ' 計測を開始する inProcess = True j_Kaishi = Time Label22.Caption = Format(j_Kaishi, "hh:mm") Label23.Caption = "" Label24.Caption = "" CommandButton6.Caption = "作業終了" Case True ' 計測を終了してインターバルを表示 inProcess = False j_Syuryo = Time Label23.Caption = Format(j_Syuryo, "hh:mm") Label24.Caption = Format(j_Syuryo - j_Kaishi, "hh:mm") CommandButton6.Caption = "作業開始" End Select End Sub '開始時間を手動入力 Private Sub OptionButton2_Click() CommandButton6.Locked = True TextBox5.Locked = False TextBox6.Locked = False s_kaishi = Time TextBox5.Text = Format(s_kaishi, "hh:mm") s_Syuryo = Time TextBox6.Text = Format(s_Syuryo, "hh:mm") TextBox7.Text = Format(s_Syuryo - j_Kaishi, "hh:mm") End Sub

  • ExcelVBAのイメージコントロールについて

    こんにちは。Excel2000を使用している初心者です。 フォーム上には以下のものがあります。 Image1 Label1、Label2、Label3、Label4 CommandButton1 ・CommandButton1を押すとImage1に画像Aをロードして、次に押すと消すという動作をさせます。 ・Image1の上をマウスが動くと座標をLabel1(x)、2(y)に常に表示させます。 ・Image1をクリックするとそのときの座標をLabel3(x)、4(y)に表示させたままにします。 コードは以下の通りです。 Dim Flg As Boolean Flg = False Private Sub CommandButton1_Click() If Flg = False then Me.Image1.Picture = LoadPicture ("C:\A.jpg") Flg = True Else Me.Image1.Picture = LoadPicture ("") Flg = False End If End Sub Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,_ ByVal X As Single, ByVal Y As Single) Me.Label1.Caption = X Me.Label2.Caption = Y End Sub Private Sub Image1_Click() Me.Label3.Caption = Me.Label1.Caption Me.Label4.Caption = Me.Label2.Caption End Sub ・・・という記述なんですが、まず画像を表示させて、次にイメージをクリックしてLabel3、4に座標を表示させた後、CommandButton1を押してもイベントを受け付けてくれません。 イメージをクリックさえしなければ、画像の表示/非表示の切り替えはできます。 何が間違っている(足りない?)のでしょうか? よろしくお願いします。

  • コードの添削お願いします(変数エラー)

    Option Explicit Private Sub CommandButton1_Click() Dim myStr As String If myStr <> "" Then myStr = TextBox.Value Label1.Caption = LTrim(myStr) Label2.Caption = RTrim(myStr) Label3.Caption = Trim(myStr) Else MsgBox "終了" End If End Sub 変数のエラーが出ますが、何処がおかしいですか? 宜しくお願い致します。

  • VBA DoEvents関数の働きと使い方を知りたい

    下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub

  • [Q:VBA] 現在のオブジェクトの参照(JavaScriptのthisキーワードに相当するもの)

    こんにちは。 Excel VBAで現在のオブジェクトの参照をすることはできますでしょうか?(JavaScriptのthisキーワードに相当するものはあるのでしょうか?) 下記のようなことをしたいのですが(コード自体に意味はありません。検証用です)。 よろしくお願い致します。 -- Private Sub CommandButton1_Click() キャプション = CommandButton1.Caption MsgBox(キャプション) End Sub Private Sub CommandButton2_Click() キャプション = CommandButton2.Caption MsgBox(キャプション) End Sub ・・・×数十個 ↓↓↓ Private Sub CommandButton1_Click() funcCaption End Sub Private Sub CommandButton2_Click() funcCaption End Sub ・・・×数十個 Sub funcCaption() キャプション = this.Caption MsgBox(キャプション) End Sub

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • Visual Basic 6.0でのLabelについて質問です。

    Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • 単純な質問で恐縮です。

    単純な質問で恐縮です。 コマンドボタン1を押したら、ラベル1が消えて、ラベル2が表示させるようにしたいのですが動きません。 Private Sub CommandButton1_Click() Label1.Visible = False Label2.Visible = True end sub どうしてでしょうか?

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

専門家に質問してみよう