Home » ExcelVBA Rangeオブジェクト » 日時データ・シリアル値から時間部分を削除するExcelマクロ

日時データ・シリアル値から時間部分を削除するExcelマクロ

対象:Excel2003, Excel2007, Excel2010, Excel2013

「エクセルマクロで日付シリアル値2013/12/2 8:02:00の 時間部分を削除したい」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

「2013/12/2 8:02:00」という日時データの入力されているセルがあって、時間部分を削除して、日付データだけにするExcelマクロを探している方による検索です。

シリアル値は整数部分が日付で小数部分が時刻ですから、ワークシート関数で時間部分を削除して日付データにするにはINT関数やTRUNC関数で整数だけにしてやればOKです。

[スポンサードリンク]

日時データから時間部分を削除するサンプルマクロ

VBA(Visual Basic for Applications)でマクロを作る場合も、同じ考え方をしてやればOKです。

Sub 日時データから時間部分を削除する()
 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

 For Each rng In Selection
  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

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 日時データ・シリアル値から時間部分を削除するExcelマクロ

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.