Excel VBAで特定列の日付をTRUNC関数相当で日付のみ値に変換する方法

Visual Basic

ExcelでAE列、AK列、AQ列に入力された日付・タイムスタンプから日付のみを抽出して値に変換したい場合、VBAマクロを使うと自動で処理できます。この記事では、最終行が毎回変わる場合でも対応できるVBAの作り方を詳しく解説します。

マクロの基本構造

マクロでは、まず最終行を取得し、13行目から最終行までループします。対象の列を順番にチェックし、セルが空白でなければ日付部分だけを抽出して値に置き換えます。

これにより、元のタイムスタンプの時間部分は削除され、日付のみがセルに残ります。

最終行の取得方法

最終行は、下記のようにワークシートのUsedRangeやEnd(xlUp)を使って自動取得します。

LastRow = Cells(Rows.Count, "AE").End(xlUp).Row

これにより、毎回変わる最終行にも柔軟に対応可能です。

日付のみを抽出して値に変換する方法

日付のみを取得するには、Int関数を使って日付部分を整数に変換します。VBAでは次のように記述できます。

If Not IsEmpty(Cells(i, "AE")) Then Cells(i, "AE").Value = Int(Cells(i, "AE").Value)

同様にAK列やAQ列も処理します。

ループの具体例

以下の例は、13行目から最終行まで、指定列のセルを順番に処理する完全なマクロです。

Sub ConvertDatesToDay()
    Dim ws As Worksheet
    Dim LastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")
    LastRow = ws.Cells(ws.Rows.Count, "AE").End(xlUp).Row

    For i = 13 To LastRow
        If Not IsEmpty(ws.Cells(i, "AE")) Then ws.Cells(i, "AE").Value = Int(ws.Cells(i, "AE").Value)
        If Not IsEmpty(ws.Cells(i, "AK")) Then ws.Cells(i, "AK").Value = Int(ws.Cells(i, "AK").Value)
        If Not IsEmpty(ws.Cells(i, "AQ")) Then ws.Cells(i, "AQ").Value = Int(ws.Cells(i, "AQ").Value)
    Next i
End Sub

まとめ

Excel VBAを使えば、特定列のタイムスタンプから日付のみを抽出して値に変換する処理を自動化できます。最終行を動的に取得し、空白セルをスキップすることで、毎回変動するデータにも対応可能です。

この方法を使えば、手作業での変換ミスを防ぎ、大量データでも効率的に処理できます。

コメント

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