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)