返回列表 上一主題 發帖

VBA 資料搜尋問題

VBA資料搜尋問題

本帖最後由 Qin 於 2018-10-7 14:35 編輯

回復 60# 准提部林

"歹勢" 啦! 不是嫌麻煩, 只是因為習慣使然.
當想到准大都不厭其煩, 幫我解決一個又一個問題時.
心裡除了感恩還有, 還有無限的感激….
言歸正傳, 為何在 Search Data 的過程中, 如果不開

SearchData_20181007.rar (943.35 KB)

TOP

回復 60# 准提部林

不曉得有何故障, 一直不能將全文完整貼上...

TOP

回復 60# 准提部林

言歸正傳, 為何在 Search Data 的過程中, 如果不打開 Data 檔, 就要用 1分鐘 的時間搜資料,
如果2檔同時打開, 只需 4秒-7秒, 就可以搜到答案. (40萬筆)

因為我的本意是 Search Data 的過程中, Data 檔是不要打開的.
又要再次麻煩准大幫我看看….

p/s:"日期格式"問題,已找到了解決的方法.

TOP

回復 63# Qin


單獨手動打開data檔, 看要花多少時間???
如果檔案中有很多公式, 開啟時會自動重算, 要花些時間的!

所謂[不開啟], 實際是用別種方式開啟, 只是肉眼看不到,
沒有實際檔案測試, 什麼也說不準!!!
_我只用office 2000, 所以, 可另行發帖, 請其他人幫忙吧~~

TOP

回復 64# 准提部林

謝謝你的提醒
原來 Data 檔案太大, 打開時, 需要花一點時間才是癥結所在.

現在問題又解決了,
因為我將它儲存為(.xlsb)
在搜尋速度上也令人滿意…

接下來, 還可以請你再幫我最後一個忙嗎?
我想將搜尋出來資料用 VBA 再做一個 [現存數量] Qty on Hand
請看附檔
SearchData.rar (51.48 KB)

TOP

回復 65# Qin

Sub Trans_Qty()
Dim R&
With Sheets("Qty on Hand")
     If .FilterMode Then .ShowAllData
     .UsedRange.Offset(1, 0).EntireRow.Delete
End With
R = Cells(Rows.Count, 1).End(xlUp).Row - 7
If R <= 0 Then Exit Sub
With ['Qty on Hand'!A2:I2].Resize(R)
     [A8:I8].Resize(R).Copy .Cells
     .Sort Key1:=.Item(6), Order1:=xlAscending, _
           Key2:=.Item(3), Order1:=xlAscending, Header:=xlNo
End With
With ['Qty on Hand'!I2].Resize(R)
     .Formula = "=IF(F2=F3,""A"",""B"")&TEXT(MID(I1,2,99),""0;-0;0;!0"")+N(H2)"
     .Value = .Value
     .Replace "A*", "", Lookat:=xlPart
     .Replace "B", ""
     .NumberFormatLocal = "#,##0;-#,##0"
End With
Application.Goto ['Qty on Hand'!A2]
End Sub

TOP

稍改
Sub Trans_Qty()
Dim R&
With Sheets("Qty on Hand")
     .AutoFilterMode = False
     .UsedRange.Offset(1, 0).EntireRow.Delete
End With
R = Cells(Rows.Count, 1).End(xlUp).Row - 7
If R <= 0 Then Exit Sub
With ['Qty on Hand'!A2:I2].Resize(R)
     [A8:I8].Resize(R).Copy .Cells
     .Sort Key1:=.Item(6), Order1:=xlAscending, _
           Key2:=.Item(3), Order1:=xlAscending, Header:=xlNo
End With
['Qty on Hand'!A1:I1].Resize(R + 1).AutoFilter
With ['Qty on Hand'!I2].Resize(R)
     .NumberFormatLocal = "#,##0;-#,##0"
     '.Formula = "=IF(F2=F3,""A"","""")&TEXT(MID(I1,2,99),""0;-0;0;!0"")+N(H2)" '公式(1)
     '.Formula = "=IF(F2=F3,""A"","""")&IF(ROW(A1)=1,0,MID(I1,2,99))+N(H2)"    '公式(2)
     .Formula = "=IF(F2=F3,"""",SUMIF(F:F,F2,H:H))"  '公式(3)
     '三種公式任選一個, 資料多, 看哪個快, 選哪個
     .Value = .Value
     .Replace "A*", "", Lookat:=xlPart '使用公式(3), 可省略這一行
End With
Application.Goto ['Qty on Hand'!A2]
End Sub

TOP

回復 67# 准提部林

准大
3個公式, 只有公式(3)可用
其他2個皆出錯.
Formula.rar (108.2 KB)

TOP

回復 68# Qin

更正下:
With ['Qty on Hand'!I2].Resize(R)
     .NumberFormatLocal = "#,##0;-#,##0"
     .Formula = "=IF(F2=F3,""A"","""")&TEXT(MID(I1,2,99),""0;-0;0;!0"")*(F2=F1)+N(H2)"  '公式(1)
     '.Formula = "=IF(F2=F3,""A"","""")&IF(ROW(A1)=1,0,MID(I1,2,99))*(F2=F1)+N(H2)" '公式(2)
     '.Formula = "=IF(F2=F3,"""",SUMIF(F:F,F2,H:H))" '公式(3)
     .Value = .Value
     .Replace "A*", "", Lookat:=xlPart '公式(1)及(2), 需加這一行
End With

TOP

回復 69# 准提部林

幸好有准大不斷的幫忙, 符合我需求的程式碼終於可以使用了…
謝謝你,當我說資料太大, 搜尋速度慢時, 又幫我重新寫過一篇程式碼.
謝謝你,跟據我的要求幫我修修改改, 讓它適合我使用.
謝謝你,總在我遇到問題找不到原因時, 仍願意多敲幾個字給予指示和提醒.
你真的很棒很棒
還有真的真的真的很好…

准大, 謝謝你!!!





                   **學而不厭  誨人不倦**

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題