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

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

2011年5月08日00:5908-05-2011

如果我想有一个新的专栏来隔离这个专栏的月份和年份,如: 05-2011 ,我该怎么做?

试试这个公式(如果它不是date的话,它会从A1返回值):

 =TEXT(A1,"mm-yyyy") 

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

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

请尝试如下所示:

 =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. 空格分隔date和时间作为文本(例如下面的A1)
  2. 以文字为单位的连字符分隔date(例如下面的A2)
  3. 格式化date索引(如下面的A4和A5)

下面的ColumnA被格式化为General和ColumnB作为date(我的默认设置)。 ColumnC也作为date,但与自定义格式,以适应您的问题中提到的外观。
关于文本格式是否是单元格内容的左alignment或右alignment的线索。

我build议对上述三个主要案例分别进行处理,所以用= IF来区分它们。

情况1

这比其他任何时间都长,因此可以被区分为具有大于10个字符的长度,其中= LEN 。
在这种情况下,除了最后六个字符之外,我们需要所有的字符,但是为了增加灵活性(例如,如果时间元素包括秒),我select从左边算起,而不是从右边算起。 问题在于月份名称的长度可能会有所不同,所以我select了紧跟在年份之后的空格来表示相关字符数量的限制。

这与= FIND在C1 寻找一个空格( " " ),从C1左边的第八个字符开始计算,假设在这个情况下,date将被表示为两个字符,而月份则表示为三个或更多

由于= LEFT是一个string函数,它返回一个string,但是这可以被转换为= VALUE值 。

所以

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

在这个例子中返回40671 – 在Excel的1900年date系统中的date序列号为2011年5月5日。

案例#2

如果C1的长度不超过10个字符,我们仍然需要区分一个文本条目或一个我select使用的值条目= ISTEXT ,并且if条件为TRUE(对于C2)apply = DATE这需要三个参数,这里提供:

 =RIGHT(C2,4) 

截取C2的最后四个字符,因此在本例中为2011

 =MID(C2,4,2) 

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

 =LEFT(C2,2)) 

取C2的前两个字符,因此在这个例子中是08 (代表该月的第八天)。 date不是文本函数,所以不需要包含在= VALUE中。

放在一起

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

在这个例子中也返回40671 ,但是来自情况1的不同input。

案例#3

很简单,因为已经有一个date序列号,所以只是

 =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)) 

(在ColumnF中应用)(适用于OP的格式)或在ColumnH中以通用格式(显示值为整数)

SO23928568的例子

你可以右键单击这些单元格,select格式,select自定义,然后inputmm yyyy。