Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10491 / 13646 ツリー ←次へ | 前へ→

【21534】条件が認識しません あすなろ 05/1/22(土) 23:31 質問[未読]
【21535】Re:条件が認識しません ちゃっぴ 05/1/22(土) 23:44 回答[未読]
【21536】Re:条件が認識しません りすりす 05/1/22(土) 23:59 回答[未読]
【21538】Re:条件が認識しません あすなろ 05/1/23(日) 0:20 質問[未読]
【21539】Re:条件が認識しません Hirofumi 05/1/23(日) 0:46 回答[未読]
【21540】Re:条件が認識しません あすなろ 05/1/23(日) 1:03 お礼[未読]
【21542】時刻取得 あすなろ 05/1/23(日) 1:55 質問[未読]
【21543】Re:条件が認識しません Hirofumi 05/1/23(日) 2:14 回答[未読]
【21552】Re:条件が認識しません あすなろ 05/1/23(日) 15:13 お礼[未読]

【21534】条件が認識しません
質問  あすなろ  - 05/1/22(土) 23:31 -

引用なし
パスワード
   ■どうしても分かりませんので教えてください。
最初にインプットBOXを表示させて時刻をhh.mm.ssの形式で入力させます。
その後入力した時刻から10分前の時刻を取得したいのです。
下記のようにVBAを構成しましたが
分(fun)が9以下を認識していないようで
End Ifまで進んでしまいます。
やりたい事は10分前の時刻取得なので
例えば入力した分が5分だと10分前は55分となります。
どのようにすれば宜しいのでしょうか?

■実はまだこの後に取得した10分前の時、分、秒から
hh.mm.ssの形式への表示もしなければなりません。
他にhh.mm.ssの形式で10分前の時刻を取得する良い方法があればご教授願います。

Sub auto_open()
  Dim time As String
  Dim zi As String
  Dim fun As String
   time = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
  If time <> "" Then
    Sheets("Sheet1").Select
    Range("B1").Value = time
    zi = Left(time, 2)
    fun = Mid(time, 4, 2)
    '時の取得
    If fun <= 9 Then
    Range("b2").Value = zi - 1
    ElseIf zi = 0 Then
    Range("b2").Value = 23
    End If
    Range("b2").Value = zi
    '分の取得
    If fun <= 9 Then
    Range("b3").Value = fun + 50
    End If
    Range("b3").Value = fun - 10
    '秒の取得
    Range("B4").Value = Right(time, 3)
  Else
   MsgBox "時刻が入力されませんでした。最初からやり直してください"
  Exit Sub
  End If
 End Sub

【21535】Re:条件が認識しません
回答  ちゃっぴ  - 05/1/22(土) 23:44 -

引用なし
パスワード
   変数funがString型で宣言されているからでは?

代入する時点でCLng関数をつかって、Long型にしてやりましょう。

Dim fun As Long

fun = CLng(Mid(time, 4, 2))

あと、時刻を扱うなら、はじめからDate型でやったほうが
らくちんです。

加算するなら、DateAdd関数って言うものもありますし、
DateValue関数っていうのもあります。

【21536】Re:条件が認識しません
回答  りすりす  - 05/1/22(土) 23:59 -

引用なし
パスワード
   ▼あすなろ さん:
>■どうしても分かりませんので教えてください。
>最初にインプットBOXを表示させて時刻をhh.mm.ssの形式で入力させます。
>その後入力した時刻から10分前の時刻を取得したいのです。
>下記のようにVBAを構成しましたが
>分(fun)が9以下を認識していないようで
>End Ifまで進んでしまいます。
>やりたい事は10分前の時刻取得なので
>例えば入力した分が5分だと10分前は55分となります。
>どのようにすれば宜しいのでしょうか?
>
>■実はまだこの後に取得した10分前の時、分、秒から
>hh.mm.ssの形式への表示もしなければなりません。
>他にhh.mm.ssの形式で10分前の時刻を取得する良い方法があればご教授願います。
>
>Sub auto_open()
>  Dim time As String
>  Dim zi As String
>  Dim fun As String
>   time = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
>  If time <> "" Then
>    Sheets("Sheet1").Select
>    Range("B1").Value = time
>    zi = Left(time, 2)
>    fun = Mid(time, 4, 2)
>    '時の取得
>    If fun <= 9 Then
>    Range("b2").Value = zi - 1
>    ElseIf zi = 0 Then
>    Range("b2").Value = 23
>    End If
>    Range("b2").Value = zi
>    '分の取得
>    If fun <= 9 Then
>    Range("b3").Value = fun + 50
>    End If
>    Range("b3").Value = fun - 10
>    '秒の取得
>    Range("B4").Value = Right(time, 3)
>  Else
>   MsgBox "時刻が入力されませんでした。最初からやり直してください"
>  Exit Sub
>  End If
> End Sub


 MsgBox DateTime.DateAdd("n", -5, Now)


DateTimeを使えば簡単 関数よりどりみどり。
DateTime. で コード支援が働くので(でないならCTRL+スペースキー)
お好きな関数をどうぞ!!

ついでに
DateTime.DateAddなら
DateAddをダブルクリックして選択状態にして、F1でヘルプ出現。

【21538】Re:条件が認識しません
質問  あすなろ  - 05/1/23(日) 0:20 -

引用なし
パスワード
   > MsgBox DateTime.DateAdd("n", -5, Now)
>
>
>DateTimeを使えば簡単 関数よりどりみどり。
>DateTime. で コード支援が働くので(でないならCTRL+スペースキー)
>お好きな関数をどうぞ!!
>
>ついでに
>DateTime.DateAddなら
>DateAddをダブルクリックして選択状態にして、F1でヘルプ出現。

ちゃっぴ様
りすりす様

あまりの早い回答にビックリしました(^o^)
ありがとうございます。
私、最近始めたばかりの超ド素人でして
お二人の仰っている事が殆ど理解できません・・・。
本当にスミマセンm(_ _)m
Date関数?ですか??
なにやら便利そうなのですが、困りました。
ではインプットBOXに入れた時刻の時分秒から(入力形態はお任せいたします)
10分前の時刻をサクッ!!と取得する方法を教えてくださいませんか?
またそれをhh.mm.ssの形式で表現できるのでしょうか?

他力本願でスミマセンです。
仕事でどうしても必要なんですm(_ _)m

【21539】Re:条件が認識しません
回答  Hirofumi  - 05/1/23(日) 0:46 -

引用なし
パスワード
   こんなでは?

Sub Test()

  Dim strTime As String
  Dim dtmTime As Date
  Dim dtmResult As Date
  
  strTime = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
  If strTime <> "" Then
    If IsDate(strTime) Then
      dtmTime = TimeValue(strTime)
      dtmResult = dtmTime - #12:10:00 AM#
      With Sheets("Sheet1")
        With .Range("B1")
          .NumberFormatLocal = "hh.mm.ss"
          .Value = dtmTime
        End With
        .Range("B2").Value = Hour(dtmResult)
        .Range("B3").Value = Minute(dtmResult)
        .Range("B4").Value = Second(dtmResult)
        With .Range("B5")
          .NumberFormatLocal = "hh.mm.ss"
          .Value = dtmResult
        End With
      End With
    Else
      MsgBox "時刻が入力されませんでした。最初からやり直してください"
      Exit Sub
    End If
  End If
  
End Sub

【21540】Re:条件が認識しません
お礼  あすなろ  - 05/1/23(日) 1:03 -

引用なし
パスワード
   ▼Hirofumi さん:
>こんなでは?
>
>Sub Test()
>
>  Dim strTime As String
>  Dim dtmTime As Date
>  Dim dtmResult As Date
>  
>  strTime = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
>  If strTime <> "" Then
>    If IsDate(strTime) Then
>      dtmTime = TimeValue(strTime)
>      dtmResult = dtmTime - #12:10:00 AM#
>      With Sheets("Sheet1")
>        With .Range("B1")
>          .NumberFormatLocal = "hh.mm.ss"
>          .Value = dtmTime
>        End With
>        .Range("B2").Value = Hour(dtmResult)
>        .Range("B3").Value = Minute(dtmResult)
>        .Range("B4").Value = Second(dtmResult)
>        With .Range("B5")
>          .NumberFormatLocal = "hh.mm.ss"
>          .Value = dtmResult
>        End With
>      End With
>    Else
>      MsgBox "時刻が入力されませんでした。最初からやり直してください"
>      Exit Sub
>    End If
>  End If
>  
>End Sub

Hirofumi 様

ありがとうございます。
早速使わせていただきました。
スッゴイです!!VBAの中身は訳が分かりませんが最高です!(笑
概ね良い感じでしたが最初の時刻入力において
午前0時台(例 00.05.10など)を入力しますとエラーとなってしまいました。
わざわざ作っていただいて恐縮ですが今一度よろしくおねがい申し上げます。

【21542】時刻取得
質問  あすなろ  - 05/1/23(日) 1:55 -

引用なし
パスワード
   皆様に教えていただいたDateaddを勉強いたしました。
なんとこれだけの構文でできましたが
Hirofumi様と同様
時刻入力で00.を入力しますと
エラーとなってしまいます。
あともう少しなのですが・・・。

Sub test()
Dim time As Date
time = InputBox("時刻を入力してください。hh.mm.ss")
Range("a1").Value = DateAdd("n", -10, time)
End Sub

【21543】Re:条件が認識しません
回答  Hirofumi  - 05/1/23(日) 2:14 -

引用なし
パスワード
   こんなかな?

Sub Test()

  Dim strTime As String
  Dim dtmTime As Date
  Dim dtmResult As Date
  
  strTime = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
  If strTime <> "" Then
    If IsDate(strTime) Then
      dtmTime = TimeValue(strTime)
      dtmResult = dtmTime - #12:10:00 AM#
      If dtmResult < 0 Then        '★追加
        dtmResult = dtmResult + 1    '★追加
      End If               '★追加
      With Sheets("Sheet1")
        With .Range("B1")
          .NumberFormatLocal = "hh.mm.ss"
          .Value = dtmTime
        End With
        .Range("B2").Value = Hour(dtmResult)
        .Range("B3").Value = Minute(dtmResult)
        .Range("B4").Value = Second(dtmResult)
        With .Range("B5")
          .NumberFormatLocal = "hh.mm.ss"
          .Value = dtmResult
        End With
      End With
    Else
      MsgBox "時刻が入力されませんでした。最初からやり直してください"
      Exit Sub
    End If
  End If
  
End Sub

PS:
余談ですが、
質問時のコードでtimeと言う変数名を使っていますが、VBAにTimeと言うステートメント、関数が有ります
因って、予約名と言って本来は使わない、使え無い名前です
今回、Dimで変数宣言されているから変数として動いている様ですが、此れで変数宣言されていないで

Time = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")

等とすると、Systemの時間が変更されてしまいます
こう言う事とを回避する為に、成るべく変数名に頭3文字程度のプリフィックスを付けた方が無難です
(使いたい変数名は、大抵が予約名です)

【21552】Re:条件が認識しません
お礼  あすなろ  - 05/1/23(日) 15:13 -

引用なし
パスワード
   ▼Hirofumi さん:
>こんなかな?
>
>Sub Test()
>
>  Dim strTime As String
>  Dim dtmTime As Date
>  Dim dtmResult As Date
>  
>  strTime = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
>  If strTime <> "" Then
>    If IsDate(strTime) Then
>      dtmTime = TimeValue(strTime)
>      dtmResult = dtmTime - #12:10:00 AM#
>      If dtmResult < 0 Then        '★追加
>        dtmResult = dtmResult + 1    '★追加
>      End If               '★追加
>      With Sheets("Sheet1")
>        With .Range("B1")
>          .NumberFormatLocal = "hh.mm.ss"
>          .Value = dtmTime
>        End With
>        .Range("B2").Value = Hour(dtmResult)
>        .Range("B3").Value = Minute(dtmResult)
>        .Range("B4").Value = Second(dtmResult)
>        With .Range("B5")
>          .NumberFormatLocal = "hh.mm.ss"
>          .Value = dtmResult
>        End With
>      End With
>    Else
>      MsgBox "時刻が入力されませんでした。最初からやり直してください"
>      Exit Sub
>    End If
>  End If
>  
>End Sub
>
>PS:
>余談ですが、
>質問時のコードでtimeと言う変数名を使っていますが、VBAにTimeと言うステートメント、関数が有ります
>因って、予約名と言って本来は使わない、使え無い名前です
>今回、Dimで変数宣言されているから変数として動いている様ですが、此れで変数宣言されていないで
>
>Time = InputBox("時刻を入力してください。hh.mm.ss", "時刻入力")
>
>等とすると、Systemの時間が変更されてしまいます
>こう言う事とを回避する為に、成るべく変数名に頭3文字程度のプリフィックスを付けた方が無難です
>(使いたい変数名は、大抵が予約名です)

Hirofumi 様
ありがとうございました。
アドバイスまでいただき大変勉強になりました。
構文は大切に使わせていただきます。

10491 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free