Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

Jc 發問時間: 電腦與網際網路程式設計 · 9 年前

巨集 EXCEL如何每天自動篩選

請問各位:

我有一份EXCEL文件,裡面有每一天的檔案、且有很多Sheet。

我想要每天點巨集,它就會自動篩選我需要的日期。

但問題是,

假設我今天上午需要的資料、日期區間在2012/10/25 20:00至2012/10/26 07:30區間

的資料。

下午要2012/10/26 08:00至2012/10/26 20:00的資料

明天早上要2012/10/26 20:00至2012/10/27 07:30的資料。

每天都以此類推的做自動篩選,若這樣要怎麼做??

我有大概輸入了一串、如下...

但我輸入的這一串、早上用完,下午要撈不一樣的資料、必須去聚集裡編輯日期時間。

隔日早上亦是如此。

請問我要如何做才能每天做自動篩選撈資料,而不用在手動改。

ActiveSheet.Range("$A$3:$X$285").AutoFilter Field:=21, Criteria1:= _

">=2012/10/25 20:00", Operator:=xlAnd, Criteria2:="<=2012/10/26 07:30"

已更新項目:

dear:冰淇淋

早上的資料區間要昨天的20:00~今天早上的07:30

下午的資料區間要今天早上的08:00~至晚上的20:00

2 個已更新項目:

dear: 准提部林

D1跟E1是要輸入在我要撈資料的sheet裡面嗎?

我巨集是在另一個活頁簿裡。

3 個已更新項目:

Range("A3").Select

Sheets("Sheet2").Select

Range("A3").Select

Windows("AgingRoom_WIP_for BMN_2012.xlsm").Activate

ActiveSheet.Range("$A$3:$X$285").AutoFilter Field:=21, Criteria1:= _

4 個已更新項目:

">=2012/10/28 20:00", Operator:=xlAnd, Criteria2:=" <=2012/10/29 07:30"

Sheets("PMT2(工程測試倉)").Select

Range("N7").Select

ActiveSheet.Range("$A$3:$X$93").AutoFilter Field:=21, Criteria1:= _

5 個已更新項目:

">=2012/10/28 20:00", Operator:=xlAnd, Criteria2:=" <=2012/10/29 07:30"

ActiveWindow.SmallScroll Down:=-9

Sheets("PMT3(Hold)").Select

Range("W8").Select

6 個已更新項目:

ActiveWindow.SmallScroll ToRight:=-1

ActiveSheet.Range("$A$3:$X$236").AutoFilter Field:=21, Criteria1:= _

">=2012/10/28 20:00", Operator:=xlAnd, Criteria2:=" <=2012/10/29 07:30"

7 個已更新項目:

Sheets("PMT1(MP)").Select

ActiveWindow.SmallScroll Down:=-12

Windows("測試每日入熟加總(日夜班).xlsm").Activate

Range("D18").Select

8 個已更新項目:

這是我巨集的內容、日期時間部份我還是不知怎麼下手

9 個已更新項目:

dear 准提大師

真是太感謝你了!

你幫了我一個大忙~~

你要不要把你的回答、留在回答內、這樣我才能投給你

不然小弟這知識問題會流掉~~~

dear 冰淇淋大師

也非常感謝你的幫忙、讓我知道時間的設定注意點~~

非常感謝……

2 個解答

評分
  • 9 年前
    最佳解答

    在D1輸入〔開始時間〕,E1輸入〔結束時間〕,

    ActiveSheet.Range("$A$3:$X$285").AutoFilter Field:=21, _

    Criteria1:= ">=" & [D1], Operator:=xlAnd, Criteria2:="<=" & [E1]

    2012-10-30 09:57:39 補充:

    既然一天抓取2次固定時間(早上.下午)的資料,

    也許可分為2個巨集,

    萬一下午又要重新抓早上的資料!

    或者,有否可能想重抓昨天下午的資料?

    2012-10-30 16:50:13 補充:

    程式碼參考:

    http://tw.myblog.yahoo.com/smile-1000miles/article...

    2012-10-31 12:26:18 補充:

    EXCEL VBA.每天執行〔固定時段〕的〔資料篩選〕

                             <.准提部林.>

    ---------------------------------

    ■篩選條件:

     1.早上:昨天 20:00 ~ 今天早上 07:30

     2.下午:今天早上 08:00 ~ 晚上 20:00

     

    ■程式碼:

     Sub 每日篩選()

     Dim xArea(1 To 3) As Range, i&, Y, uTime1, uTime2

     重新輸入:

     Y = Application.InputBox("請輸入篩選時段,(1=早上,2=下午)")

     If CStr(Y) = "False" Then Exit Sub

     If Val(Y) < 1 Or Val(Y) > 2 Then MsgBox "※輸入錯誤!": GoTo 重新輸入

     If Y = 1 Then uTime1 = Date - 1 & " 20:00": uTime2 = Date & " 07:30"

     If Y = 2 Then uTime1 = Date & " 08:00": uTime2 = Date & " 20:00"

     '↑利用〔InputBox 輸入框〕選擇〔篩選時段〕  

     

     With Workbooks("AgingRoom_WIP_for BMN_2012.xlsm")

        .Activate

        Set xArea(1) = .Sheets("PMT1(MP)").Range("A3:X285")

        Set xArea(2) = .Sheets("PMT2(工程測試倉)").Range("A3:X93")

        Set xArea(3) = .Sheets("PMT3(Hold)").Range("A3:X236")

     End With

     '↑將3個工作表篩選區域以〔變數〕代表  

     

     For i = 1 To 3

       xArea(i).AutoFilter Field:=21, _

       Criteria1:=">=" & uTime1, Operator:=xlAnd, _

       Criteria2:="<=" & uTime2

     Next i

     '↑以迴圈執行篩選作業  

     

     Workbooks("測試每日入熟加總(日夜班).xlsm").Activate

     End Sub

     

    ■程式碼2:動態抓篩選資料的〔列數〕

     Sub 每日篩選2()

     Dim i&, Y, uTime1, uTime2

     Dim ShtName, uSht As Worksheet, uRow&

     重新輸入:

     Y = Application.InputBox("請輸入篩選時段,(1=早上,2=下午)")

     If CStr(Y) = "False" Then Exit Sub

     If Val(Y) < 1 Or Val(Y) > 2 Then MsgBox "※輸入錯誤!": GoTo 重新輸入

     If Y = 1 Then uTime1 = Date - 1 & " 20:00": uTime2 = Date & " 07:30"

     If Y = 2 Then uTime1 = Date & " 08:00": uTime2 = Date & " 20:00"

     

     ShtName = Array("PMT1(MP)", "PMT2(工程測試倉)", "PMT3(Hold)")

     With Workbooks("AgingRoom_WIP_for BMN_2012.xlsm")

        .Activate

        For i = 1 To 3

          Set uSht = .Sheets(ShtName(i - 1))

          uRow = uSht.[A65536].End(xlUp).Row

          If uRow > 2 Then

            uSht.Range("A3:X" & uRow).AutoFilter Field:=21, _

             Criteria1:=">=" & uTime1, Operator:=xlAnd, _

             Criteria2:="<=" & uTime2

          End If

        Next i

     End With

     

     Workbooks("測試每日入熟加總(日夜班).xlsm").Activate

     End Sub

     

     --說明--

     檢測〔資料列數〕是以A欄為準則,請自行選擇不會有空格資料的欄位,

     以避免誤判。

    ---------------------------------

    2012-10-31 12:30:36 補充:

    Set uSht = .Sheets(ShtName(i - 1))

    uSht.AutoFilterMode = False '>請加入這行

    uRow = uSht.[A65536].End(xlUp).Row

    先解除篩選模式,再判斷列數!

  • 冰淇
    Lv 6
    9 年前

    請問版主

    早上和下午要撈資料的時間區間各為何???

    2012-10-29 22:30:36 補充:

    To 版主

    准大程式您可明顯知道抓取時間

    ~

    Dim myAr

    myAr = Array(" 08:00:00", " 20:00:00", " 07:30:00")

    If Hour(Time) > 8 And Hour(Time) < 20 Then

    str1 = Date - 1 & myAr(1): str2 = Date & myAr(2)

    Else: str1 = Date & myAr(0): str2 = Date & myAr(1)

    End If

    2012-10-29 22:31:36 補充:

    ActiveSheet.Range("$A$3:$X$285").AutoFilter Field:=21, Criteria1:=">=" & str1, _

    Operator:=xlAnd, Criteria2:="<=" & str2

    ~

    時間設定要注意

還有問題?馬上發問,尋求解答。