- 公開日:
ExcelのVBAを使って日付フォーマットを変換する方法
大量のデータが含まれるExcelシート内の日付を、1つ1つ手動で修正していくのは大変な作業ですよね。
この記事では、Excelの日付フォーマットを一括で変換するVBAの使い方について解説します。
シート全体の日付フォーマットを全て変換するVBAと、選択した日付のフォーマットのみ変換するVBAをそれぞれご紹介します。
ExcelのVBAを使って日付フォーマットを変換する方法
ExcelのVBAを使って日付フォーマットを変換するパターンとして、主に以下のように分けることができます。
- シート全体の日付フォーマットを全て変換する
- 選択した日付のフォーマットを変換する
シート全体の日付フォーマットを全て変換する
VBAを使って、シート全体にある日付を指定したフォーマット(○年○月○日)に一括変換する方法について解説します。
ExcelでVBAを利用するには、開発タブを表示させる必要があります。
開発タブを表示する方法については、以下の記事を参照してください。
ここでは、シート(Sheet1)の中に日付入りの表を2つ用意します。
①開発タブ、②Visual Basicの順に選択します。
「Microsoft Visual Basic for Applications」ダイアログボックスが表示されました。
①挿入タブ、②標準モジュールの順に選択します。
標準モジュールが表示されました。以下のコードをコピーして貼り付けます。
Sub ConvertDateFormat()
Dim rng As Range
Dim cell As Range
Dim ws As Worksheet
' 「Sheet1」という名前のシートを設定
Set ws = ThisWorkbook.Sheets("Sheet1")
' シート全体の範囲を設定
Set rng = ws.UsedRange
' 各セルの日付フォーマットを「○年○月○日」に変更
For Each cell In rng
If IsDate(cell.Value) Then
cell.NumberFormat = "yyyy""年""m""月""d""日"""
cell.Value = DateValue(cell.Value)
End If
Next cell
' 列幅を自動調整
rng.EntireColumn.AutoFit
End Sub
このVBAコードは、Excelの「Sheet1」という名前のシート内で使用されている全てのセルに対し、日付が含まれているセルのフォーマットを「○年○月○日」の形式に変更します。
コードはまず、対象となるシート(Sheet1)を指定してから、そのワークシート内の使用されている範囲を取得します。
次に、シート内の各セルをループで一つずつ確認します。日付であれば、そのセルのフォーマットを指定した形式に変更します。
最後に、変更した範囲の列の幅を日付の長さに合わせて自動調整します。
①ファイルタブ、②「(ファイル名).xlsxの上書き保存」の順に選択します。
「Microsoft Excel」ダイアログボックスが表示されました。
いいえボタンを押します。
「名前を付けて保存」ダイアログボックスが表示されました。①保存したいフォルダー(例: デスクトップ)を選択します。
②ファイル名(例: ConvertDateFormat)を入力し、③「ファイルの種類」のプルダウンから「Excel マクロ有効ブック」を選択し、④保存ボタンを押します。
①開発タブ、②マクロの順に選択します。
「マクロ」ダイアログボックスが表示されました。
①マクロ名(例: ConvertDateFormat)を選択し、②実行ボタンを押します。
シート内の日付をすべて「○年○月○日」に表示することができました。
選択した日付のフォーマットに曜日を付ける
以下では、選択した日付のフォーマットを「○月○日(曜日)」の形式にするコードをご紹介します。
Visual Basicを開く方法、VBA入力後にファイルを保存する方法、マクロの実行方法については上記「シート全体の日付フォーマットを全て変換する」セクションを参照してください。
標準モジュールには以下のコードをコピーして貼り付けます。
Sub ConvertDateFormatWithWeekday()
Dim rng As Range
Dim cell As Range
Dim ws As Worksheet
' 「Sheet1」という名前のシートを設定
Set ws = ThisWorkbook.Sheets("Sheet1")
' 変換対象の範囲を設定 (F2からG12まで)
Set rng = ws.Range("F2:G12")
' 各セルの日付フォーマットを「○月○日(曜日)」に変更
For Each cell In rng
If IsDate(cell.Value) Then
cell.NumberFormat = "m""月""d""日(""aaa"")"""
cell.Value = DateValue(cell.Value)
End If
Next cell
' 列幅を自動調整
rng.EntireColumn.AutoFit
End Sub
上記のVBAコードは、Excelの「Sheet1」におけるF2~G12のセル範囲の日付を「○月○日(曜日)」の形式に変換するものです。
まず、「Sheet1」という名前のワークシートを設定します。
次に、指定されたセル範囲を変数として取得します。その後、この範囲内の各セルをループで処理し、そのセルの内容が日付であるかどうかを確認します。日付である場合、フォーマットを「○月○日(曜日)」に変更し、そのセルの内容を日付として再設定して表示形式を設定します。
選択されたセルの変換が完了した後、変換された日付の見た目を整えるために、列幅を自動で調整するコードが実行されます。
選択された日付がすべて「○月○日(曜日)」の形式で表示されました。