Re: [問題] EXCEL抓取最接近日期的資料

看板Office作者 (David)時間17年前 (2009/02/03 15:34), 編輯推噓3(3016)
留言19則, 2人參與, 最新討論串2/4 (看更多)
有數種方法 以下先用一個需要排序 但公式較簡單的方法 A B C D E 公司代號 購併日期 100 02/03/2009 100|02/03/2009 60 51 200 12/15/2009 200|12/15/2009 300 07/26/2009 300|07/26/2009 C2 =A2&"|"&B2 假設股價資料如下 G H I J 公司代號 日期 股價 100 02/01/2009 55 100|02/01/2009 100 02/02/2009 60 100|02/02/2009 100 02/03/2009 34 100|02/03/2009 100 02/04/2009 51 100|02/04/2009 200 . . 200|. 200 . . 200|. J2 =G2&"|"&H2 需依J欄排序,即按公司代號排 再按日期排 前1天股價 D2 =INDEX(I:I,MATCH(C2,J:J)-COUNTIF(J:J,C2)) 後1天股價 F2 =INDEX(I:I,MATCH(C2,J:J)+1) 其中MATCH(C2,J:J)會找到當天的位置 若當天不存在 找到前一筆 詳見說明檔 若不排序 使用陣列公式 以Ctrl+Shift+Enter結尾 前一天日期 C10 =MAX(IF(IF($G$2:$G$7=$A10,$H$2:$H$7)<$B10,$H$2:$H$7)) 股價 D10 =MAX(IF($G$2:$G$7=$A10,IF($H$2:$H$7=C10,$I$2:$I$7))) 後一天日期 E10 =MIN(IF(IF($G$2:$G$7=$A10,$H$2:$H$7)>$B10,$H$2:$H$7)) 股價 F10 =MAX(IF($G$2:$G$7=$A10,IF($H$2:$H$7=E10,$I$2:$I$7))) 股價是依找到的日期去找股價 如果同一天有兩個以上的股價 找最高的(故用max) 但不應有兩個以上同一天的股價(同公司) 所以就是會找到該天的股價 http://2y.drivehq.com/p/LocateTarget.xls ※ 引述《sshaq (sshaq)》之銘言: : (若是和其他不同軟體互動之問題 請記得一併填寫) : 軟體:EXCEL : 版本:2007 : 由於論文上的需要 必須要整理出最接近公司宣告購併那天的前後兩天股價 : 例如:A公司在02/03/2009宣告購併 : 那我就要抓出A公司 02/02/2009與02/04/2009這兩天的股價 : 但如果02/02/2009沒資料的話 就往前1天 還是沒有的的話 再往前一天 : 直到有股價資料為止 而02/04/2009也是往後推直到有資料為止 : 但是比較麻煩的是因為公司的數目很多 一個一個找要很久 : 我的EXCEL有兩個工作表 : 第一個是每間公司宣告購併的日期 : 第二個是所有公司每天的股價 : 例如:(第一個工作表) (第二個工作表) : 公司代號 購併日期 公司代號 日期 股價 : 100 02/03/2009 100 02/01/2009 55 : 200 12/15/2009 100 02/02/2009 60 : 300 07/26/2009 100 02/03/2009 34 : . . 100 02/04/2009 51 : . . 200 . . : . . 200 . . : 所以以公司代號為100的公司為例 因為其購併日期是02/03/2009 : 所以要從第二個工作表中先找出公司代號為100的公司 : 然後再把02/03/2009前後兩天的股價抓出來 : 也就是把02/02/2009的60 與02/04/2009的51抓出來 : 不曉得有什麼辦法可以解決這個問題 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.48.84

02/03 16:23, , 1F
真的是太感謝您了 願意花時間幫我解決這個問題
02/03 16:23, 1F

02/03 16:30, , 2F
請問第一個方法您有提到J欄要排序 是先以公司由小到大排
02/03 16:30, 2F

02/03 16:33, , 3F
然後再每個公司內的日期由小排到大嗎
02/03 16:33, 3F

02/03 16:36, , 4F
那如果我是要的不只是前1天 還要前2,3,4,5...
02/03 16:36, 4F

02/03 16:38, , 5F
函數要怎麼改呢 那如果是要後2天
02/03 16:38, 5F

02/03 16:39, , 6F
是不是只要將函數中加號後的數字改成2即可呢 謝謝
02/03 16:39, 6F

02/03 18:12, , 7F
排序您說的沒錯 而主要是照J欄排序 因為公式是看J欄 且該
02/03 18:12, 7F

02/03 18:14, , 8F
MATCH需要排序。照J欄的公式來排序會產生您講的結果。
02/03 18:14, 8F

02/03 18:17, , 9F
天數是這樣改沒錯,而數字可用ROW(A1)或COLUMN(A1)代替
02/03 18:17, 9F

02/03 18:18, , 10F
就不用一直手動改 或是寫在別格參照之
02/03 18:18, 10F

02/03 18:19, , 11F
改INDEX的第二個參數就是天數(因為有排序)
02/03 18:19, 11F

02/03 18:20, , 12F
但要小心是否仍是同一家公司
02/03 18:20, 12F

02/03 18:21, , 13F
陣列公式法 則用LARGE和SMALL取代MAX和MIN可達2.3.4天效果
02/03 18:21, 13F

02/03 18:22, , 14F
找到日期後股價公式就一樣 若無該日則找不到日期顯示錯誤
02/03 18:22, 14F

02/03 18:22, , 15F
不會找到別家公司的股價
02/03 18:22, 15F

02/03 22:45, , 16F
不好意思 請問若用第一種方法 要前2,3,4..天股價 要怎麼改
02/03 22:45, 16F

02/04 02:18, , 17F
就是您講的那樣 檔案已更新~
02/04 02:18, 17F

02/04 10:27, , 18F
謝謝您 不然論文都生不出來了 謝謝
02/04 10:27, 18F

02/05 13:33, , 19F
^^
02/05 13:33, 19F
※ 編輯: JieJuen 來自: 218.164.49.72 (05/11 19:28)
文章代碼(AID): #19X_EUj8 (Office)
文章代碼(AID): #19X_EUj8 (Office)