日付データを年・月・日でセルに数値データとして分割する方法
一つのセルに入力された日付型(Date)のデータを年・月・日でセルに分割するには、日付を表す値から年を取り出すYear【イヤー】関数と月を取り出すMonth【マンス】関数、日を取り出すDay【デイ】関数を使用してセルを3列追加して各セルに取り出した値を代入します。
実行結果
コードと解説
Sub 分割() Dim 行 As Long Dim i As Long 行 = Cells(Rows.Count, 1).End(xlUp).Row Range("A1:C1").EntireColumn.Insert Range("A1").Value = "年" Range("B1").Value = "月" Range("C1").Value = "日" Range("D1").AutoFill Destination:=Range("A1:D1"), Type:=xlFillFormats For i = 2 To 行 Range("A" & i).Value = Year(Range("D" & i).Value) Range("B" & i).Value = Month(Range("D" & i).Value) Range("C" & i).Value = Day(Range("D" & i).Value) Next i Application.DisplayAlerts = False Range("D1").EntireColumn.Delete Application.DisplayAlerts = True End Sub
A列のデータが入力されている最終行番号を格納する変数「行」を長整数型(Long)で宣言します。
3行目【Dim i As Long】
繰り返し処理で使用されるカウンター変数「i」を長整数型(Long)で宣言します。
4行目【行 = Cells(Rows.Count, 1).End(xlUp).Row】
Cells【セルズ】プロパティでA列のRows【ロウズ】プロパティで参照した行を表すRange【レンジ】オブジェクトを参照し、Count【カウント】プロパティでセルの行の数を取得します。つまり、A列の最終セルを参照し、Range【レンジ】オブジェクトのEnd【エンド】プロパティの引数をxlupに指定して上方向にデータが入力されている最終行まで移動し、Row【ロウ】プロパティでそのセルの行番号を取得して、変数「行」に代入します。
5行目【Range(“A1:C1”).EntireColumn.Insert】
Range【レンジ】プロパティでA1からC1セルを参照し、EntireColumn【エンタイヤカラム】プロパティを使用して参照したセルを含むすべての列を参照して、Insert【インサート】メソッドで列を挿入します。つまり、現在のA列の左側に列を3列挿入します。
6行目【Range(“A1”).Value = “年”】
5行目で挿入した列にあたるA1セルに文字列の「年」を代入します。
7行目【Range(“B1”).Value = “月”】
5行目で挿入した列にあたるB1セルに文字列の「月」を代入します。
8行目【Range(“C1”).Value = “日”】
5行目で挿入した列にあたるC1セルに文字列の「日」を代入します。
9行目【Range(“D1”).AutoFill Destination:=Range(“A1:D1”), Type:=xlFillFormats】
連続データを作成するRange【レンジ】オブジェクトのAutoFill【オートフィル】メソッドを使用してD1セルの書式の貼り付け先を表す引数Destination【デスティネーション】に基準の書式のセルを含めたセル範囲を指定します。オートフィルのタイプを表す引数Type【タイプ】には連続データではなく書式のコピーを表す定数を指定してA1セルからC1セルにD1セルの書式を貼り付けます。
10行目【For i = 2 To 行】
For【フォー】ステートメントを使用して、繰り返し処理の始まりです。カウンター変数「i」に1行目の項目行を除く2から変数「行」に格納されているA列のデータが入力されている最終行番号の回数順次繰り返します。
11行目【Range(“A” & i).Value = Year(Range(“D” & i).Value)】
繰り返し処理の中で日付を表す値から年を取得するYear【イヤー】関数を使用してD列の変数「i」行目の日付データから年を取得して、A列の変数「i」行目のセルに代入します。
12行目【Range(“B” & i).Value = Month(Range(“D” & i).Value)】
繰り返し処理の中で日付を表す値から月を取得するMonth【マンス】関数を使用してD列の変数「i」行目の日付データから月を取得して、B列の変数「i」行目のセルに代入します。
13行目【Range(“C” & i).Value = Day(Range(“D” & i).Value)】
繰り返し処理の中で日付を表す値から日を取得するDay【デイ】関数を使用してD列の変数「i」行目の日付データから日を取得して、C列の変数「i」行目のセルに代入します。
15行目【Next i】
10行目からここまでの処理を変数「行」に格納されている数から項目行の1を減算した回数繰り返します。
16行目【Application.DisplayAlerts = False】
Application【アプリケーション】オブジェクトのDisplayAlerts【ディスプレイアラーツ】プロパティにFalseを設定して次の17行目で列を削除するときに表示される注意メッセージの表示を抑止します。
17行目【Range(“D1”).EntireColumn.Delete】
日付データが入力されているD列をEntireColumn【エンタイヤカラム】プロパティで参照し、Delete【デリイト】メソッドで削除します。
18行目【Application.DisplayAlerts = True】
抑止していた注意メッセージを再開します。
日付データを年・月・日でセルに文字列として分割する方法
実行結果
コードと解説
Range("A" & i).Value = Year(Range("D" & i).Value) & "年" Range("B" & i).Value = Month(Range("D" & i).Value) & "月" Range("C" & i).Value = Day(Range("D" & i).Value) & "日"
数値データとして分割するコードの11から13行目をこのコードに変更すると文字列として日付データを分割します。関数で取り出した年や月や日のデータに文字列を連結するアンパサンド「&」で文字列を連結すると文字列データの変更できます。
この事例とは逆のケースは以下のリンクを参照してください。
分割された年月日を表す数値を結合して日付データにする
分割された年月日を表す文字列を結合して日付データにする
以上で、日付データを年・月・日で数値または文字列として分割する方法についての解説を終了します。ありがとうございました。