拆分大数组公式以在VBA中使用

时间:2014-07-24 06:38:30

标签: vba excel-vba excel

我正在尝试将月份拆分为每周日期,而如果任何特定的周开始日期与假期匹配,则应该将其移至下一个工作日。最终更正日期在突出显示的列中给出。

(无法发布图片或excel表,因为它不允许我成为新手)

在一些帮助下,我已经找到了这样做的数组公式,但由于255个字符限制,这很长并且无法在VBA中使用它

=IF(ISNUMBER(MATCH(C2,$M$2:$M$14,0)),MIN(IF((MMULT(--
  (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))
  =TRANSPOSE($M$2:$M$14)),ROW($M$2:$M$14)^0)=0)*
  (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31))))>C2,
  (MMULT(--
  (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))
  =TRANSPOSE($M$2:$M$14)),ROW($M$2:$M$14)^0)=0)*
  (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))))),C2) 

我需要将其分解为更小版本或部分版本,以便我可以在VBA中使用它。 非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:0)

要避免255字符串限制,您可以声明变量并连接到它,如下所示:

Dim strFormula As String

strFormula = "IF(ISNUMBER(MATCH(C2,$M$2:$M$14,0)),MIN(IF((MMULT(--
    (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))
    =TRANSPOSE($M$2:$M$14)),ROW($M$2:$M$14)^0)=0)*
    (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31))))>C2,"

strFormula = strFormula & "(MMULT(--
    (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))
    =TRANSPOSE($M$2:$M$14)),ROW($M$2:$M$14)^0)=0)*
    (ROW(INDEX($A:$A,DATE(YEAR(C2),1,1)):INDEX($A:$A,DATE(YEAR(C2),12,31)))))),C2)"