簡體   English   中英

Excel VBA-如何查找今天和昨天的過去24小時日期

[英]Excel VBA - How to Find Last 24 Hours date from Today and Yesterday

感謝所有為SO貢獻力量的專家,他們幫助了像我這樣的新手

我收到了CSV轉儲文件,並要求自動生成報告

我正在使用Excel VBA

有16項要求/要完成的步驟,可以使我能夠完成14項的報告自動化(當然,要在SO中搜索並將代碼更改為我的要求!!!)

宏的最后步驟涉及過濾器,我從未通過代碼編寫過濾器,這對我來說是新的

下面是一個要求,其中包含經過大量搜索和調試的過濾器,我能夠編寫以下過程,並且可以正常工作

------------------------------------------------------------------------------------------
Requirement:
    Exclude rows contains the FDN  From the column CI Group Name
------------------------------------------------------------------------------------------


        Dim DataRange               As Range
        Dim Column_Number           As Integer



                ' Find the Data Range From where in Sheet [ Working WB ], I have to Select Data
                Call UnknownRange(WorkBook_02_Name, WorkBook_02_Sheet1_Name)

                    Set DataRange = Range(Cells(FirstRow, FirstCol), Cells(LastRow, LastCol))



                        ' Set Reference to WorkBook_02
                        Set WorkBook_02 = GetWorkbookReference(WorkBook_02_Path_Office & "\" & WorkBook_02_Name)


                            ' Get the WorkSheet Name into Var
                            WorkBook_02_Sheet1_Name = WorkBook_02.Sheets(1).Name

                                With Workbooks(WorkBook_02_Name).Worksheets(WorkBook_02_Sheet1_Name)

                                    Workbooks(WorkBook_02_Name).Worksheets(WorkBook_02_Sheet1_Name).Activate

                                        ' Get the Required Column # from the Column Name
                                        Column_Number = ColumnName_To_ColumnNumber("CI")

                                            ' Remove Datum on Column [ CI ] having FDN
                                            'DataRange.RemoveDuplicates Columns:=Column_Number, Header:=xlYes


                                            'Worksheets(WorkBook_02_Sheet1_Name).AutoFilterMode = True
                                            With DataRange
                                                DataRange.AutoFilter Field:=Column_Number, Criteria1:="=*FDN*"

                                                Set ExcludeRange = DataRange.Offset(1, 0).SpecialCells(xlCellTypeVisible)

                                                    With ExcludeRange
                                                         'Remove Datum on Column [ CI ] having VDI
                                                        .EntireRow.Delete
                                                        '.Delete
                                                    End With

                                                Worksheets(WorkBook_02_Sheet1_Name).AutoFilterMode = False
                                            End With


                                End With


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


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

        ' --------------------------------------------------------
        Function ColumnName_To_ColumnNumber(ColumnName As String)
        ' --------------------------------------------------------

        '   Column Name to Column Number

            ColName = ColumnName
            Debug.Print Range(ColName & 1).Column

            ColumnName_To_ColumnNumber = Range(ColName & 1).Column

        ' --------------------------------------------------------
        End Function
        ' --------------------------------------------------------
        '
        '

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

請求#1

在上面的代碼中,我使用.Activate激活工作表。因此,我讀到必須避免(.select / .activate ....),因為我使用的工作簿只有Single Sheet,因此我可以避免使用。在上面的代碼中激活

但是,當我處理多張圖紙時,如果我不使用.Activate,那么我需要工作的圖紙將無法獲得焦點,因此我不確定如何避免.Activate。


------------------------------------------------------------------------------------------
Requirement:

Having last 24 hours date ( Yesterday 9 PM To today 9 PM) from the column F "Time Stamp"
------------------------------------------------------------------------------------------

F列有時間戳,我應該從該列中過濾出最近24小時

這是F列的示例

9/15/2014 7:33
9/15/2014 7:24
9/15/2014 7:21
9/15/2014 7:20
9/15/2014 6:43
9/15/2014 6:32
9/15/2014 6:25
9/15/2014 5:43
9/15/2014 5:30
9/15/2014 5:27
9/15/2014 4:56
9/15/2014 4:41
9/15/2014 4:28
9/15/2014 3:29
9/15/2014 3:29
9/15/2014 2:26
9/29/2014 19:22
9/29/2014 18:47
9/29/2014 18:42
9/29/2014 18:20
9/29/2014 18:05
9/29/2014 17:40
9/29/2014 17:36
9/29/2014 16:54
10/15/2014 10:07
10/15/2014 10:07
10/15/2014 10:07
10/15/2014 10:07
10/15/2014 10:07
10/15/2014 10:07

我不知道如何編寫此代碼,但是我在考慮以下步驟:

步驟#1查找今年

步驟#2我必須找出什么是今天日期和昨天日期,並將它們分配給#2變量

步驟#3根據今天的日期,我必須找出該篩選器中有多少小時。如果有24個條目,那么我完成了,我已經完成了所有24小時,條件是[昨天晚上9點到今天晚上9點]

步驟#4根據今天的日期,如果條目少於24個,那么我必須調查昨天的日期,並從中開始計算,直到完成24小時

(要么)

避免使用過濾器,並使用純VBA完成F列上的上述#4步驟

請求#2

請使用過濾器或任何其他方式幫助我找到24小時日期

------------------------------------------------------------------------------------------
Below the Recorded Macro
------------------------------------------------------------------------------------------

Sub Last_24_Hours_()
'
' Last_24_Hours_ Macro
' Last_24_Hours_
'

'
    Range("A1").Select
    Selection.AutoFilter
    Application.Goto Reference:="R1C6"
    ActiveSheet.Range("$A$1:$CM$38854").AutoFilter Field:=6, Operator:= _
        xlFilterValues, Criteria2:=Array(3, "10/14/2014 10:59:48", 3, _
        "10/14/2014 11:57:37", 3, "10/14/2014 12:58:39", 3, "10/14/2014 13:59:39", 3, _
        "10/14/2014 14:59:39", 3, "10/14/2014 15:59:42", 3, "10/14/2014 16:59:44", 3, _
        "10/14/2014 17:59:43", 3, "10/14/2014 18:59:44", 3, "10/14/2014 19:59:46", 3, _
        "10/14/2014 20:59:47", 3, "10/14/2014 21:59:49", 3, "10/14/2014 22:59:51", 3, _
        "10/14/2014 23:59:52", 2, "10/15/2014")
End Sub

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

提前致謝,

查克里

2014/9/9 9:08 AM吉普車

對不起,也不清楚。 是的,有些日期早於Now()。

請注意,我的CSV轉儲僅包含2014年10月15日之前的數據。

這是我從F欄收集24小時的手動方式:

(1)我應用自動篩選。

(2)將過濾器放在F列上

(3)從“篩選器”中選擇“ 2014年”,在該年下我有#2個月的可用時間[9月和10月]

(4)在當前的轉儲中,2014年10月15日有11個條目[即11小時],因此我選擇[00,01,02,03,04,05,06,07,08,09,10 ]

(5)所以,我有10個小時,我必須剩下24到11個小時= 13個小時,

(6)對於剩下的13個小時,我選擇2014年10月14日,離開前11個小時(因為我已經從2014年10月15日起有了它們),然后開始選擇值[11,12,13,14, 15,16,17,18,19,20,21,22,23]

因此,根據我執行的上述手動過程,Now()可能無濟於事(在我當前的CSV轉儲中,因為最大日期為Oct-15和Oct-14)

但是,您提供的代碼對於我得到的最新轉儲將非常有幫助

因此,應如何對上述手動程序進行編碼,以確保從10月15日和10月14日起有24小時

另外,在您的代碼中,我不確定是否遵循時間因素[ (昨天晚上9點到今天晚上9點) ]

謝謝查克里

這個簡短的代碼片段可能足以讓您開始使用.AutoFilter屬性。

Dim rFilteredCells As Range, lCountFilteredCells As Long
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
With ActiveSheet.Cells(1, 1).CurrentRegion
    .AutoFilter
    .AutoFilter Field:=6, Criteria1:= _
        ">=" & (Now - 1), Operator:=xlAnd, Criteria2:="<=" & Now
    'get a count of the visible cells
    lCountFilteredCells = Application.Subtotal(102, .Columns("F"))
    Debug.Print lCountFilteredCells
    'set a range object to the filtered cells
    Set rFilteredCells = .Offset(1, 6).Resize(.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    Debug.Print rFilteredCells.Address(0, 0)
    Set rFilteredCells = Nothing
    'turn .AutoFilter off
    .AutoFilter
End With

在24小時內過濾F列的日期時間后,我展示了一些計算可見日期時間並將范圍對象設置為僅可見(即,已過濾 )單元格的快速方法。

目前尚不清楚您是否會擁有現在之后的約會,但是我使用了嚴格的24小時“窗口”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM