標題:
[發問]
如何搜尋特定日期
[打印本頁]
作者:
acdx
時間:
2015-9-8 17:36
標題:
如何搜尋特定日期
A1~A20皆為日期格式(例如2015/4/15),如何搜尋特定月份?
例如2015年6月
作者:
准提部林
時間:
2015-9-8 17:54
回復
1#
acdx
問題描述太簡略,說不定回覆者打的字都比您多!^^
提出多一些不同實例並模擬出所要的結果看看,
最好上附檔吧!
作者:
ikboy
時間:
2015-9-8 19:30
樓主的Excel版本是2010,用普通的篩選即可
作者:
ML089
時間:
2015-9-9 09:33
回復
1#
acdx
你可以做輔助欄
例如
A1是日期
B2公式 =MONTH(A1)
公式下刷
用B欄就能篩選月份
作者:
acdx
時間:
2015-9-10 14:54
本帖最後由 acdx 於 2015-9-10 14:56 編輯
[attach]21948[/attach]
我寫了下列程式來搜尋特定日期的資料
Sub 篩選()
Dim St, Col, Ed As Integer
Set DateRange = Worksheets(1).Range("A1").CurrentRegion.Columns(1)
St = Range("A2").Row
Col = DateRange.End(xlToRight).Column
Ed = DateRange.End(xlDown).Row
DateRange.EntireRow.Hidden = False
For i = St To Ed
If Year(Cells(i, 1)) <> 2009 Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End Sub
複製代碼
但是這程式執行的速度遠低於使用Excel內建的篩選功能,該如何寫才能達到內建篩選功能的速度?
[attach]21946[/attach]
作者:
准提部林
時間:
2015-9-10 16:29
回復
5#
acdx
1.逐列處理(隱藏.刪除...等動作),速度必定慢,
若遇不得不逐列執行動作,通常要加 Application.ScreenUpdating = False,關閉螢幕更新
2.內建功能必然有其更優化的處理方法,所以,儘量利用內建功能來處理資料
3.篩選有時沒有最簡便的方法,例如本題A欄為〔日期〕格式,若想只針對〔年〕或〔月〕篩選,
得使用〔輔助欄公式〕較有效益。
以下為使用〔儲存格聯集〕方法,一次性隱藏列,Union 與按 Ctrl 跳選儲存格方法相同,
但最多可聯集多少個儲存格,尚未測試其極限,參考即可:
Sub 篩選()
Dim xR As Range, xU As Range
Cells.EntireRow.Hidden = False
For Each xR In Range([A2], Cells(Rows.Count, 1).End(3))
If Year(xR) <> 2009 Then If xU Is Nothing Then Set xU = xR Else Set xU = Union(xU, xR)
Next
If Not xU Is Nothing Then xU.EntireRow.Hidden = True
End Sub
複製代碼
作者:
准提部林
時間:
2015-9-10 17:01
回復
5#
acdx
6樓程式遇大資料,速度還是太慢,以下運用〔陣列+輔助欄〕,速度應可快些:
1.先以陣列存放檢測結果
2.將檢測結果放在F欄(或閒置任一欄也可),
利用〔到.特殊.常數.數字〕,選取有效數字儲存格,再予以隱藏
Sub 篩選2()
Dim Arr, i&
Cells.EntireRow.Hidden = False
Arr = Range([A2], Cells(Rows.Count, 1).End(3))
For i = 1 To UBound(Arr)
If Year(Arr(i, 1)) <> 2009 Then Arr(i, 1) = 1 Else Arr(i, 1) = ""
Next i
With [F2].Resize(UBound(Arr))
.Value = Arr
On Error Resume Next
.SpecialCells(xlCellTypeConstants, 1).EntireRow.Hidden = True
.Clear
End With
End Sub
複製代碼
作者:
acdx
時間:
2015-9-10 18:00
回復
7#
准提部林
請問Cells(Rows.Count, 1).End(3)--->代表的是?為何是End(3)?
作者:
准提部林
時間:
2015-9-10 18:41
回復
8#
acdx
End(3) 即是 End(xlUp)
有時〔常數〕可使用〔代碼〕,進 VBE 說明檔看看,其實這說明檔很好用,有很多範例,是學習的好所在!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)