Excel。VBA。時・分から時間を作りたいときは、TimeSerial関数をつかいます
<Excel VBA: TimeSerial関数>
Excel VBAで、Excelの関数をつかってみると、希望通りに算出できないことがあります。
例えば、時間。
次の表をつかって、説明します。
A列には、「時」。
B列には、「分」。
それぞれ入力されています。
C列に、時間を表示したいわけです。
Excelだと、TIME関数をつかえばいいわけですが、Excel VBAのTIME関数は、現在の時間を取得する処理をするために、時間をつくることはできません。
Excel VBAでは、TIME関数ではなくて、「TimeSerial関数」をつかわないと、算出することができません。
では、TimeSerial関数をつかって、プログラム文をつくってみます。
Sub 時間()
Dim i As Long
Dim 時 As Integer
Dim 分 As Integer
i = 2
Do While Cells(i, "a") <> ""
時 = Cells(i, "a")
分 = Cells(i, "b")
Cells(i, "c") = Format(TimeSerial(時, 分, 0), "h:mm")
i = i + 1
Loop
End Sub
これで、C列に時間を表示することができます。
では、プログラム文を説明します。
まずは、お馴染みの宣言文ブロックです。
Dim i As Long
Dim 時 As Integer
Dim 分 As Integer
変数「i」に2を代入します。
i = 2
このあとの繰り返し処理でセル番地を回すのに「i」をつかっています。
また、「2」としているのは、A2からデータがスタートしているからです。
Do While Cells(i, "a") <> "" ~ Loop
A列が空白でない間繰り返すように命令しています。
時 = Cells(i, "a")
分 = Cells(i, "b")
「時」「分」にA列B列のデータをそれぞれ、代入します。
C列に時間を表示させる処理です。
Cells(i, "c") = Format(TimeSerial(時, 分, 0), "h:mm")
Format関数は、表示形式の関数です。「h:mm」と表示するようにしています。
なぜ、Format関数をつかっているのかというと、TimeSerial関数で算出した時間は「時:分 AM/PM」で表示されてしまうからです。
「h:mm」で今回は、表示したいと思ったので、Format関数をつかっただけです。
最後に、変数「i」を+1しないと、参照するセル番地を移動できません。
i = i + 1
これで、時間を作ることができました。