• 締切済み

VBA 時間設定

以前こちらでVBAでの時間設定を行いたいと思っています。 下記が現在使用しているものですが、 newHour、newMinute、newSecond 共にシートのセルに 数字を入力したものを読み込んで時間の設定をしたいと思っています。 セルA1:newHour セルB1:newMinute セルC1:newSecond に数字を入れて、時間を変更したりしたいと思っています。 よろしくお願いします。 Sub wait() newHour = Hour(Now()) newMinute = Minute(Now()) + 4 newSecond = Second(Now()) + 50 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.wait waitTime End Sub

みんなの回答

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

Sub test04() MsgBox TimeSerial(Range("A1"), Range("B1"), Range("C1")) End Sub の例のようにTimeSerial関数でよいと思うが。 newHour,などの変数を生かすのなら newHour=range("A1") などでよいが。 時分秒の値の制約は別途組み込まないとダメだが。 ーー >以前こちらでVBAでの時間設定を行いたいと思っています。 何の意味? この質問自体の真意が良くわからない。 ほとんど私が書いたことなど、質問者のコードに出ていて、 newHour=range("A1") など質問にもならない時候だと思うし。 とりあえず書いてみたが。

sumi3377
質問者

お礼

newMinute = Minute(Now()) + Range("B1") で分の指定もできました。 >以前こちらでVBAでの時間設定を行いたいと思っています。 は、自分でも何だ!と思いました。 気にしないでください。 有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル VBA 自動処理の途中終了について

    エクセルで単語のフラッシュカードを自動表示させたいと考えています。 エクセルの1セルの大きさを縦最大、横120位に広げ、C列に単語、D列に意味を縦に並べ、 C2 1秒後 D2 1秒後 C2 1秒後 D2 1秒後  C3 1秒後 D4 のように単語と意味を交互に2度ずつ表示させます。 For Next を使い表示はできるようになりましたが、途中で止めたいときに、escを押すと For Nextの処理を最後まで一気に行ってから止まってしまいます。 C5を表示していたら、その場所でPause をし、スタートボタンで再度継続して表示したいと思います。また、単語や意味のセルにはそれぞれ別の文字装飾をしてあるので、(赤や青、大きさなど) セルを移動して表示したいと考えています。 実は他のサイトでも質問しましたが、思ったような回答を得られませんでした。よろしくお願いします。 Sub セル移動() Dim waitTime As Variant i = 0 Range("c2").Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Range("c3").Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime For i = 1 To 50 ActiveCell.Select Selection.Offset(0, 1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(0, -1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(0, 1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Selection.Offset(1, -1).Select waitTime = Now + TimeValue("0:00:01") Application.Wait waitTime Application.OnKey ("{esc}"), "shuryo" i = i + 1 Next i End Sub Sub shuryo() Application.ScreenUpdating = False Range("c2").Select Application.GoTo reference:=ActiveCell, scroll:=True Application.ScreenUpdating = True Exit Sub End Sub

  • vba 初心者

    Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub ExcelからPDFファイルを検索して印刷したいのですが、 見よう見まねで作ってみたもののエラーが出てしまってよく分かりません。 指摘できるところご指導よろしくお願いします。

  • vba初心者

    いつもお世話様です。 A列にあらかじめデータを入れといてinboxでデータを検索してもしあったらPDFファイルを開いて印刷でもしデータがなかったらinboxに戻るかたちにしたいんですけど、do...loopの使い方が分からないのと、デバックがでてしまってどう直せばいいかわかりません。サンプルコードがあれば助かります。よろしくお願いします。 Dim a As Integer Dim inbox As String Dim Localpath As Variant Dim c As Range, myFadd As String Dim flag As Variant Dim MyShell As Object Dim Mysh As String Dim newHour As Variant Dim newMinute As Variant Dim newSecond As Variant Dim waitTime As Variant Localpath = ThisWorkbook.Path a = 1 inbox = InputBox("番号") Do If inbox = Empty Then Exit Sub End If If inbox = Cells(a, 1) Then MsgBox ("あります") Exit Do Else a = a + 1 ←ここでデバックがでてしまいます。 ElseIf Cells(a, 1) <> inbox Then MsgBox ("ない") End If Loop Set MyShell = CreateObject("WScript.Shell") MyShell.Run ("AcroRd32.exe /n") MyShell.Run ("AcroRd32.exe /p") & Localpath & "\" & Myfile & ".pdf" newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 10 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime Application.SendKeys "{Enter}", True '次の使用例は、10 秒を過ぎるとメッセージを表示します。 If Application.Wait(Now + TimeValue("0:00:10")) Then MsgBox "時間が過ぎました。" End If End Sub

  • vbaで出来る事をわざわざAPIを使う理由・必要性

    vbaで出来る事をわざわざAPIを使う理由・必要性は? 他人が作ったエクセルファイルを操作しているのですが ところどころにAPIが使われています。 しかし、「なぜvbaでできるのにAPIを使ってるのだろう?」と思う部分があります。 例えば、 時間を止め対場合、 vbaで Sub vba() Application.Wait Now + TimeSerial(0, 0, 2) End Sub とすればいいのに、 APIで Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub API() Sleep 2000 End Sub としています。 APIを使う事によって、どのようなメリットがあるのでしょうか?

  • VBAの時間計算

    エクセルのVBAで時間を比較して処理するために以下のプログラムを書いています。 しかしオーバーフローが出てうまくいきません。 お手数ですが解決方法を教えてください。 dim NowTime as Long h = Hour(Now) m = Minute(Now) s = Second(Now) NowTime = ((h*60)*60)+(M*60)+s 宜しくお願いいたします。

  • Word VBAにwaitに準ずる機能を使いたい

    はじめまして。 複数の部署へ配布する用に大量の印刷を行っています。 以下のことをやりたいのですが、application.WaitがWordでは使えず困っています。 やりたいこと: 作成したWord文書を、コピー機(1)・コピー機(2)から交互に出力したい。 (1)と(2)の出力の間に、30秒ごとの時間を置いて出力されるようにしたい。 書いたVBA: =================== Sub テクニカルインフォメーション() '回覧紙配布のため、1号機と2号機で出力をします。 ' '  Dim waitTime As Variant   ActivePrinter = "TF1号機_1" '代営TI 60部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=60, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime   ActivePrinter = "8FMFP_2" '法規 19部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=19, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime ActivePrinter = "TF1号機_1" '代営FF 43部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=43, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 waitTime = Now + TimeValue("0:00:30") Application.Wait waitTime   ActivePrinter = "8FMFP" '高機能SC 40部   Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentWithMarkup, Copies:=40, Pages:="", PageType:= _ wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 End Sub =================== 前任者が残したExcelのVBAを参考にしたのですが、 動かずに大変困っています。 ご教授頂けないでしょうか。 いままでVBAはほとんど触ったことがなく、マクロの記録で乗り越えてきたので 基礎構文もよく理解をしていません。 不勉強で大変申し訳ないのですが、どうかよろしくお願い致します。

  • セルの現在時刻表示の更新間隔をセルから入力したい

    セルの現在時刻表示の更新間隔をセルから入力したい マクロは以下を使用してますが更新間隔変更のtimevalue(c3)とするとエラー13が出ます。 どなたかお教え下さい。 ******************************************** Sub Auto_Open() Dim TargetTime, WaitTime TargetTime = Now + TimeValue("00:00:01") WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro1", WaitTime End Sub Sub Macro1() Dim TargetTime, WaitTime Calculate TargetTime = Now + TimeValue("00:00:01") 'ココをセルにするとエラー13がでる WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro1", WaitTime End Sub Sub auto_close() Dim i As Integer, TargetTime On Error Resume Next For i = 1 To 10 TargetTime = Now + TimeValue("00:00:" & Application.Text(i, "00")) Application.OnTime TargetTime, "Macro1", , False Next i End Sub **********************************************

  • VBAのコンボボックスで選んだものによって、違う数字を代入させたい

    VBAのコンボボックスで選んだものによって、違う数字を代入させたい お知恵をお貸しください。 現在、EXCEL2007のVBAにて、ちょっとしたVBAを作成しています。 コンボボックスには14項目を設定しています。 そのコンボボックスで選んだものによって下のコードの@マーク部に違う数字を代入させたいのですが、どうしたらいいのでしょうか? (例) ----コンボボックス---- あ い う え お か き ・ ・ ・ コンボボックスは14項目あり、コンボボックス内の「う」を選ぶと、5が代入され下のコードの@部分に5が入ります こんな風にコンボボックス内の選ぶものによって違う数字が代入される。 Dim a As Date Dim b As Long a = TimeSerial(CInt(TextBox5.Text), CInt(TextBox6.Text), 0) - TimeSerial(CInt(TextBox3.Text), CInt(TextBox4.Text), 0) Label6.Caption = Hour(a) + Minute(a) / 60 Label7.Caption = (Hour(a) + Minute(a) / 60) * @

  • VBAのタイマー

    こんにちは VBAで、一日に一回起動するマクロを作ろうと思っています。 Sub timer() Dim settime As Variant Dim waittime As Variant settime = TimeValue("00:35:00") '指定時刻 waittime = TimeValue("00:01:00") settime = settime + waittime '指定時刻待ち時間 Application.OnTime TimeValue(settime), "sub" End Sub な感じなのですが、これだと一度起動すると二日目以降は動作しなくなります。 毎日起動するにはどうしたら良いものでしょうか

  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、