【问题标题】:How to change 'Aug 29, 2016' date format into dd/mm/yyyy either with formula or VBA如何使用公式或 VBA 将“2016 年 8 月 29 日”日期格式更改为 dd/mm/yyyy
【发布时间】:2017-01-07 19:02:49
【问题描述】:

我有一个包含日期列的文件,其中包含这种格式的日期:

Aug 29, 2016

它被格式化为文本,更改列的格式不会影响它。我需要 DD/MM/YYYY 格式。以前,我在做一个公式

=CONCATENATE(MID(AH2,5,2),"/08/2016")

但是必须将“/08/2016”更改为月份。我正在寻找一种更有效的方法,最好是在宏中,但更动态的公式会有所帮助。有人可以帮忙吗?

【问题讨论】:

    标签: vba excel date excel-formula


    【解决方案1】:

    试试

    =TEXT(DATEVALUE(AH2),"DD/MM/YYYY")
    

    如果日期格式与您的系统语言设置不兼容,那么您应该添加附加功能。以下是针对英语(澳大利亚)的测试,进一步缩短了 YowE3K 的建议..

    =TEXT(--(SUBSTITUTE(MID(A1,5,2),",","")&LEFT(A1,3)&RIGHT(A1,4)),"dd/mm/yyyy")
    

    有时TEXT() 并不是必需的,因为您始终可以使用 excel 更通用的数字格式。因此,您可以将日期转换为值(而不是文本)并应用适当的日期格式。公式就是

    =--(SUBSTITUTE(MID(A1,5,2),",","")&LEFT(A1,3)&RIGHT(A1,4))
    

    【讨论】:

    • 我使用English (Australia) 作为我的位置并且(尽管我们经常以 OP 的格式写入日期)DATEVALUE("Aug 29, 2016") 对我不起作用。使用=TEXT(DATEVALUE(MID(A1,5,2)&" "&MID(A1,1,3)&MID(A1,8,5)),"dd/mm/yyyy") 可能会更好。
    • 实际上,最好使用=TEXT(DATEVALUE(SUBSTITUTE(MID(A1,5,2),",","")&" "&LEFT(A1,3)&" "&RIGHT(A1,4)),"dd/mm/yyyy"),以防万一日期指定为单个数字。
    【解决方案2】:

    除了@YowE3K的回复,我也在用这个啰嗦的解决方案:

    =CONCATENATE(MID(AH2,5,2),"/",IF(LEFT(AH2,3) = "Jan","01",IF(LEFT(AH2,3) = "Feb","02",IF(LEFT(AH2,3) = "Mar","03",IF(LEFT(AH2,3) = "Apr","04",IF(LEFT(AH2,3) = "May","05",IF(LEFT(AH2,3) = "Jun","06",IF(LEFT(AH2,3) = "Jul","07",IF(LEFT(AH2,3) = "Aug","08",IF(LEFT(AH2,3) = "Sep","09",IF(LEFT(AH2,3) = "Oct","10",IF(LEFT(AH2,3) = "Nov","11","12"),"/2016")
    

    但 YowE3K 的更好!

    【讨论】:

    • 另一种不使用许多 IF 的方法是 =CONCATENATE(MID(A1,5,2),"/",TEXT(MATCH(LEFT(A1,3),{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"},0),"00"),"/",RIGHT(A1,4))
    【解决方案3】:

    之前的答案似乎将日期格式作为文本提供给您。如果这适合您的需求,那就太好了。但是,如果您希望它采用 excels 日期/时间格式,您可以使用以下格式。我发现通常使用 excel 格式的日期和/或时间会更好,因为如果您可能想要对日期进行任何形式的进一步操作,例如按时间顺序排序,那么您可以稍后使用更简单的公式按字母顺序排列。

    您将需要完成一系列字符串操作和日期函数。让我们首先假设您的字符串在 AH2 单元格中。为了做到这一点,我们将从最大的单位(年)到最小的单位(天)。您可以按任何顺序执行此操作,因为最终将全部归为一个公式,但对于步骤的细分,最好有一个顺序。

    第 1 步)拉出这一年

    =RIGHT(AH2,4)
    

    这将给我们字符串的最后 4 个字符,在这种情况下是年份。

    第 2 步)退出月份

    =MONTH(DATEVALUE(LEFT(AH2,3)&"-"&1))
    

    这需要前 3 个字符,即您的月份。然后,它通过添加 - 和数字 1 将其转换为 Excel 倾向于将其识别为日期短格式的格式。所以在你的情况下,如果看起来像 8 月 1 日。 Datevalue 将其转换为 excel 日期序列,然后我们将其拉回并从您的情况下为 8 获取月份

    如果上述公式对您不起作用,则可能是由于区域设置。如果是这种情况,您可以使用以下内容:

    =MATCH(LEFT(AH2,3),{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"},0)
    

    如果您使用此替代公式,请务必相应地调整最终公式。

    第 3 步)结束这一天

    =TRIM(MID(AH2,FIND(",",AH2)-2,2))
    

    上面的公式找到第一个逗号,然后返回 2 个字符,然后开始拉下一个 2 个字符。现在,由于我不知道该月的第一天是 01 还是只是 1,它最终可能会抢占 1 前面的空间。修剪功能会删除多余的空间。

    第 4 步)构建日期

    Excel 中的 DATE 函数需要 YEAR、MONTH 和 DAY 并将这些值转换为 excel 日期序列。在这种情况下,我们将转换:

    =DATE(year,month,day)
    

    通过将上面的方程代入以下公式:

    =DATE(RIGHT(AH2,4),MONTH(DATEVALUE(LEFT(AH2,3)&"-"&1)),TRIM(MID(AH2,FIND(",",AH2)-2,2)))
    

    最后一点是确保您的单元格被格式化为日期,而不是常规或其他格式,这将导致日期以整数格式显示。

    使用的公式

    文本/字符串函数

    日期/时间函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多