Excel:从日期字符串中提取数字

时间:2018-01-16 20:00:10

标签: excel vba excel-formula

我有几个格式错误的日期列。我正在尝试将这些列转换为"月","年"和" start_day"列。

以下是一个示例示例:

January 13th, 2018
January 13th-14th 2018
January 5th-7th 2018
January 4th-8th 2018
December 9th-10th 2017
December 2nd-3rd 2017
December 2nd, 2017
December 2nd-3rd 2017
November 18th, 2017
November 18th-20th, 2017
November 17th-19th 2017
November 11th, 2017
November 11th-12th, 2017
November 11th-12th 2017

请注意,有时在日缩写和年份之间有逗号,有时则没有。我想要的输出(日期列)将是:

13
13
5
4
9
2
2
2
18
18
17
11
11
11

我不关心第二个日期(连字符的右侧)。我能够获得LEFT(A1, 3)的月份和RIGHT(A1, 4)的年份。我不能为我的生活弄清楚如何在不诉诸正则表达式的情况下抓住本月右边的第一个数值。有什么想法吗?

5 个答案:

答案 0 :(得分:6)

=IF(ISNUMBER(1*MID(A1,FIND(" ",A1)+2,1)),MID(A1,FIND(" ",A1)+1,2),MID(A1,FIND(" ",A1)+1,1))*1

答案 1 :(得分:2)

VBA解决方案可能是:

Sub test()
    Dim s() As String
    Dim i As Long
    For i = 1 To 14
        'Split text based on spaces
        s = Split(Cells(i, "A").Text)
        'Join bits together and convert to date
        'Val(Left(s(1), 2)) gives the day portion
        'Month and Year are directly from the source
        Cells(i, "B").Value = CDate(Val(Left(s(1), 2)) & " " & s(0) & " " & s(2))
    Next
End Sub

(假设A1:A14中的数据,并将结果放入B1:B14)

答案 2 :(得分:2)

替代解决方案:

=LOOKUP(99,--MID(A1,FIND(" ",A1)+1,{1,2}))

答案 3 :(得分:1)

另一个替代方案:

=AGGREGATE(14,6,--MID(A1,FIND(" ",A1)+1,{1,2}),1)

答案 4 :(得分:0)

您可以使用可以解决此问题的公式;

=DATE(VALUE(RIGHT(A1,4)),VLOOKUP(MID(A1,1,3),$G$1:$H$12,2),MID(A1,FIND(" ",A1)+1,(FIND("t",A1)-FIND(" ",A1)-1)))

这也假设有一个查找表,其中包含JAN,FEB等...以及月份的数量。该表需要按月按字母顺序排序。看起来应该是这样的; 4月4日 8月8日 DEC 12 2月2日 1月1日 7月7日 6月6日 3月3日 5月5日 11月11号 10月10日 9月9日

此外,您还必须进行搜索并替换' nd'与''避免在这里添加一堆额外的条件代码。

我还建议添加第二列日期,这些日期将由' to'填充。可能出现的日期。

希望有所帮助。

格雷格