Re: [算表] 計算大於等於上一個數值的數目有幾個

看板Office作者 (R+) (9527)時間15年前 (2011/04/04 01:24), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
弱弱的解法: 檔案如下 https://docs.google.com/leaf?id=0Bw1Y_fV1cmOaNzZhMjIyY2ItNTIwYy00NjkyLTg3YWYtOTY0MGNkZjYxYjE3&hl=zh_TWhttp://ppt.cc/ieEf 左上角有可以下載的超連結~ 產值的公式 分頁1:WXY這三欄~ 分頁2:WX兩欄~ 基本上原po的需求如下: 現有資料六千多列 每六十列取一特定值 此值為衰減前的數量 所以六千列就要取一百個值~ 共有20個分頁 每個分頁的列數不一 但欄位是一樣的 欄位在w欄之後開始是空白無資料的 以下為不才的土法煉鋼法: 有兩個分頁 兩種解法 方法稍微不同 但是都可以得到一樣的值 第二個分頁的解法會比較簡潔 不過不一定適合 要看你要的資料是什麼樣子而定 a.想法: 1.w欄 資料由第二列開始(第一列是標題) 第一個比對資料區塊為B2:B61 邊界條件: BC1.其中第一列一定會取 以 ROW() 和 MOD() 判別此列是否為資料簇的首列 ROW()值 是不是2,62,122.... 如果是首列 那就傳出1 不是的話就進行下面的判別 BC2.第60列要和第59列比較(不能和第61列比較,因為分屬不同資料簇) 不是資料簇的首列 進行判斷 判斷此列的B欄值 與上一列的B欄值大小關係 若不小於上一列 傳出1 BC3.如果同簇資料已現過0(已經衰減過了),則不論大小一律傳出0 比較同簇資料上列的資料是否為0,若為0,則傳出0 若上列資料不為0 則傳出BC2的1 註:這邊BC2 BC3順序可以換 但是傳出1或0要自己換一下 2.x欄(分頁1) 判別是不是資料簇首列 如果是首列 就統計這一簇的1的總和 統計就比較簡單 就用 INDIRECT() 和 COUNTIF() 或 SUM()組合一下 至於INDIRECT到哪一簇 就用ROW()去做一些簡單的加減乘除得到的 3.y欄(分頁1) 這是稍微集中一下x欄資料 也是用簡單的INDIRECT()和ROW()處理 在分頁2 也就是另外一種解法 是把分頁1的 x欄 跟 y欄 融在一起 然後有一些寫法變了 不過都一樣的結果啦~ 分頁1 分頁2 ----------------------------------------- w欄判斷 >= < 統計方法 COUNTIF() SUM() 分頁2有用一下別的公式 COUNTA() 統計總資料列有幾列 超過的就讓它空白(不然會變成0值) 基本上就是這樣啦~ =========================================================================== 最後列一下公式: 分頁一: w2=IF(MOD(ROW(),60)=2,1,IF(B2>=B1,IF(W1=0,0,1),0)) x2=IF(MOD(ROW(),60)=2, COUNTIF( INDIRECT("R"&ROW()&"C"&COLUMN()-1&":R"&ROW()+59&"C"&COLUMN()-1,0), 1), "") y2=INDIRECT("R"&2+(ROW()-2)*60&"C"&COLUMN()-1,0) z2=2+(ROW()-2)*60&"~"&61+(ROW()-2)*60 分頁二: w2=IF(MOD(ROW(),60)=2,1,IF(B2<B1,0,IF(W1=0,0,1))) x2=IF(INT(COUNTA(B:B)/60)+2>ROW(), SUM( INDIRECT( "R"&2+(ROW()-2)*60&"C"&COLUMN()-1& ":R"&61+(ROW()-2)*60&"C"&COLUMN()-1,0 ) ), "") y2=IF(COUNTA(B:B)>61+(ROW()-2)*60,2+(ROW()-2)*60&"~"&61+(ROW()-2)*60,"") --- 還是不會寫陣列 orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.233.171.39 ※ 編輯: Rplus 來自: 125.233.171.39 (04/04 01:33)

04/04 02:03, , 1F
感謝&感激不盡&感謝再感謝
04/04 02:03, 1F
文章代碼(AID): #1DcArDgQ (Office)
文章代碼(AID): #1DcArDgQ (Office)