8/12/2023

Excel。VBA。時・分から時間を作りたいときは、TimeSerial関数をつかいます【TimeSerial】

Excel。VBA。時・分から時間を作りたいときは、TimeSerial関数をつかいます

<Excel VBA: TimeSerial関数>

Excel VBAで、Excelの関数をつかってみると、希望通りに算出できないことがあります。


例えば、時間。

次の表をつかって、説明します。

TimeSerial関数

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


これで、時間を作ることができました。