我正在尝试将月份拆分为每周日期,而如果任何特定的周开始日期与假期匹配,则应该将其移至下一个工作日。最终更正日期在突出显示的列中给出。
(无法发布图片或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中使用它。 非常感谢任何帮助。 感谢
答案 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)"