返回列表 上一主題 發帖

[發問] 如何搜尋特定日期

回復 1# acdx


問題描述太簡略,說不定回覆者打的字都比您多!^^
提出多一些不同實例並模擬出所要的結果看看,
最好上附檔吧!

TOP

回復 5# acdx


1.逐列處理(隱藏.刪除...等動作),速度必定慢,
  若遇不得不逐列執行動作,通常要加 Application.ScreenUpdating = False,關閉螢幕更新
2.內建功能必然有其更優化的處理方法,所以,儘量利用內建功能來處理資料
3.篩選有時沒有最簡便的方法,例如本題A欄為〔日期〕格式,若想只針對〔年〕或〔月〕篩選,
  得使用〔輔助欄公式〕較有效益。
 
以下為使用〔儲存格聯集〕方法,一次性隱藏列,Union 與按 Ctrl 跳選儲存格方法相同,
但最多可聯集多少個儲存格,尚未測試其極限,參考即可:
  1. Sub 篩選()
  2. Dim xR As Range, xU As Range
  3. Cells.EntireRow.Hidden = False
  4. For Each xR In Range([A2], Cells(Rows.Count, 1).End(3))
  5.   If Year(xR) <> 2009 Then If xU Is Nothing Then Set xU = xR Else Set xU = Union(xU, xR)
  6. Next
  7. If Not xU Is Nothing Then xU.EntireRow.Hidden = True
  8. End Sub
複製代碼
 

TOP

回復 5# acdx


6樓程式遇大資料,速度還是太慢,以下運用〔陣列+輔助欄〕,速度應可快些:
1.先以陣列存放檢測結果
2.將檢測結果放在F欄(或閒置任一欄也可),
  利用〔到.特殊.常數.數字〕,選取有效數字儲存格,再予以隱藏
 
  1. Sub 篩選2()
  2. Dim Arr, i&
  3. Cells.EntireRow.Hidden = False
  4. Arr = Range([A2], Cells(Rows.Count, 1).End(3))
  5. For i = 1 To UBound(Arr)
  6.   If Year(Arr(i, 1)) <> 2009 Then Arr(i, 1) = 1 Else Arr(i, 1) = ""
  7. Next i
  8. With [F2].Resize(UBound(Arr))
  9.   .Value = Arr
  10.   On Error Resume Next
  11.   .SpecialCells(xlCellTypeConstants, 1).EntireRow.Hidden = True
  12.   .Clear
  13. End With
  14. End Sub
複製代碼
 

TOP

回復 8# acdx


End(3) 即是 End(xlUp)
有時〔常數〕可使用〔代碼〕,進 VBE 說明檔看看,其實這說明檔很好用,有很多範例,是學習的好所在!

TOP

        靜思自在 : 好事要提得起,是非要放得下,成就別人即是成就自己。
返回列表 上一主題