从日期单元格Excel中获取月份和年份

时间:2014-05-29 08:02:29

标签: excel

我想从日期列中隔离monthyear,但此列有两种格式:

2011年5月8日00:59 08-05-2011

如果我想在此列中添加一个新列来隔离月份和年份,例如: 05-2011 ,我该怎么做?

4 个答案:

答案 0 :(得分:11)

尝试使用此公式(如果它不是日期,它将从A1返回值):

=TEXT(A1,"mm-yyyy")

或者这个公式(它更严格,如果#VALUE不是日期,则会返回A1错误):

=TEXT(MONTH(A1),"00")&"-"&YEAR(A1)

答案 1 :(得分:1)

Please try类似于:

=IF(LEN(C1)>10,VALUE(LEFT(C1,FIND(" ",C1,8))),IF(ISTEXT(C1),DATE(RIGHT(C1,4),MID(C1,4,2),LEFT(C1,2)),C1))  

您似乎有三种主要可能的情况:

  1. 以时间为文本的空格分隔日期(例如下面的A1)
  2. 连字符分隔日期为文本(例如下面的A2)
  3. 格式化日期索引(如下面的A4和A5)
  4. 以下ColumnA的格式为General,ColumnB为Date(我的默认设置)。 ColumnC也作为日期,但具有自定义格式以适合您的问题中提到的外观 关于文本格式是否是单元格内容的左对齐或右对齐的线索。

    我建议对上述三种主要病例中的每一种进行单独治疗,因此使用=IF来区分它们。

    案例#1

    这比其他任何一个都长,所以可以通过=LEN来区分长度大于10个字符。
    在这种情况下,我们想要除了最后六个字符之外的所有字符,但为了增加灵活性(例如,如果时间元素包括秒数),我选择从左边而不是从右边开始计数。那么问题是月份名称的长度可能不同,所以我选择查找紧跟年份的空间以指示相关字符数的限制。

    =FIND一起查找" "中的空格(C1),从左边开始的C1内的第八个字符开始,假设为这种情况下,天数将表示为两个字符,月份为三个或更多

    由于= LEFT是一个字符串函数,它返回一个字符串,但是这可以转换为=VALUE的值。

    所以

    =VALUE(LEFT(C1,FIND(" ",C1,8))) 
    

    在此示例中返回40671 - 在Excel’s 1900 date system中,2011年5月5日的日期序列号。

    案例#2

    如果C1的长度不超过10个字符,我们仍然需要区分我选择用=ISTEXT做的文本条目或值条目,以及if条件为TRUE的条目(如对于C2)应用=DATE,它带有三个参数,这里提供:

    =RIGHT(C2,4)  
    

    采用C2的最后四个字符,因此在此示例中为2011

    =MID(C2,4,2) 
    

    从第四个字符开始,取C2的后两个字符,因此在此示例中为05(表示May)。

    =LEFT(C2,2))  
    

    取C2的前两个字符,因此在此示例中为08(表示该月的第8天)。 日期不是文本函数,因此不需要包含在= VALUE中。

    合在一起

    =DATE(RIGHT(C2,4),MID(C2,4,2),LEFT(C2,2)) 
    

    在此示例中也返回40671,但来自Case#1的不同输入。

    案例#3

    很简单,因为已经是日期序列号,所以只需

    =C2  
    

    就足够了。


    将上述内容放在一起,用一个公式涵盖所有三种情况:

    =IF(LEN(C1)>10,VALUE(LEFT(C1,FIND(" ",C1,8))),IF(ISTEXT(C1),DATE(RIGHT(C1,4),MID(C1,4,2),LEFT(C1,2)),C1))  
    
    在ColumnH中应用的

    (格式化为适合OP)或通用格式(以显示值为整数):

    SO23928568 example

答案 2 :(得分:0)

您可以右键单击这些单元格,转到格式,选择自定义,然后键入mm yyyy。

答案 3 :(得分:-2)

我要求提供一份报告,按日显示详细信息,其中日期字段的格式为日期&时间,我只是将日期列的格式更改为“常规”,然后在新列中使用以下公式,

=CONCATENATE(YEAR(C2),MONTH(C2))