大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで年、月、日の数値を日付に変換する方法についてご紹介します。VBA関数のDateSerialを使えばできます。日付に変換すれば、日付の比較や計算が簡単にできるようになります。年月日の数値を合体させて日付にしたい場合は、DateSerialを使いましょう。

はじめに

この記事では、年月日の数値から日付に変換する方法をご紹介します。日付へ変換は、VBA関数の『DateSerial』を使えばできます。

日付に変換するメリットとしては、日付同士の比較や計算ができるようになります。

年月日のようにデータが分かれている場合は、DateSerialを使って年月日を合体させて日付に変換しましょう。

では、説明していきます。

この記事で紹介すること

  • 年月日の数値を日付に変換する方法

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードについて記載しておきます。

VBAコードだけ見たいという場合にご活用ください。

Dim A
'年月日を日付に変換する
A = DateSerial(2020, 1, 2)

では説明していきます。

VBAで年月日の数値を日付に変換

年、月、日のように分かれた数値から日付に変換する方法を説明します。

VBA関数の『DateSerial』を使います。

まず、使い方から説明していきます。

DateSerialの使い方

年月日の数値を日付に変換する『DateSerial』は、次のように入力します。

『日付 = DateSerial(年, 月, 日)』

これで、分かれている年月日の数値から日付に変換することができます。

年月日から日付に変換した結果

では、年月日から日付に『DateSerial』を使って変換してみます。

年月日として『2020』、『1』、『2』の数値から日付を作成するVBAコードです。

Sub TEST1()
    
    '日付に変換
    MsgBox DateSerial(2020, 1, 2)
        
End Sub

VBAコードを実行してみます。

年月日の数値を日付に変換

年月日の数値をDateSerialで日付に変換した結果

結果は、『2020/01/02』となりました。

日付に変換できています。

セルの年月日から日付に変換した結果

つづいて、セルに入力された年月日を日付に変換する方法についてご紹介します。

DateSerialを使う場面としては、セルからの年月日を取得して日付に変換することが多いかなと思います。

セルに入力された年月日『2020』、『1』、『2』を日付に変換するVBAコードです。

Sub TEST2()
    
    Dim A, B, C
    A = Cells(2, 1) '年
    B = Cells(2, 2) '月
    C = Cells(2, 3) '日
    '日付に変換
    Cells(2, 4) = DateSerial(A, B, C)
    
End Sub

実行してみます。

セルの年月日を日付に変換

DateSerialを使って年月日を日付に変換した結果

結果は、『2020/01/02』となりました。

セルから年月日を取得して日付に変換できています。

日付型に変換するとVBAで比較や計算ができる

年月日に分かれたままでも日付の比較や計算はできます。

しかし、それは、年と年を比較したり、もしくは月と月を引き算してみたりぐらいしかできません。

年月日を日付型に変換にすると、日付の比較や計算が簡単になります。

簡単な日付の比較と計算をやってみます。

Date型の日付を比較する

まず、Date型にした日付を比較してみます。

日付『2020/1/1』と日付『2020/1/2』を比較するVBAコードです。

『2020/1/2』の方が大きいかを判定しています。

Sub TEST3()
    
    Dim A, B
    A = DateSerial(2020, 1, 1) '日付に変換(2020/1/1)
    B = DateSerial(2020, 1, 2) '日付に変換(2020/1/2)
    
    '日付を比較
    If A < B Then
        MsgBox B & "の方が大きいです"
    Else
        MsgBox A & "の方が大きいです"
    End If
    
End Sub

実行してみます。

日付を比較

日付を比較した結果

結果は、『2020/01/02の方が大きい』となりました。

DateSearialを使って日付型に変換すれば、日付同士を比較することができます。

Date型の日付を計算する

つづいて、Date型に変換した日付で加減算などの計算をしてみます。

日付『2020/1/1』に変換して、1日を足すVBAコードです。

Sub TEST4()
    
    Dim A
    
    A = DateSerial(2020, 1, 1) '日付に変換する(2020/1/1)
        
    '日付に1日を足す
    MsgBox A + 1
    
End Sub

実行してみます。

日付に1日を足す

日付に1日を足した結果

結果は、『2020/01/02』となりました。

日付の足し算ができています。

次に、日付同士の差分をとってみます。

日付同士の差分をとると、日付間の日数を取得できます。

日付『2020/1/1』と『2020/1/11』で、日付間の日数を取得するVBAコードです。

Sub TEST5()
    
    Dim A, B
    A = DateSerial(2020, 1, 1) '日付に変換する(2020/1/1)
    B = DateSerial(2020, 1, 11) '日付に変換する(2020/1/11)
    
    '日付を引き算する
    MsgBox B - A
        
End Sub

実行してみます。

日付同士を引き算する

日付同士の差分をとって、日付間の日数を取得した結果

結果は、『10』日間となりました。

日付型であれば、日付同士を比較して差分を出すことができます。

なので、日付を比較や計算したい場合は、DateSerialなどで日付型に変換しましょう。

文字列の日付で比較や計算はできない

文字列の日付では、比較や計算ができません。

簡単な例でやってみます。

文字列の日付を比較してみる

文字列の日付で比較すると、うまく日付を比較することができません。

例えば、日付『"2020/1/1"』と『"2020/01/02"』を比較するVBAコードです。

Sub TEST6()
    
    Dim A, B
    A = "2020/1/1"
    B = "2020/01/02"
    
    '文字列で日付を比較
    If A < B Then '←比較ができない
        MsgBox B & "の方が大きい"
    Else
        MsgBox A & "の方が大きい"
    End If
    
End Sub

どちらが大きいか比較してみます。

文字列の日付を比較

文字列の日付を比較した結果

結果は、『"2020/1/1"』の方が大きい、となりました。

実際は、『"2020/01/02"』の方が大きいですよね。

文字列だと日付の前に『"0"』とかがついちゃうと正しく比較ができなくなります。

なので、日付を比較したい場合は、日付型に変換しましょう。

文字列の日付で計算をしてみる

次に、文字列の日付で計算をしてみます。こちらも文字列なので計算できません。

文字列の日付『"2020/1/1"』と『"2020/1/2"』の差分をとって、日付間の日数を取得するVBAコードです。

Sub TEST7()
    
    Dim A, B, C
    A = "2020/1/1"
    B = "2020/01/02"
    
    '文字列で日付の差分をとる
    C = B - A 'エラーになります
    
End Sub

実行してみます。

文字列の日付同士を引き算する

文字列の日付同士で差分をとって日付間の日数を取得してみた結果

結果は、エラーとなりました。

文字列のままでは、日付同士で計算ができません。なので、日付型に変換して計算しましょう。

年月日で分かれている場合は、『DateSerial』で日付に変換することができます。

DateSerialで「1日」と「月末」を取得する

DateSerialを使えば、月の「1日」と「月末」を簡単に取得することができます。

年と月を指定して「1日」を取得

年と月を指定して、「1日」を取得するVBAコードです。

Sub TEST8()
  
    Dim A, B
    A = 2022 '年
    B = 4 '月
    '「1日」を取得
    MsgBox DateSerial(A, B, 1)
    
End Sub

実行してみます。

月の「1日」を取得できた

指定月の「1日」を取得できた

結果は、「2022/04/01」となって、指定した月の「1日」を取得できました。

月末を取得する

指定した月の「月末」を取得するには、月に「+1」して、日を「0」とすればできます。

VBAコードは次のようになります。

Sub TEST9()
  
  Dim A, B
  A = 2022 '年
  B = 4 '月
  '月末を取得
  MsgBox DateSerial(A, B + 1, 0)
  
End Sub

実行してみます。

「月末」を取得できた

指定月の「月末」を取得できた

結果は、「2022/04/30」となりました。

4月の「月末」を取得できました。

おわりに

この記事では、年月日の数値から日付に変換する方法をご紹介しました。

年月日の数値を日付に変換したいときは、VBA関数の『DateSerial』でできます。

DateSerialを使って日付に変換すると、日付同士の比較や計算ができるようになるので便利です。

年月日のようにデータが分かれている場合は、DateSerialを使って年月日を合体させて日付をつくりましょう。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す