Excel VBA 質問スレッド №2063 (未解決)

ユーザー定義関数で時刻24:00を扱いたい

投稿者 : azmax     投稿日時 : 2024/12/16(Mon) 11:46:05     OS : 未指定     EXCEL : 未指定
すいません。質問させてください。
下記のユーザー定義関数を使用しています。

Function time(s As Range, e As Range) As String

    time = "⑧"
    If s = CDate("10:00") And e = CDate("24:00") Then formula1 = "①"
    If s = CDate("0:00") And e = CDate("12:00") Then formula1 = "②"
    If s = CDate("12:00") And e = CDate("24:00") Then formula1 = "③"
    If s = CDate("0:00") And e = CDate("12:30") Then formula1 = "④"
    
End Function

24:00では関数動作しなく、ご教授いただければ幸いです。
参照元のセルは「1900/1/1 0:00:00」となっています。
すいません、初心者でわかっていないので説明不足ですが、よろしくお願いいたします。

スポンサーリンク
[返信 1] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : さんこう     投稿日時 : 2024/12/16(Mon) 13:08:56
>24:00では関数動作しなく

「CDate("24:00")」がエラーになるので、セルの値を文字列に変換して比較するとかがよろしいかと思います。

[返信 2] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : azmax     投稿日時 : 2024/12/16(Mon) 23:40:46
すいません、調べてみましたがわかりませんでした。
解決方法ご教授いただける方いらっしゃいましたらよろしくお願いいたします。

[返信 3] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : てらてら     投稿日時 : 2024/12/17(Tue) 05:49:23
こんにちは。

>下記のユーザー定義関数を使用しています。

そもそも time関数はすでに割り当てられているので再定義できないはずだが、、、
気分を害するかもしれませんが、提示されたコードは全く機能しません。

やりたい事は、以下のような感じではないでしょうか?

Function mytime(s As Range, e As Range) As String
    
    If s.Text = "10:00" And e.Text = "24:00" Then
        mytime = "①"
    ElseIf s.Text = "0:00" And e.Text = "12:00" Then
        mytime = "②"
    ElseIf s.Text = "12:00" And e.Text = "24:00" Then
        mytime = "③"
    ElseIf s.Text = "0:00" And e.Text = "12:30" Then
        mytime = "④"
    Else
        mytime = "⑧"
    End If
End Function

[返信 4] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : azmax     投稿日時 : 2024/12/17(Tue) 13:11:50
ありがとうございます。
早速、参考にさせていただきました。
しかし、
f s.Text = "10:00" And e.Text = "24:00" Then
> mytime = "①"
の関数が機能しなく、⑧表示となりました。
すいません、ユーザー定義関数の使い方をわかっていませんので
考えられる要因、正しい使い方をご教授いただけると幸いです。
わかっていない者が、必要な情報をお伝えできていない部分もあります。
質問いただければ情報お伝えいたします。
申し訳ございませんが、よろしくお願いいたします。



■[返信 3] てらてらさん(2024-12-17 05:49:23)の記事
> こんにちは。

> >下記のユーザー定義関数を使用しています。

> そもそも time関数はすでに割り当てられているので再定義できないはずだが、、、
> 気分を害するかもしれませんが、提示されたコードは全く機能しません。

> やりたい事は、以下のような感じではないでしょうか?

> Function mytime(s As Range, e As Range) As String

> If s.Text = "10:00" And e.Text = "24:00" Then
> mytime = "①"
> ElseIf s.Text = "0:00" And e.Text = "12:00" Then
> mytime = "②"
> ElseIf s.Text = "12:00" And e.Text = "24:00" Then
> mytime = "③"
> ElseIf s.Text = "0:00" And e.Text = "12:30" Then
> mytime = "④"
> Else
> mytime = "⑧"
> End If
> End Function

[返信 5] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : ごんぼほり     投稿日時 : 2024/12/17(Tue) 15:08:06
てらてらさんのコードは、セルの書式設定が [h]:mm になっていて、セルに 24:00 と表示されている必要があります

自前でなんとかするコード

Function TimeCode(s As Double, e As Double)
   Dim s2 As String, e2 As String, timespan As String
   s2 = Format(Int(s * 24), "00") & ":" & Format((s * 24 - Int(s * 24)) * 60, "00")
   e2 = Format(Int(e * 24), "00") & ":" & Format((e * 24 - Int(e * 24)) * 60, "00")
   timespan = s2 & "-" & e2
   Select Case timespan
      Case "10:00-24:00":  TimeCode = "①" & " " & timespan
      Case "00:00-12:00":  TimeCode = "②" & " " & timespan
      Case "12:00-24:00":  TimeCode = "③" & " " & timespan
      Case "00:00-12:30":  TimeCode = "④" & " " & timespan
      Case Else:           TimeCode = "⑧" & " " & timespan
   End Select
End Function

[返信 6] Re : ユーザー定義関数で時刻24:00を扱いたい
投稿者 : てらてら     投稿日時 : 2024/12/17(Tue) 18:47:47
エラーを見つけるには Debug.Print で中身を表示してみる事でしょう。
因みに Range("A1").Text とすると、セルに表示された見た目の文字列として値が取り出されます。

コードの冒頭で、以下のようにしてみてください。
Debug.Print s.Text
Debug.Print e.Text

結果が、その後の If文の条件式と異なれば、Hitしません。
もしかしたら、24:00:00 と 24:00 を比較しているのが原因かもしれません。

Range("A1").Value と Range("A1").Text の区別ができるようになると吉です。

ユーザー定義関数に関しては、以下を参考にしてみてください。
https://help-vba.com/user-teigi/

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-01-25 12:03:11 )
タイトルとURLをコピーしました