• 公開日:

ExcelのVBAを使って日付フォーマットを変換する方法

大量のデータが含まれるExcelシート内の日付を、1つ1つ手動で修正していくのは大変な作業ですよね。

この記事では、Excelの日付フォーマットを一括で変換するVBAの使い方について解説します。

シート全体の日付フォーマットを全て変換するVBAと、選択した日付のフォーマットのみ変換するVBAをそれぞれご紹介します。

ExcelのVBAを使って日付フォーマットを変換する方法

ExcelのVBAを使って日付フォーマットを変換するパターンとして、主に以下のように分けることができます。

  • シート全体の日付フォーマットを全て変換する
  • 選択した日付のフォーマットを変換する

シート全体の日付フォーマットを全て変換する

VBAを使って、シート全体にある日付を指定したフォーマット(○年○月○日)に一括変換する方法について解説します。

開発タブ

ExcelでVBAを利用するには、開発タブを表示させる必要があります。

開発タブを表示する方法については、以下の記事を参照してください。

エクセルの開発タブを表示する方法


表を用意する

ここでは、シート(Sheet1)の中に日付入りの表を2つ用意します。

Visual Basicを選択する

開発タブ、②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入力後にファイルを保存する方法、マクロの実行方法については上記「シート全体の日付フォーマットを全て変換する」セクションを参照してください。

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」という名前のワークシートを設定します。

次に、指定されたセル範囲を変数として取得します。その後、この範囲内の各セルをループで処理し、そのセルの内容が日付であるかどうかを確認します。日付である場合、フォーマットを「○月○日(曜日)」に変更し、そのセルの内容を日付として再設定して表示形式を設定します。

選択されたセルの変換が完了した後、変換された日付の見た目を整えるために、列幅を自動で調整するコードが実行されます。

曜日入りの日付になる

選択された日付がすべて「○月○日(曜日)」の形式で表示されました。