返回列表 上一主題 發帖

[發問] 大筆資料篩選,速度很慢(篩選及排列)

本帖最後由 GBKEE 於 2013-4-30 17:11 編輯

回復 1# lifedidi
試試看
  1. Private Sub UserForm_Initialize()   '基本設定
  2.   '  Set 型號 = CreateObject("Scripting.Dictionary")  '耗時:須跑完所有資料列
  3.     Dim X As Integer
  4.    ' Sheets("篩選用").[A2:A2].ClearContents
  5.     With Sheets("SHEET1")
  6.         'er = .[A65536].End(3).Row
  7.         'myrng = .Range("A7:R" & er)        '資料數來到10000筆以上時 ***這會佔用記憶體***
  8.          .Cells(1, .Columns.Count) = ""
  9.         .Range("D6", .[D6].End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Cells(1, .Columns.Count), Unique:=True
  10.         '進階篩選 D欄 不重複資料 Unique:=True 到最後一欄
  11.         X = 2
  12.         Do While .Cells(X, .Columns.Count) <> ""
  13.             ComboBox1.AddItem .Cells(X, .Columns.Count)
  14.             X = X + 1
  15.         Loop
  16.         .Columns(.Columns.Count).EntireColumn.Clear   '清除 最後一欄資料
  17.     End With
  18. End Sub
  19. Private Sub ComboBox1_Change()  '選擇 下拉式選單1 立即顯示總總時間;可不用查詢鈕
  20.     If ComboBox1.ListIndex = -1 Then   '不在下拉式選單的清單內
  21.         MsgBox "專案編號 編號 " & ComboBox1 & " 不正確"
  22.     Else
  23.         Application.ScreenUpdating = False
  24.         With Sheets("SHEET1")
  25.             .Range("a6").AutoFilter Field:=4, Criteria1:=ComboBox1            'AutoFilter:  原資料庫上自動篩選.
  26.             With .Range("r:r").SpecialCells(xlCellTypeVisible)
  27.                 TextBox1.Value = Application.Text(Application.Sum(.Cells), "[hh]:mm")
  28.             End With
  29.             .AutoFilterMode = False
  30.         End With
  31.         Application.ScreenUpdating = True
  32.     End If
  33. End Sub
  34. Private Sub CommandButton3_Click()  '離開鈕
  35.     Unload UserForm1
  36. End Sub
  37. Private Sub UserForm_Terminate()    '重新排列
  38.     'Sheets("SHEET1").Range("A7:R" & er) = myrng   '重新填上資料耗時
  39. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# lifedidi
run起來,資料一筆一筆貼上,貼到五千筆需要不少時間,
為何要 資料一筆一筆貼上???
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-5-2 16:54 編輯

回復 8# lifedidi
不會罷!!  
CPU 雙處理器 3.40 GHz  1GB的RAM
測試 3000筆資料 費時1秒 , 30000筆資料 費時4秒.
  1. Private Sub CommandButton1_Click()  '查詢鈕
  2.     Dim d1 As Date, d2 As Date, T As Date
  3.     Dim Srng As Range, Crng As Range, Orng As Range
  4.     T = Time
  5. ' 程式碼.... 為何不用4# Hsieh 超版的程式碼
  6. '程式碼....
  7. '程式碼....
  8.     TextBox1.Value = Format(hh, "00") & ":" & Format(mm, "00")
  9.     MsgBox Application.Text(Time - T, "[SS]秒")  '顯示執行過程的時間
  10. End Sub
複製代碼
如在30000筆資料的工作表上用自動篩選取的資料會更快的
  1. Private Sub ComboBox1_Change()  '選擇 下拉式選單1 立即顯示總總時間;可不用查詢鈕
  2.     Dim T As Date
  3.     T = Time
  4.     If ComboBox1.ListIndex = -1 Then   '不在下拉式選單的清單內
  5.         TextBox1 = ""
  6.         MsgBox "專案編號 編號 " & ComboBox1 & " 不正確"
  7.     Else
  8.         Application.ScreenUpdating = False
  9.         With Sheets("工時資料庫")
  10.             .Range("a6").AutoFilter Field:=4, Criteria1:=ComboBox1            'AutoFilter:  原資料庫上自動篩選.
  11.             With .Range("r:r").SpecialCells(xlCellTypeVisible)
  12.                 TextBox1.Value = Application.Text(Application.Sum(.Cells), "[hh]:mm")
  13.             End With
  14.             .AutoFilterMode = False
  15.         End With
  16.         Application.ScreenUpdating = True
  17.         MsgBox Format(Time - T, " SS 秒")
  18.     End If
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 11# lifedidi
可能是2003結構沒有2007緊密(龐大) 所以運算速度會快些
11# 篩選資料可以多條件篩選嗎?假設同時要篩選:專案編號、職工編號、日期•••的條件。(請參考EXCEL檔案第二種查詢)
參考附件      Book2.zip (657.03 KB)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題