[英]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小時
(要么)
請求#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.