「エクセルマクロで日付シリアル値2013/12/2 8:02:00の 時間部分を削除したい」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
「2013/12/2 8:02:00」という日時データの入力されているセルがあって、時間部分を削除して、日付データだけにするExcelマクロを探している方による検索です。
シリアル値は整数部分が日付で小数部分が時刻ですから、ワークシート関数で時間部分を削除して日付データにするにはINT関数やTRUNC関数で整数だけにしてやればOKです。
日時データから時間部分を削除するサンプルマクロ
VBA(Visual Basic for Applications)でマクロを作る場合も、同じ考え方をしてやればOKです。
Dim rng As Range
Dim msg As String
If TypeName(Selection) <> "Range" Then
msg = "セル範囲を選択してから実行してください。"
MsgBox msg
Exit Sub
End If
msg = "選択されているセル範囲の日時データから時間部分を削除してもいいですか?"
If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
If VarType(rng) = vbDate Then
rng.Value = CDate(Int(rng.Value))
rng.NumberFormat = "yyyy/m/d"
End If
Next
End Sub
時間部分を削除したい日時データの入力されているセル範囲を選択しておいて、上記のマクロを実行すると、
「選択されているセル範囲の日時データから時間部分を削除してもいいですか?」
というメッセージボックスが表示され、[はい]をクリックすると時間部分が削除され日付データとなります。
マクロで行っている処理
選択されているセルに対してループを回して、
For Each rng In Selection
セルのデータ種別が日付データだった場合に、
If VarType(rng) = vbDate Then
Int関数を使って時間部分を削除したデータを、CDate関数で日付型にして、
rng.Value = CDate(Int(rng.Value))
書式設定を行っています。
rng.NumberFormat = "yyyy/m/d"
セル範囲以外のものが選択されているとエラーとなってしまうため、上記の処理に入る前に、選択されているのがRangeかどうかを判定しています。
If TypeName(Selection) <> "Range" Then
- Newer:GoogleスプレッドシートのIF関数の使い方
- Older:マクロが活用可能かどうかを判断することはできるようになった
Home » Excel VBA Rangeオブジェクト » 日時データ・シリアル値から時間部分を削除するExcelマクロ