Excel 2010:从使用VLOOKUP生成的date的第二个星期二开始

程序: Excel 2010
经验水平:基本

您好,我正在创build一个发票,通过VLOOKUP从其他工作表中提取数据,页面充满了公式和代码(我很高兴),但是我在设置date时遇到问题。

问题:
当我使用公式得到我的“下个月的第一个周二”引用单元格(F3) ,公式不起作用。 (F3)的date是由VLOOKUP生成的,所以我相信我的新公式正在出错,因为它没有“date”,只是代码的结果。

这是我的公式:

 Cell(F3) =IF(TEXT(VLOOKUP($F$2,OrdSum,24,FALSE),"mmm-dd-yyyy")="","",(TEXT(VLOOKUP($F$2,OrdSum,24,FALSE),"mmm-dd-yyyy"))) 

结果: 2014年1月31日(从我的OrdSum每个月手工写入销售月份的最后一天,我不希望它是dynamic的)。

 Cell(A14) =((EOMONTH(F3,0)+1)+7)+CHOOSE(WEEKDAY((EOMONTH(F3,0)+1)),2,1,0,6,5,4,3) 

结果 :#VALUE!

但是,如果我在任何单元格中都有一个硬编码的date,那么这个公式的工作原理将在11/02/2014返回。

即使简单=EOMONTH(F3,1)也不起作用,它会导致#VALUE! 错误。

有没有解决方法? 或者,我还必须在发票上手动编写EOM。

提前致谢。

如果VLOOKUP已经在提取一个date,那么你并不需要TEXT部分(你不需要它,因为如果VLOOKUP返回一个空格, TEXT就会把它转换为00-01-1900 ),这就足够了:

 =IF(VLOOKUP($F$2,OrdSum,24,FALSE)="","",VLOOKUP($F$2,OrdSum,24,FALSE)) 

对于单元格F3。 您只需要通过自定义格式或date格式将F3格式化为mmm-dd-yyyy

编辑:@Barryhoudini本月的第二个星期二有一个更简单的公式。 为了这个信用,他只是在这里详细阐述一下:

 =EOMONTH(F3,0)+15-WEEKDAY(EOMONTH(F3,0)+5) 

将给出该月的第二个星期二的date。 最后5是什么决定了一周中的哪一天。 你也许可以重写这样简单:

 =EOMONTH(F3,0)+15-WEEKDAY(EOMONTH(F3,0)+(7-3)) 

哪里3是星期三。 你可以改变最后的数字来表示这些:

 0 or 7 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday 

下面的公式代替了一些冗长的内容,取消了VLOOKUP(它总是使电子表格变得脆弱)以及任何格式化的考虑。

如果单元格A1包含date,那么

 =1 + EOMONTH(A1,0) + MOD(3 - WEEKDAY(1 + EOMONTH(A1,0)),7) 

返回下个月的第一个星期二的date。 星期二的周日值为3 ,这就是为什么这个字面值出现在MOD(的第一项MOD(

如果你想以周四(周五的价值)为中心,那就写下来

 =1 + EOMONTH(A1,0) + MOD(5 - WEEKDAY(1 + EOMONTH(A1,0)),7)