VBAで日付のシリアル値を「yyyy/mm/dd」形式で表示する方法

Visual Basic

VBAで日付のシリアル値を特定のフォーマット、例えば「yyyy/mm/dd」に変換して表示する方法について解説します。特に、シリアル値を読み込み、Excelのセルに「yyyy/mm/dd」形式で表示させる方法や、他のExcelファイルに値を貼り付けた際にそのフォーマットを保持する方法について触れます。

1. シリアル値を「yyyy/mm/dd」で表示する方法

VBAで日付のシリアル値を「yyyy/mm/dd」形式で表示するためには、Format関数を使用します。以下のコード例では、セルA1に格納されたシリアル値を「yyyy/mm/dd」形式でセルB1に表示する方法を紹介します。

Sub FormatDate() 
    ' セルA1にシリアル値をセット
    Cells(1, 1).Value = CDate(45839) 
    ' セルB1に「yyyy/mm/dd」形式で日付を表示
    Cells(1, 2).Value = Format(Cells(1, 1).Value, "yyyy/mm/dd") 
End Sub

このコードは、セルA1にシリアル値を格納し、セルB1にそのシリアル値を「yyyy/mm/dd」形式で表示します。ここで注意すべきポイントは、Format関数を使って日付を希望の形式に変換している点です。

2. 他のExcelファイルに値を貼り付ける際の問題点

質問者のように、シリアル値を他のExcelファイルに値として貼り付けた場合、貼り付け先のセルにシリアル値そのものが表示され、期待する「yyyy/mm/dd」の形式にはなりません。これは、貼り付け先のセルが標準の表示形式のままであるためです。

この問題を回避するためには、貼り付け時にセルの書式設定を調整するか、コピーする前に値としてのみ貼り付ける必要があります。具体的には、以下の方法を使用することで、正しい形式で値を貼り付けることができます。

Sub CopyWithFormat() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    ws.Range("B1").Copy 
    Workbooks("OtherWorkbook.xlsx").Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues 
End Sub

このコードでは、セルB1の値を他のワークブックに値として貼り付け、フォーマットを維持するために適切な設定を使用しています。

3. VBAコードでのフォーマットの保持

もし、コピー後も希望の「yyyy/mm/dd」形式を維持したい場合、貼り付け先のワークブックでセルの書式を手動で設定することができます。もしくは、VBAで貼り付け後にセルの書式設定を行うことができます。以下のコードは、値を貼り付けた後に書式を指定して、希望する形式を確実に適用する方法です。

Sub CopyAndFormat() 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    ws.Range("B1").Copy 
    Workbooks("OtherWorkbook.xlsx").Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues 
    ' 貼り付け後に書式設定
    Workbooks("OtherWorkbook.xlsx").Sheets("Sheet1").Range("A1").NumberFormat = "yyyy/mm/dd" 
End Sub

この方法では、データを正しい形式で貼り付けた後、指定した書式「yyyy/mm/dd」をセルA1に適用しています。

4. まとめ

シリアル値の日付をVBAで「yyyy/mm/dd」形式で表示するためには、Format関数を使用することが重要です。また、他のExcelファイルに値を貼り付ける際には、貼り付けの方法や書式設定に注意を払い、適切に日付形式を維持することが必要です。これにより、希望通りの表示形式を保ちながら作業を進めることができます。

コメント

タイトルとURLをコピーしました