2017-09-09 22 views
1

ちょっとちょっと時間をフィルタリングする方法を知っていますが、日付も同じ列にあればどうしますか?私は12:00:00 AM - 3:00:00 PMの間に番号フィルタをフィルタリングしようとしましたが、フィルタリングは全くありません。データは最初の画像のようにフォーマットされましたが、日付ではなく時刻のみを表示するように変更しました。データを仮定日付があるときに時間をフィルタリングする方法

enter image description hereenter image description here

[lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
ActiveSheet.Range("A4", "A" & lastRow).NumberFormat = "hh:mm:ss AM/PM" 


    ActiveSheet.Range("$A$4:$C$18").AutoFilter Field:=1, Criteria1:="<=m/d/yyyy 12:00:00 AM", Operator:=xlAnd, Criteria2:=">= m/d/yyyy 3:00:00 PM" 

    ActiveSheet.Range("$A$4:$C$18").AutoFilter Field:=1, Criteria1:="<=12:00:00 AM", Operator:=xlAnd, Criteria2:=">=3:00:00 PM"] 
+1

私は、時間部分だけでヘルパー列を追加する必要があると考えています。 –

+0

あなたはこの数式で時間部分だけを得ることができます: '= MOD(A1,1)' –

+0

@ScottCraner - MOD()は常に整数を返すので、動作するかどうかはわかりません。 https://stackoverflow.com/questions/23549947/mod-with-doubles –

答えて

1

あなたが最初のデータポイントから日付を取る、それ以下のアプローチを使用することができます(あなたの例では、私は6/1/2017だと思います)一定の日付があり、その後のビルド日付部分と時間部分のために渡す入力の合計からの基準。

ライン:

dtCriteria1 = CDate(CLng(dtConstant)) + TimeValue("00:03:00") 

のみ日付を表す数値の整数部分を保持することによって、現在までその最初のデータポイントを変換し、その後、時間、分、秒の部分の時間値に加算します。だから、

、この始まる:あなたがステップしたい場合があります

enter image description here

enter image description here

を実行し、このコード:これで終わるために

Option Explicit 

Sub FilterTimeWithADate() 

    Dim ws As Worksheet 
    Dim rng As Range 
    Dim dtConstant As Date 
    Dim dtCriteria1 As Date 
    Dim dtCriteria2 As Date 

    ' get references to sheet and range 
    Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- set to your worksheet 
    Set rng = ws.Range("A1:A24") '<-- set to your range 

    ' reset filter 
    ws.AutoFilterMode = False 

    ' reset range numberformat 
    rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1).NumberFormat = "dd/mm/yy h:mm:ss" 

    ' get date from first data point 
    dtConstant = CDate(rng.Cells(2, 1).Value) 

    ' set filter dates 
    dtCriteria1 = CDate(CLng(dtConstant)) + TimeValue("00:03:00") 
    dtCriteria2 = CDate(CLng(dtConstant)) + TimeValue("00:08:30") 

    ' set range format 
    rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1).NumberFormat = "hh:mm:ss AM/PM" 

    ' set filter 
    rng.AutoFilter Field:=1, _ 
     Criteria1:=">=" & dtCriteria1, _ 
     Operator:=xlAnd, _ 
     Criteria2:="<=" & dtCriteria2 

End Sub 

デバッグモードでコードをseに渡すe各点での行動。

+0

超レイトレスポンスですが、ありがとうございます。 –

+0

もしそれが役に立つと思えば、答えをアップアップしてください。喜んで –

+0

ちょっと速い質問、私は複数回持っている場合は、このようにすることは可能ですか?データをフォーマットして新しい行の可視データをコピーし、代わりにその行をフィルタリングする方法はありますか? –

1
Sub Original_01() 
Dim Criteria1 As Variant 
Dim Criteria2 As Variant 
ActiveSheet.AutoFilterMode = False 
lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
Set r = ActiveSheet.Range("A1" & ":C" & lastRow) 
dtConstant = DateValue(CDate(r.Cells(2, 1).Value)) 
Criteria1 = CDbl(dtConstant + TimeValue(CDate("04:00:00 AM"))) 
Criteria2 = CDbl(dtConstant + TimeValue(CDate("08:30:00 AM"))) 
Criteria1 = ">=" & Replace(Criteria1, ",", ".") 
Criteria2 = "<=" & Replace(Criteria2, ",", ".") 
r.AutoFilter Field:=1, Criteria1:=Criteria1, Criteria2:=Criteria2 
End Sub 
+0

助けてくれてありがとう。 –

+0

こんにちは簡単な質問ですので、私は何度もこのようにすることが可能ですか?データをフォーマットして新しい行の可視データをコピーし、代わりにその行をフィルタリングする方法はありますか? –

+0

可視セルを確実にコピーすることはできますが、それは別の問題です。新しい質問をしてください。 – Docmarti

関連する問題