「エクセルマクロで日付シリアル値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マクロ
 『インストラクターのネタ帳』では、2003年10月からMicrosoft Officeの使い方などを紹介し続けています。
『インストラクターのネタ帳』では、2003年10月からMicrosoft Officeの使い方などを紹介し続けています。










