Board logo

標題: [發問] 如何以多個欄位為比對條件,將所對應到的資料回傳進新報表 [打印本頁]

作者: daniel91276    時間: 2011-3-11 17:35     標題: 如何以多個欄位為比對條件,將所對應到的資料回傳進新報表

本帖最後由 daniel91276 於 2011-3-14 12:11 編輯

希望可以另外做一份報表以每個人及所屬的專案 ( 如: Jimi , 903CL0) 為比對條件
將所對應到的資料回傳進新報表
[attach]4967[/attach]

連結進新報表

[attach]4966[/attach]

抱歉  補上問題的壓縮檔
[attach]4985[/attach]
作者: ANGELA    時間: 2011-3-11 19:43

問問題請上傳excel的壓縮檔.
作者: daniel91276    時間: 2011-3-14 09:07

回復 2# ANGELA


    大大您好,已補上壓縮檔
作者: daniel91276    時間: 2011-3-14 12:13

因為這問題需要三項條件且其中有兩個條件是在同一個儲存格,所以目前還想不到方法解決
希望大大們有方法處理  感謝
作者: ANGELA    時間: 2011-3-14 15:55

=OFFSET(INDIRECT("["&C$4&".xls]b!a1"),MATCH(LOOKUP("趯",$A$5:$A6),MID(INDIRECT("["&C$4&".xls]b!a2:a176"),4,9),),3) 陣列公式
作者: daniel91276    時間: 2011-3-14 18:15

本帖最後由 ANGELA 於 2011-3-15 10:46 編輯

非常感謝 ANGELA 大大!!

我剛剛有試著把公式扔進去如下圖,可是會出現#REP!,如果把"趯" 改掉則變成了 N/A
詳如下圖

[attach]5000[/attach]

另外想請問紅框部分,也就是公式最後  4,9),),3)  的意思?
那是MID函數的參數,4是從第四位開始,9是取九位.只要大於字串長度它會取到最後一位.[attach]4998[/attach]

還有紫色框中,也就是 Leads  /  Apps  / Con.%  這三個數值,公式要如何調整?
這裡看不出公式無法理解,如果要去掉錯誤可用IF判斷.
[attach]4999[/attach]

再次感謝您!!
作者: ANGELA    時間: 2011-3-14 18:55

本帖最後由 ANGELA 於 2011-3-14 18:58 編輯

=OFFSET(INDIRECT("["&C$4&".xls]b!a1"),MATCH(LOOKUP("趯",$A$5:$A6),MID(INDIRECT("["&C$4&".xls]b!a2:a176"),4,9),),MATCH($A$1,INDIRECT("["&C$4&".xls]b!b5:l5"),))
趯前多了一個空格,去掉它.或用CHAR(65535)取代 趯
作者: ANGELA    時間: 2011-3-14 19:22

改用普通公式VLOOKUP比較好
=VLOOKUP(C$4&$A6,INDIRECT("["&C4&".xls]b!a1:L176"),MATCH($A$1,INDIRECT("["&C$4&".xls]b!A5:l5"),),)
作者: daniel91276    時間: 2011-3-15 16:38

本帖最後由 daniel91276 於 2011-3-15 16:42 編輯

回復 8# ANGELA

非常感謝 ANGELA 版主,目前使用您所建議比較簡單 VLOOKUP 的公式,已成功將 設定條件最接近的數值回傳到報表中
[attach]5003[/attach]
現在碰到的問題是希望能再增加條件,依照原本三個條件再比對下圖中紅色及紫色箭頭的文字來回傳數值



紅色箭頭
[attach]5006[/attach]     

回傳到

[attach]5005[/attach]   






紫色箭頭
[attach]5007[/attach]   

回傳到

[attach]5008[/attach]



另外現在如果要使數值回傳,需將所有的原始資料檔都開啟,
想請教是否有辦法在原始資料檔案關閉的情況下以自動更新的方式連結來回傳數值?
作者: ANGELA    時間: 2011-3-16 08:38

要用INDIRECT就要打開參照的工作簿.
如果一定要用合併格,可將A6,A7,A8都輸入CL0,再在其它空白的格子假設是AA6,AA7,AA8合併再用格式刷刷A6,A7, A8即可.這樣就可用VLOOKUP了.用7樓的公式可以不改合併格.
作者: daniel91276    時間: 2011-3-16 15:57

本帖最後由 daniel91276 於 2011-3-16 15:59 編輯

回復 10# ANGELA


    ANGELA大大您好,首先非常謝謝您的解答使我了解使用 INDIRECT 需將報表打開

    「如果一定要用合併格,可將A6,A7,A8都輸入CL0,再在其它空白的格子假設是
    AA6,AA7,AA8合併再用格式刷刷A6,A7, A8即可」這一段還是有點不太懂,能不能
    再詳細一點。不好意思小弟腦袋轉不過彎。

    如果我可以把TEST報表右方的條件變成沒有儲存格(如下圖),那是否就可以單純修改一下
    VLOOKUP的公式即可?
   [attach]5018[/attach]


    7樓的公式 我有試著使用並用CHAR(65535)取代 趯,但是得到的答案仍然是 NA
    [attach]5017[/attach]
作者: ANGELA    時間: 2011-3-16 16:51

本帖最後由 ANGELA 於 2011-3-16 16:54 編輯

回復 11# daniel91276
陣列公式需CTRL+SHIFT+ENTER

J6,J7,J8先合併再複製格式到A6,A7,A8
    [attach]5019[/attach]
作者: Hsieh    時間: 2011-3-16 17:06

資料庫部份不符合資料庫規則
這樣多檔案擷取資料,用公式連結是非常不智之舉
這樣的問題可使用VBA輔助
作者: daniel91276    時間: 2011-3-16 18:06

回復 12# ANGELA


   感謝 ANGELA 大大,我已將儲存格格式變成每格內有可帶入
   公式的部分,陣列已經加上(如圖),可是數字所帶到 C10 的值還是跟 C9 的值一樣。*(正確的值應為5)    :'(
[attach]5020[/attach]
作者: daniel91276    時間: 2011-3-16 18:12

回復 13# Hsieh


Hsieh 大大您好,小弟知道如果透過 VBA 會方便很多,但小弟目前只能對"基本"的 excel 做應用
如果上升的程式碼就不行了><。
所以只好笨人用笨方法,慢慢以公式帶入再土法煉鋼,請版大見諒!
作者: Hsieh    時間: 2011-3-16 18:30

回復 15# daniel91276

這不是你要方法取捨的問題
基本上函數要容易做到的話,你的資料必須符合資料庫建立規則
不使用合併儲存格,每列記錄一筆資料,索引明確
你的表格沒一樣符合,要用函數或EXCEL內建功能來完成
難度都遠比VBA來的高
我並非說非得使用VBA,若要減少麻煩最重要還是建立資料表時多下點功夫
作者: ANGELA    時間: 2011-3-16 18:56

本帖最後由 ANGELA 於 2011-3-16 19:00 編輯

回復 14# daniel91276

VLOOKUP確實行不通用LOOKUP吧

    =LOOKUP(2,1/((C$4&$A6=INDIRECT("["&$C$4&".xls]b!a6:A176"))*(B6=INDIRECT("["&$C$4&".xls]b!B6:B176"))),OFFSET(INDIRECT("["&$C$4&".xls]b!a6:A176"),,MATCH($A$1,INDIRECT("["&C$4&".xls]b!b5:l5"))))
資料庫不按規則建立確實增加不少麻煩.合併格最好只用在不影响運算的地方.
作者: daniel91276    時間: 2011-3-17 17:38

本帖最後由 ANGELA 於 2011-3-18 00:37 編輯

回復 17# ANGELA


ANGELA 大大您好,因為這次的資料也是一份已經做好的報表,所以沒有辦法依照正常得資料庫方式製作
造成您的不便真的非常抱歉。
您建議的LOOKUP公式還是會帶出 NA,所以我把圖再次貼上來給您看看,是不是我有地方弄錯了
[attach]5029[/attach]

不好意思  一直麻煩您,如果是我在操作上面有問題,可否貼圖給我看呢?  非常感謝您!!
合併格有改了嗎?參照及被參照都要用格式刷刷過依12樓的方式.
作者: Hsieh    時間: 2011-3-17 19:29

本帖最後由 Hsieh 於 2011-3-17 19:32 編輯

回復 18# daniel91276
既然您如此堅持
選取C6儲存格
定義名稱
a=MOD(ROW(),3)
x=OFFSET(B!$C6,-MOD(ROW(),3),-2)
y=B!C$4
z=y&x
打開所有活頁簿903.xls~912.xls
TEST.xls
C6=IF(ISERROR(MATCH(z,INDIRECT("["&y&".xls]B!$A:$A"),0)),"",INDEX(INDIRECT("["&y&".xls]B!$C:$C"),MATCH(z,INDIRECT("["&y&".xls]B!$A:$A"),0)+a,))
向右向下複製
[attach]5032[/attach]
作者: daniel91276    時間: 2011-3-18 10:43

回復 19# Hsieh


非常感謝 Hsieh 大大,我已經成功的完成了,只是剛剛檢查了一下,
發現這樣的方法是對應每個報表的位置,但由於報表裡面同一欄位可能
會因為人員的異動造成資料無法對應正確。

想請問有沒有辦法增加比對條件來抓取正確的資料?還是只能一個一個把資料調整到位再進行處理。
作者: Hsieh    時間: 2011-3-18 21:53

回復 20# daniel91276
A4填入姓名
加入定義名稱
n=MATCH(B!$A$4,INDIRECT("["&y&".xls]B!$4:$4"),0)
C6=IF(ISERROR(MATCH(z,INDIRECT("["&y&".xls]B!$A:$A"),0)),"",INDEX(INDIRECT("["&y&".xls]B!R1C"&n&":R65536C"&n,0),MATCH(z,INDIRECT("["&y&".xls]B!$A:$A"),0)+a,))
[attach]5045[/attach]
作者: gong    時間: 2011-3-19 19:28

已經這麼多種解答了
我的看法
將各工作簿計算後的欄位,用INDEX引用至TEXT檔中的資料工作表中(新增一工作表)
再在TEXT直接取用[TEXT.XLS]資料!中的數值
經過一個工作表來儲存需要資料,不需開啟其他檔,但要更新

不是不幫忙架構,實在看不懂TEXT中的資料要引用其他工作那個欄位




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