『時間(hh:mm形式)文字列の計算方法について』(栗栄太)
8時15分を示す。"8:15" をセルに書込んで、書式設定で数値にすると
0.34375になります。
これをVBAで行うにはどうすればいいですか?
セルに一度書いて、書式を変更してセルを読みこむという方法ではなく
純粋にプログラムだけでの方法です。
また同様に、
8時15分を示す。"8:15"を分の値として 495 に
計算する方法も教えてください。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
Private Function GetHHMMtoMinutes(valstr As String) As Long
Dim var As Variant
var = Split(valstr, ":")
GetHHMMtoMinutes = Val(var(0)) * 60 + Val(var(1))
End Function
Private Function GetHHMMtoDayNum(valstr As String) As Double
Dim var As Variant
var = Split(valstr, ":")
GetHHMMtoDayNum = Val(var(0)) / 24 + Val(var(1)) / (24 * 60)
End Function
(栗栄太) 2025/11/04(火) 15:48:30
EXCELで時刻は1日を1、1時間を1/24、1分を1/(24*60)とする小数で管理していて表示形式で時刻表示の形にしているもの。
なので例えばA1セルに時刻があるとして
Sub Test()
Dim A As Double
A = Range("A1").Value
MsgBox A
End Sub のように小数点型の変数にいれれば小数としてそのまま扱える。
後者に関しては上記(1日=1、1時間=1/24、1分=1/(24*60))を参考にして
Sub tst2()
Dim a As Integer
a = Range("A1") * 24 * 60
MsgBox a
End Sub
(ねむねむ) 2025/11/04(火) 15:58:01
私はセルに時刻が入力されていて、と判断したのだがよく見るとVBA内で文字列を、 ということか。
であれば私の方法ではなく不明さんの方法で試してみてくれ。
また、不明さんの方法で lll * 24 * 60 とすると"8:15"→495にできる。 (ねむねむ) 2025/11/04(火) 16:18:47
既に皆さんから提示があったとおりです。
>以下のようなことができるVBAの関数はないのでしょうか? 組み込みの関数は無いですね。(簡単なものなので、既にあると言ってもよいかも知れません)
既に回答があったように
Private Function GetHHMMtoMinutes(valstr As String) As Long
GetHHMMtoMinutes = CDate(valstr)*24*60
End Function
Private Function GetHHMMtoDayNum(valstr As String) As Double
GetHHMMtoDayNum = CDate(valstr)
End Function
とすれば、
Sub test()
[A1] = GetHHMMtoMinutes("8:15")
[A2] = GetHHMMtoDayNum("8:15")
End Sub
と使えます。
# もっともわざわざ長い名前の関数にするほどでもない気がしますけれども。
# 例えば後者は、CDbl(CDate("8:15")) で済みます。
(xyz) 2025/11/04(火) 17:54:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.