Board logo

標題: [發問] 請教:如何根據多項條件從資料庫搜尋 [打印本頁]

作者: JackieKM    時間: 2014-7-20 01:55     標題: 請教:如何根據多項條件從資料庫搜尋

各位師兄/姐好,

問題:請問該如何根據多項條件從資料庫搜尋
在附件的"C2"的位置輸入"日期"後, (PS:這一欄是否可以做成下拉式選單)
則"B5"的欄位會根據"日期"和該行列的資訊,如"Call*未沖銷"及"9000"
到資料庫去搜尋到正確的數字。[attach]18723[/attach]

小弟曾嘗試用函數Dget,但是發生錯誤,又不知如何做,請大家不吝指教,謝謝。
作者: ML089    時間: 2014-7-20 10:09

回復 1# JackieKM

[attach]18724[/attach]

資料 B24:N44 並非標準資料庫格式,無法使用DGET等資料庫函數
標準資料庫格式需整理為6欄資料,資料庫欄位 : 日期、履約價、Call*未沖銷、Call*未沖銷契約量增減、Put*未沖銷、Put*未沖銷契約量增減

以目前資料格式可以用查詢函數處理,用MATCH查詢日期位置,用OFFSET抓取資料。
因表格設計將原資料分隔,所以公式分為兩個,不然用B5公式右拉下拉就可以完全處理。

B5 =OFFSET($C$27,ROW(A1)-1,MATCH($C$2,$24:$24,)+COLUMN(A1)-4)
右拉一格再全部下拉複製公式

E5 =OFFSET($C$27,ROW(A1)-1,MATCH($C$2,$24:$24,)+COLUMN(C1)-4)
右拉一格再全部下拉複製公式
作者: JackieKM    時間: 2014-7-21 00:45

本帖最後由 JackieKM 於 2014-7-21 00:47 編輯

回復 2# ML089

非常感謝ML089大大的幫忙,函數經測試沒有問題,也很抱歉沒有馬上回覆,
因為我對於眾多的函數仍相當陌生,所以花了很長時間研究,有以下問題,如有時間再請多多幫忙,謝謝。
問題一:請問為什麼ROW(A1)需要-1,COLUMN(A1)需要-4?

再來是我發現原先的表格不理想,如ML089大大講的"非標準資料庫格式",沒辦法做搜尋,
所以我另外重做,如附件[attach]18729[/attach]但有以下問題

問題二:新表格我有建立巨集,希望做下拉式選單,位置於B3和C3,B3選定後C3才決定,
B3 ok,但C3卻發生錯誤,C3資料驗證的來源為 =INDIRECT($B$3&"交易日期")
後有發現某些巨集名稱多了下引線_,但不知該如何修改?

問題三:根據新的表格,該如何運用搜尋的功能,例如在B6的位置,
依下列條件"交易期別"、"交易日期"、"買/賣權"、"履約價"及"未沖銷契約數",去資料總表找到相對應的數字?

謝謝。
作者: Hsieh    時間: 2014-7-21 10:47

回復 3# JackieKM
刪除原有的所有定義名稱,重新建立已下四個定義名稱
a
=OFFSET(七月資料總表!$A$2,,,COUNT(七月資料總表!$A:$A),16)
x
=COUNTA(OFFSET(七月日期總表!$A$2,,MATCH(資料查詢!$B$3&資料查詢!$C$2,七月日期總表!$1:$1,0)-1,50,))
交易日期
=OFFSET(七月日期總表!$A$2,,MATCH(資料查詢!$B$3&資料查詢!$C$2,七月日期總表!$1:$1,0)-1,x,)
交易期別
=OFFSET(七月日期總表!$B$1,1,,COUNTA(七月日期總表!$B:$B)-1,)
[attach]18730[/attach]
B3驗證清單來源
=交易期別
C3驗證清單來源
=交易日期
B6公式
=SUMPRODUCT((INDEX(a,,4)=$D6)*(INDEX(a,,5)=B$4)*(INDEX(a,,1)=$C$3)*(INDEX(a,,3)=$B$3)*INDEX(a,,12))
向下複製
E6公式
=SUMPRODUCT((INDEX(a,,4)=$D6)*(INDEX(a,,5)=E$4)*(INDEX(a,,1)=$C$3)*(INDEX(a,,3)=$B$3)*INDEX(a,,12))
向下複製
[attach]18731[/attach]
作者: JackieKM    時間: 2014-7-22 00:27

回復 4# Hsieh

感謝Hsieh大大的幫忙,函數沒有問題,更新資料庫也可以,真的是太感謝了。

還有個不請之請,就是"未沖銷契約量增減"這一欄是"當天的未沖銷契約量"減去"前一天的",請問該如何寫?謝謝。
作者: ML089    時間: 2014-7-22 01:48

回復 3# JackieKM

問題一:請問為什麼ROW(A1)需要-1,COLUMN(A1)需要-4?

B5 =OFFSET($C$27,ROW(A1)-1,MATCH($C$2,$24:$24,)+COLUMN(A1)-4)

OFFSET($C$27,y列,x欄),y列、x欄初始值為0,所以將變數值初始值校調為0

y列
        ROW(A1) =1
        ROW(A1) - 1 = 0

x欄
        MATCH($C$2,$24:$24,) 查詢 2014/7/11 為 3
        COLUMN(A1) = 1
        MATCH($C$2,$24:$24,) + COLUMN(A1) -4 = 0
作者: Hsieh    時間: 2014-7-22 16:11

回復 5# JackieKM
C6=B6-SUMPRODUCT((INDEX(a,,4)=$D6)*(INDEX(a,,5)=B$4)*(INDEX(a,,1)=($C$3-1))*(INDEX(a,,3)=$B$3)*INDEX(a,,12))
F6=E6-SUMPRODUCT((INDEX(a,,4)=$D6)*(INDEX(a,,5)=E$4)*(INDEX(a,,1)=($C$3-1))*(INDEX(a,,3)=$B$3)*INDEX(a,,12))
作者: JackieKM    時間: 2014-7-23 01:14

回復 6# ML089

感謝ML089大大的解說,我懂了,謝謝。
作者: JackieKM    時間: 2014-7-23 01:18

回復 7# Hsieh

感謝Hsieh大大的幫忙,表格OK了,謝謝。
作者: JackieKM    時間: 2014-7-24 01:02

回復 7# Hsieh

Hsieh大大您好,不好意思,小弟又來麻煩您了,
根據大大上次的幫忙,我在另一個表格將所學的運用上去,有錯誤發生但我找不到問題點,想請你幫忙
以下是相關的函數及附件[attach]18749[/attach],

a
=OFFSET(臺股期貨!$A$2,,,COUNT(臺股期貨!$A:$A),10)         PS:問題點好像是在這

D7
=SUMPRODUCT((INDEX(a,,1)=$C7)*(INDEX(a,,3)=$B7) *(INDEX(a,,4)=$D3)*(INDEX(a,,5)=??)*INDEX(a,,6))
a1:日期     a3:商品名稱(契約名稱)    a4:到期月份(週別)      a5:交易人類別(代碼0)

如果有甚麼錯誤的地方還請指正,麻煩Hsieh大大了,謝謝。
作者: Hsieh    時間: 2014-7-24 16:00

回復 10# JackieKM
資料的問題
首先會產生錯誤值是因為臺股期貨的F欄位含有-的非數值儲存格
將這些負號用取代功能取代成空格就不會產生錯誤值
但是因為八月期指的B7下拉選單中的項目並沒有空白鍵
而臺股期貨C3400的"臺股期貨(TX+MTX/4)"後面還有許多空白鍵
實際為"臺股期貨(TX+MTX/4)     "
造成比對不到資料而把7/17計算結果為0
還有一個問題是E欄的0,1是數值並非文字格式
所以D7公式應為=SUMPRODUCT((INDEX(a,,1)=$C7)*(INDEX(a,,3)=$B$7) *(INDEX(a,,4)=$D$3)*(INDEX(a,,5)=0)*INDEX(a,,6))
作者: JackieKM    時間: 2014-7-25 02:33

回復 11# Hsieh

感謝Hsieh大大詳細的解釋和幫忙,非常謝謝您。




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