Excel VBA 日付を表す数値や文字列データを日付データに変更する

スポンサーリンク

日付を表す数値や文字列データを日付データに変更する方法

日付をセルに「20180101」のような数値データや「2018.01.01」のように文字列データとして入力している場合には、日付データではないので、日付としての計算はできません。このような場合にデータ型を日付型のデータに変換するには、「20180101」のようなデータの場合は年、月、日を表す値を「/」で区切り、「2018.01.01」のようなデータの場合は、ピリオド「.」の部分を「/」に置換えすることで日付型データに変更できます。

日付を表す数値データを日付データに変更する実行結果


日付を表す数値データを日付データに変更するコードと解説

Sub 日変換1()
Dim 行 As Long
Dim i As Long
行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To 行
Cells(i, 1).Value = Left(Cells(i, 1).Text, 4) & "/" & Mid(Cells(i, 1).Text, 5, 2) & "/" & Right(Cells(i, 1).Text, 2)
Next i
End Sub
2行目【Dim 行 As Long】
A列のデータが入力されている最終行番号を格納する変数「行」を長整数型(Long)で宣言します。


3行目【Dim i As Long】
繰り返し処理で使用されるセルの行番号を格納するカウンター変数「i」を長整数型(Long)で宣言します。


4行目【行 = Cells(Rows.Count, 1).End(xlUp).Row】
Cells【セルズ】プロパティでA列のRows【ロウズ】コレクションのCount【カウント】プロパティで参照したセルの最終行からRange【レンジ】オブジェクトのEnd【エンド】プロパティでセルの最終行から上方向にデータが入力されている最終行に移動して、Row【ロウ】プロパティでその行番号を取得し、変数「行」に代入します。つまり。A列のデータが入力されている最終行番号を
変数「行」に代入します。


5行目【For i = 2 To 行】
For Next【フォーネクスト】ステートメントを使用して繰り返し処理の始まりです。カウンター変数「i」に2から変数「行」に格納されているA列のデータが入力されている最終行番号を繰り返し処理の中で順に代入します。


6行目【Cells(i, 1).Value = Left(Cells(i, 1).Text, 4) & “/” & Mid(Cells(i, 1).Text, 5, 2) & “/” & Right(Cells(i, 1).Text, 2)】
文字列の左端から指定した文字数分の文字列を取得するLeft【レフト】関数を使用して取り出し元の文字列を表す第一引数にCells【セルズ】プロパティで参照したセルの値をRange【レンジ】オブジェクトのText【テキスト】プロパティで取得し、左端から取り出す文字数を指定する第二引数に4を設定して、文字列の左端から4文字を取得(2018を取得)し、文字列を連結するアンパサンド「&」で「/」を連結します。次に、文字列の指定位置から指定文字数分の文字列を取得するMid【ミッド】関数を使用して文字を取り出す開始位置を指定する第二引数に5を指定し、取り出す文字数を指定する第三引数に2を指定して、(201801の01を取得)文字列を連結するアンパサンド「&」で「/」を連結します。文字列の右端から指定した文字数分の文字列を取得するRight【ライト】関数を使用して、右端から取り出す文字数を指定する第二引数に2を設定して、文字列の右端から2文字目を取得(20180101の01を取得)し、Cells【セルズ】プロパティで参照したA列の変数「i」行目のセルに代入します。つまり、セルのデータが20180101の文字列の場合2018/01/01に変換してそのセルに代入しています。


Text【テキスト】プロパティとValue【バリュー】プロパティの違いについて

セルの値を取得する場合、Text【テキスト】プロパティはセルに表示されている状態のデータを取得し、Value【バリュー】プロパティは入力値(数式の場合は計算結果)を取得します。

日付を表すピリオドで区切られた文字列を日付データに変更する実行結果


日付を表すピリオドで区切られた文字列を日付データに変更するコードと解説

Sub 日変換2()
Dim 行 As Long
行 = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2", "A" & 行).Replace ".", "/"
End Sub
1行目【Dim 行 As Long】
A列のデータが入力されている最終行番号を格納する変数「行」を長整数型(Long)で宣言します。


2行目【行 = Cells(Rows.Count, 1).End(xlUp).Row】
Cells【セルズ】プロパティでA列のRows【ロウズ】コレクションのCount【カウント】プロパティで参照したセルの最終行からRange【レンジ】オブジェクトのEnd【エンド】プロパティでセルの最終行から上方向にデータが入力されている最終行に移動して、Row【ロウ】プロパティでその行番号を取得し、変数「行」に代入します。つまり。A列のデータが入力されている最終行番号を
変数「行」に代入します。


3行目【Range(“A2”, “A” & 行).Replace “.”, “/”】
Range【レンジ】オブジェクトのReplace【リプレイス】メソッドを使用して文字列の「.」を「/」に置換えます。


以上で、日付を表す数値や文字列データを日付データに変更する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告