![]() |
||
|
Junior Member
![]() ![]() ![]() 加入日期: Jul 2004 您的住址: Verthandi的懷裡
文章: 766
|
引用:
還好啦,反正我在公司無聊也是在玩玩VBA 順便練習怎麼寫跟簡化 目前有的也寫成模組起來方便以後套用 |
||||||||
|
|
|
Advance Member
![]() ![]() 加入日期: Dec 2002
文章: 441
|
引用:
寫的非常漂亮~~~ |
|||
|
|
|
*停權中*
加入日期: Nov 2010
文章: 116
|
引用:
經過測試,很抱歉,不能用 比如說這個 =if(AVERAGE(E12:O31)<1,if(AVERAGE(E12:O31) >0.5,AVERAGE(E12:O31),),) 它會把所有值加總平均後跟0.5比,比0.5大的話再跟1比,比1小的話才能輸出值 我要的是: 把所有值先挑過,符合條件的才放進去加總平均,不符合條件的根本不會放進去一起平均 |
|
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jul 2004 您的住址: Verthandi的懷裡
文章: 766
|
引用:
真是抱歉,沒把你要的要求看清楚 晚點再來想想怎麼寫比較順 |
|
|
|
|
Advance Member
![]() ![]() 加入日期: Dec 2002
文章: 441
|
延續edjc兄規劃,H1是上限,H2是下限(如有特殊需求,請自行改成>=)
用陣列公式 =AVERAGE(IF((E12:O31>H2)*(E12:O31<H1),E12:O31)) 公式寫入後,按ctrl-shift-enter 儲存格內的公式會變成 {=AVERAGE(IF((E12:O31>H2)*(E12:O31<H1),E12:O31))} 其他就如此這般改成STDEV、MAX、MIN.............. 試試看吧 此文章於 2011-07-06 09:59 AM 被 azteq 編輯. |
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jul 2004 您的住址: Verthandi的懷裡
文章: 766
|
引用:
我照樣輸入之後好像無法使用 怪哉(檢查... 還有多問一下,那個大括號{ },有什麼用途呀? |
|
|
|
|
Advance Member
![]() ![]() 加入日期: Dec 2002
文章: 441
|
引用:
要先把 =AVERAGE(......... 這些東西key進去,key好後,不是按 enter 而是按 Ctrl + Shift + Enter ,公式兩旁便會出現大括弧將陣列公式包起來 那個大括號只是用來表示,這個是陣列公式 陣列公式提供陣列來暫存待處理的數據, 再配合你使用的函數作計算 以底下這個為例 {=AVERAGE(IF((E12:O31>H2)*(E12:O31<H1),E12:O31))} 換作寫成vba, 大概像下面的樣子 (在下很久沒寫vba,而且本來程度就很有限 所以隨便湊一湊,看得懂大概的意思就好) set A1() as array B1=0 for I = 1 to 11 ' O-E=11 for J = 1 to 20 if cell(I,J) > H2 and cell(I,J) < H1 A1(B1)= cell(I,J) B1=B1+1 endif next J next I C1=average(A1(0)+A1(1).....A1(B1-1)) 此文章於 2011-07-06 06:08 PM 被 azteq 編輯. |
|
|
|
|
Advance Member
![]() ![]() 加入日期: Dec 2002
文章: 441
|
|
|
|
|
Junior Member
![]() ![]() ![]() 加入日期: Jul 2004 您的住址: Verthandi的懷裡
文章: 766
|
還有這種寫法,受教了
![]() |
|
|
|
*停權中*
加入日期: Nov 2010
文章: 116
|
引用:
感謝 對於vba的寫法也給您參考一下 一般輸入公式或值可以用以下這兩種指令 CExcel.Range("e5").Formula = CExcel.Range("e5").Value = CExcel是你指定的活頁,Range是放你要填入什麼位置 陣列函數是用這個指令 CExcel.Range("e2").FormulaArray = 他就會把你填入的公式以陣列公式的方式入 |
|
|
|