返回列表 上一主題 發帖

[發問] 多條件查找

[發問] 多條件查找

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

實際上用IF也可做到,但是因為庫存表實際上4千多筆,時間花很久
是否有更快的方式?謝謝!

本帖最後由 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)=儲位)*出庫),"")
向下複製公式
請參考!

TOP

回復 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

TOP

回復 3# dnadark


    關閉自動計算試試
Application.Calculation = xlManual ' 程式碼前
Application.Calculation = xlAutoma tic ' 程式碼後

TOP

回復 4# starry1314


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

TOP

回復 5# dnadark

sheet 查詢 這張表函數如有四千多筆 會非常的多..且vlookup等含數一多會慢
儲位,庫存 兩欄的函數將會有至少一萬六千多個lookup等函數

TOP

在數組中執行應能快點.

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

TOP

回復 7# ikboy


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

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題