|
AdvancedFilterで 日にちを抽出するなら、
やはり元のデータを文字列から日付け型に修正しておくのが簡単そうです。
D列に こんなデータがあるとして、
Date
2012/1/1
2012/1/1 12:00 AM
2012/3/5
2012/8/5
2012/8/5 0:00
2012/8/5 12:00 AM
2012/8/5AM
12/8/5 am
2015/9/12 Am
2012/2/10:15:30:00
2016/8/11 am
2016/7/10 pm
02/08/01 PM
2015/9/5 Am
2012/2/05:15:30:00
2016/8/05 am
2016/7/5 pm
02/08/05 PM
以下のマクロを実行します(データは書き換えられるので、複製データで
試してください)
'-----------------------------------------------------------ここから
Sub CDate_Range() 'D列(2行目以降)のデータを日付型に修正
Dim r As Range
Dim v
Dim i&
Const Msg = "D列(2行目以降)のデータを日付型に修正します。"
If MsgBox(Msg, vbOKCancel) = vbCancel Then Exit Sub
Set r = Range("D2", Cells(Rows.Count, "D").End(xlUp))
v = r.Value
For i = 1 To UBound(v)
If Not IsDate(v(i, 1)) Then
v(i, 1) = CDate2(v(i, 1))
End If
Next
r.Value = v
End Sub
Private Function CDate2(s)
Dim v
Dim y, m
Dim ok As Boolean
v = Split(s, "/")
If UBound(v) = 2 Then
y = Val(v(0))
m = Val(v(1))
Select Case y
Case 1900 To 2200
ok = True
Case Else
If IsNumeric(y) Then
If y > 0 And y < 200 Then
y = y + 2000
ok = True
End If
End If
End Select
If ok Then
Select Case m
Case 1 To 12
Case Else
ok = False
End Select
End If
If ok Then
CDate2 = DateSerial(y, m, Val(v(2)))
Else
CDate2 = s
End If
Else
CDate2 = s
End If
End Function
'-----------------------------------------------------------ここまで
実行すると上のデータは↓こうなります。
Date
2012/1/1
2012/1/1 12:00 AM
2012/3/5
2012/8/5
2012/8/5 0:00
2012/8/5 12:00 AM
2012/8/5
2012/8/5
2015/9/12
2012/2/10
2016/8/11
2016/7/10
2002/8/1
2015/9/5
2012/2/5
2016/8/5
2016/7/5
2002/8/5
こうしておけば
[E2] =Day(D2)=5
のような条件だけで 日にちを AdvancedFilterできます。
|
|