Tom
Lv 4
Tom 發問時間: 電腦與網際網路軟體 · 7 年前

VBA-.Formula和.FormulaArray的用法。

參考附件︰http://www.funp.net/37873

感謝冰淇淋大大賜正下列程式碼︰

With Sheets(1)

.[P5].Resize(6, 6).Formula="=if((column()-11)=row(),"""",SUMPRODUCT(COUNTIF(OFFSET(INDIRECT(P$3),MATCH($O$3,INDIRECT(P$3),)-1,1,COUNTIF(INDIRECT(P$3),$O$3),),OFFSET(INDIRECT($N5),MATCH($N$4,INDIRECT($N5),)-1,1,COUNTIF(INDIRECT($N5),$N$4),))))"

.[P5].Resize(6, 6).Value =.[P5].Resize(6, 6).Value

.[P14].FormulaArray = "=IF(ROWS(B期)>=ROW(1:1),INDEX(INDIRECT(""_""&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:1)))&"""","""")"

.[P14].Copy .[P15].Resize(8)

.[P14].Resize(9).Value =.[P14].Resize(9).Value

End With

End Sub

問題︰

為什麼函數公式可以作區域陣列,而程式卻不行,必須分多段施作(本格和COPY其餘範圍)?

即下列語法是錯誤的

.[P14].Resize(9).FormulaArray= "=IF(ROWS(B期)>=ROW(1:1),INDEX(INDIRECT(""_""&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:1)))&"""","""")"

請問︰

是程式的硬性規則限制?

還是可以另改程式?

請各位前輩和先進不吝賜教!謝謝!

2 個解答

評分
  • 冰淇
    Lv 6
    7 年前
    最佳解答

    要用區域陣列公式需改為

    .[P14].Resize(9).FormulaArray= "=IF(ROWS(B期)>=ROW(1:9),INDEX(INDIRECT(""_""&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:9)))&"""","""")"

    2014-02-14 07:23:55 補充:

    原公式非區域陣列公式

    ~

    改為區域陣列公式需於[P14]貼上公式

    =IF(ROWS(B期)>=ROW(1:9),INDEX(INDIRECT("_"&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:9)))&"","")

    ~

    [P14]拉到[P22]

    按Ctrl+Shift+Enter才可完成

    2014-02-14 07:25:29 補充:

    ps.我不會區域陣列公式,恰好碰對了

    2014-02-14 15:18:22 補充:

    原公式 非區域陣列公式

    改為區域陣列公式 需於[P14]貼上公式

    =IF(ROWS(B期)>=ROW(1:9),INDEX(INDIRECT("_"&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:9)))&"","")

    [P14] 拉到 [P22]

    按 Ctrl+Shift+Enter 方可 呈現所求

    故 原程式公式需改為 區域陣列公式

    .[P14].Resize(9).FormulaArray= "=IF(ROWS(B期)>=ROW(1:9),INDEX(INDIRECT(""_""&Q$13),SMALL(IF(COUNTIF(A期,B期),ROW(B期),100),ROW(1:9)))&"""","""")"

    參考檔案

    00次群-E2

    http://www.funp.net/923126

  • Tom
    Lv 4
    7 年前

    冰大:早安!

    您太神了!

    敬請上答!謝謝您^^

還有問題?馬上發問,尋求解答。