我正在尝试在Excel 2016中创建嵌套的IF语句以读取日期值并输出相应的财务月。由于一个财务月对我工作的公司来说是唯一的,因此除了创建自定义功能或对帐单外没有其他可用的选择。
到目前为止,我已经尝试过:
=IF(D2 <= DATEVALUE("28/07/2017"),DATEVALUE("Jul-2017"),
IF(D2 <= DATEVALUE("26/08/2017"),DATEVALUE("Aug-2017"),
IF(D2 <= DATEVALUE("29/09/2017"), DATEVALUE("Sep-2017"),
IF(D2 <= DATEVALUE("27/10/2017"), DATEVALUE("Oct-2017"), 0)))) +
IF(D2 <= DATEVALUE("24/11/2017"), DATEVALUE("Nov-2017"),
IF(D2 <= DATEVALUE("29/12/2017"), DATEVALUE("Dec-2017"),
IF(D2 <= DATEVALUE("26/01/2018"), DATEVALUE("Jan-2018"),
IF(D2 <= DATEVALUE("23/02/2018"), DATEVALUE("Feb-2018"), 0)))) +
IF(D2 <= DATEVALUE("20/03/2018"), DATEVALUE("Mar-2018"),
IF(D2 <= DATEVALUE("27/04/2018"), DATEVALUE("Apr-2018"),
IF(D2 <= DATEVALUE("25/05/2018"), DATEVALUE("May-2018"),
IF(D2 <= DATEVALUE("29/06/2018"), DATEVALUE("Jun-2018"),
IF(D2 <= DATEVALUE("27/07/2018"), DATEVALUE("Jul-2018"),
IF(D2 <= DATEVALUE("24/08/2018"), DATEVALUE("Aug-2018"), 0)))))) +
IF(D2 <= DATEVALUE("28/09/2018"), DATEVALUE("Sep-2018"),
IF(D2 <= DATEVALUE("26/10/2018"), DATEVALUE("Oct-2018"),
IF(D2 <= DATEVALUE("23/11/2018"), DATEVALUE("Nov-2018"),
IF(D2 <= DATEVALUE("28/12/2018"), DATEVALUE("Dec-2018"),
IF(D2 <= DATEVALUE("25/01/2019"), DATEVALUE("Jan-2019"),
IF(D2 <= DATEVALUE("22/02/2019"), DATEVALUE("Feb-2019"),
IF(D2 <= DATEVALUE("29/03/2019"), DATEVALUE("Mar-2019"), 0))))))) +
IF(D2 <= DATEVALUE("26/04/2019"), DATEVALUE("Apr-2019"),
IF(D2 <= DATEVALUE("24/05/2019"), DATEVALUE("May-2019"),
IF(D2 <= DATEVALUE("28/06/2019"), DATEVALUE("Jun-2019"), D2)))
它不起作用-我得到的是数字输出而不是日期。
必须有一种更好/有效的方法。
有人可以推荐另一种方法吗?可以通过VBA中的UDF吗?
编辑-发布范围和所需输出的表格
Start date End date Month
12/30/2017 1/26/2018 Jan-18
1/27/2018 2/23/2018 Feb-18
2/24/2018 3/30/2018 Mar-18
3/31/2018 4/27/2018 Apr-18
4/28/2018 5/25/2018 May-18
5/26/2018 6/29/2018 Jun-18
6/30/2018 7/27/2018 Jul-18
7/28/2018 8/24/2018 Aug-18
8/25/2018 9/28/2018 Sep-18
9/29/2018 10/26/2018 Oct-18
10/27/2018 11/23/2018 Nov-18
11/24/2018 12/28/2018 Dec-18
12/29/2018 1/25/2019 Jan-19
1/26/2019 2/22/2019 Feb-19
2/23/2019 3/29/2019 Mar-19
3/30/2019 4/26/2019 Apr-19
4/27/2019 5/24/2019 May-19
5/25/2019 6/28/2019 Jun-19
答案 0 :(得分:1)
表中的模式是:
这将进行输入,确认它是一个日期,然后查看日期是否在输入月份的最后一个星期五之前,等于或之后。
CSTMonth = Inputs Month
CSTMonth = Inputs Month
CSTMonth = Month after Inputs Month
Option Explicit
Public Function CSTMonth(Target As Range)
If IsDate(Target) Then
Dim LastDay As Date: LastDay = WorksheetFunction.EoMonth(Target, 0)
Dim LastFri As Date: LastFri = LastDay - (Weekday(LastDay + 1) Mod 7)
If Target <= LastFri Then
CSTMonth = Format(Target, "MMM-YY")
Else
CSTMonth = Format(LastDay + 1, "MMM-YY")
End If
End If
End Function
在表中找到模式的好处是,无需使用 {brute force
进行更新。采用您的方法将意味着每个月都要对开始日期和结束日期进行硬编码。
答案 1 :(得分:1)
如果您使用的表格包含每个期间的开始日期,请尝试以下操作:
假设表的起始日期为B2:D25
,日期位于F2:F25
和J2:J25
输入以下公式,以获取G2
中日期的财务期间,然后将其复制到G3:G25
和K2:K25
:
=VLOOKUP(F3,$B$2:$D$25,3,1)
输入以下公式以获取H2
中文本的财务期,然后将其复制到H3:H25
和L2:L25
:
=TEXT(VLOOKUP(F3,$B$2:$D$25,3,1),"mmm-yyyy")
答案 2 :(得分:-1)
我不确定您面临的复杂性,但是要获得每个表所需的结果,您还可以使用更简单的公式
=TEXT(EOMONTH(A2,1),"YY-MMM")
OR
=EOMONTH(A2,1)
并以yy-mmm
格式设置单元格的格式。
其中A2
保存开始日期。