Board logo

標題: [發問] 多條件查找 [打印本頁]

作者: dnadark    時間: 2015-8-12 12:52     標題: 多條件查找

[attach]21694[/attach][attach]21692[/attach][attach]21693[/attach]想建立庫存扣帳作業
1.在查工作表中,勾選方塊後,
    於庫存工作表中的B行查找該勾選方塊右邊的儲位
                                   A行中查找該勾選方塊同一列的品名
2.找到符合條件後,在庫存工作表中的D行
   填入該勾選方塊的需求量

實際上用IF也可做到,但是因為庫存表實際上4千多筆,時間花很久
是否有更快的方式?謝謝!
作者: p212    時間: 2015-8-12 15:42

本帖最後由 p212 於 2015-8-12 15:45 編輯

回復 1# dnadark
1.在「庫存」工作表中,選取反白資料範圍(例如範例檔的A1:D12),按「Ctrl+Shift+F3」鍵,選擇以「頂端列」為名稱,進行定義名稱。
2.在「查詢」工作表中的儲存格B2輸入
=IFERROR(SUMPRODUCT(($A2=品號)*(INDEX($C2:$M2,MATCH(TRUE,$C2:$M2,0)+1)=儲位)*出庫),"")
向下複製公式
請參考!
作者: dnadark    時間: 2015-8-12 16:19

回復 2# p212


    謝謝p212的回覆,不過因為資料過多,用函數會跑很久,以巨集執行
    巨集也可做到,但目前寫的巨集也是要跑很久
     現在巨集如下,是否有簡化時間的寫法?  謝謝!

lastrow_a = Sheets("庫存").Cells(Rows.Count, 1).End(xlUp).Row
lastrow_b = Sheets("查").Cells(Rows.Count, 1).End(xlUp).Row
For ax = 2 To lastrow_b '查工作表的品號列數
  For ay = 3 To 12 Step 3 '核取方塊欄
    For  ao = 2 To lastrow_a '庫存資料庫
If Sheets("查").Cells(ax, ay) = True And Sheets("查").Cells(ax, 1) = Sheets("庫存").Cells(ao, 1) And Sheets("查").Cells(ax, ay + 1) = Sheets("庫存").Cells(ao, 2) Then
   Sheets("庫存").Cells(ao, 4)=  Sheets("查").Cells(ax, 2)
end if
next
next
next
作者: starry1314    時間: 2015-8-12 17:57

回復 3# dnadark


    關閉自動計算試試
Application.Calculation = xlManual ' 程式碼前
Application.Calculation = xlAutoma tic ' 程式碼後
作者: dnadark    時間: 2015-8-12 19:35

回復 4# starry1314


    starry1314 大~謝謝你的建議,但是查工作表的函數,已經都改用巨集寫了,
    並無函數,所以實際加上停止運算的程式碼仍舊花很久時……
作者: starry1314    時間: 2015-8-12 19:49

回復 5# dnadark

sheet 查詢 這張表函數如有四千多筆 會非常的多..且vlookup等含數一多會慢
儲位,庫存 兩欄的函數將會有至少一萬六千多個lookup等函數
作者: ikboy    時間: 2015-8-12 22:16

在數組中執行應能快點.

Sub zz()
a = Sheets("庫存").[a1].CurrentRegion
b = Sheets("查").[a1].CurrentRegion
For ax = 2 To UBound(b)  'lastrow_b '查工作表的品號列數
  For ay = 3 To 12 Step 3 '核取方塊欄
    For ao = 2 To UBound(a)  'lastrow_a '庫存資料庫
      If b(ax, ay) = True And b(ax, 1) = a(ao, 1) And b(ax, ay + 1) = a(ao, 2) Then
        a(ao, 4) = b(ax, 2)
      End If
    Next
  Next
Next
Sheets("庫存").[a1].Resize(UBound(a), UBound(a, 2)) = a
End Sub
作者: dnadark    時間: 2015-8-13 11:40

回復 7# ikboy


    謝謝ikboy大~~瞬間就跑完了!!
    謝謝!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)