在excel中将日期错误地转换为所需格式(日/月/年)

在excel中将日期错误地转换为所需格式(日/月/年),excel,excel-dates,Excel,Excel Dates,嗨,我知道这里有很多类似的问题,但我仍然面临这个问题: 我有一个表,其中有一列名为Dates,其中一些值如下所示: 2021年12月2日 2021年11月2日 2021年10月2日 2021年9月2日 2021年8月2日 2021年7月2日 2021年6月2日 2021年5月2日 2021年4月2日 2021年3月2日 2021年2月2日 2021年1月2日 21年1月31日 21年1月30日 当我尝试通过选择“类别”作为日期或添加自定义类别作为dd/mm/yy来使用格式单元格进行转换时,e

嗨,我知道这里有很多类似的问题,但我仍然面临这个问题: 我有一个表,其中有一列名为Dates,其中一些值如下所示:

2021年12月2日
2021年11月2日
2021年10月2日
2021年9月2日
2021年8月2日
2021年7月2日
2021年6月2日
2021年5月2日
2021年4月2日
2021年3月2日
2021年2月2日
2021年1月2日
21年1月31日
21年1月30日

当我尝试通过选择“类别”作为日期或添加自定义类别作为dd/mm/yy来使用格式单元格进行转换时,excel将dd/mm/YYYY值视为mm/dd/yy。 例如,excel没有将第一行视为2月12日,而是将其视为12月2日

我还尝试通过转到数据并将其设置为DMY将文本转换为列,但这并没有解决问题

非常感谢您的帮助。

假设:

  • 所有日期最初都是DMY
  • 您的windows区域设置短日期格式为MDY
你需要转换到一个合适的日期

  • 如果该值为文本,则它将采用DMY格式,您可以提取节并转换为日期
  • 如果该值是数字,则表示转换不正确,需要反转月和日部分
鉴于这些假设,以下公式应适用

我正在使用Excel Office 365 Windows版本中提供的
LET
FILTERXML
函数

如果您没有该版本的Excel,您仍然可以使用公式执行此操作,但这将更加复杂。也可以使用VBA

=IFERROR(DATE(YEAR(A1),DAY(A1),MONTH(A1)),
  LET(x,FILTERXML("<t><s>" & SUBSTITUTE(A1,"/","</s><s>")& "</s></t>","//s"),
         DATE(INDEX(x,3)+IF(INDEX(x,3)<30,2000),INDEX(x,2),INDEX(x,1))))
=IFERROR(日期(年(A1)、日(A1)、月(A1)),
让(x,FILTERXML(“&replacement(A1,“/”,“)&“//s”),
日期(指数(x,3)+如果(指数(x,3)假设:

  • 所有日期最初都是DMY
  • 您的windows区域设置短日期格式为MDY
你需要转换到一个合适的日期

  • 如果该值为文本,则它将采用DMY格式,您可以提取节并转换为日期
  • 如果该值是数字,则表示转换不正确,需要反转月和日部分
鉴于这些假设,以下公式应适用

我正在使用Excel Office 365 Windows版本中提供的
LET
FILTERXML
函数

如果你没有那个版本的Excel,你仍然可以用公式来做,但它会更复杂。或者你可以用VBA

=IFERROR(DATE(YEAR(A1),DAY(A1),MONTH(A1)),
  LET(x,FILTERXML("<t><s>" & SUBSTITUTE(A1,"/","</s><s>")& "</s></t>","//s"),
         DATE(INDEX(x,3)+IF(INDEX(x,3)<30,2000),INDEX(x,2),INDEX(x,1))))
=IFERROR(日期(年(A1)、日(A1)、月(A1)),
让(x,FILTERXML(“&replacement(A1,“/”,“)&“//s”),
日期(索引(x,3)+如果(索引(x,3)尝试以下公式:

= DATE( YEAR(A1), DAY(A1), MONTH(A1) )
如果这些值有任何
空格
字符,请尝试以下操作:

= DATE( YEAR(TRIM(A1)), DAY(TRIM(A1)), MONTH(TRIM(A1)) )
试试这个公式:

= DATE( YEAR(A1), DAY(A1), MONTH(A1) )
如果这些值有任何
空格
字符,请尝试以下操作:

= DATE( YEAR(TRIM(A1)), DAY(TRIM(A1)), MONTH(TRIM(A1)) )


数据从哪里来?你是从外部导入的吗?我正在做一个评估,他们给了一张excel表格,上面有奇怪的日期。作为评估的一部分,我必须将日期设置为正确的格式(dd/mm/yy)。这些值是文本还是数字?@EEM问了一个关键问题——首先检查这些是实际日期(Excel中的数字)或文本。同时检查Excel和操作系统中的日期格式选项。如果这些日期是文本日期而不是数字日期,则使用两种不同的规则(日/月和月/日)对其进行格式设置,您正处于一个受伤的世界,需要手动修复。数据来自何处?您是否从外部来源导入数据?我正在进行评估,他们给了一张excel表格,上面有这些奇怪的日期。作为评估的一部分,我必须将日期设置为正确的格式(dd/mm/yy)。这些值是文本还是数字?@EEM问了一个关键问题-首先检查这些值是实际日期(Excel中的数字)还是文本。还要检查Excel和操作系统中的日期格式选项。如果这些是文本日期而不是数字日期,则使用两种不同的规则(日/月和月/日)进行格式设置,您处于受伤的世界中,需要手动修复。它会转换具有(YYYY)值的值(如2021年12月2日),但不会转换为31/01/21(YY).但我想我可以使用if error函数。多亏了很多,我错过了最后两行…这两行是如何被你的系统转换的?我的意思是,对于像31/01/21这样的日期,它们的格式已经是正确的。问题在于像2021年12月2日这样的日期。所以发生的是2021年12月2日,它转换成了2月12日1如我所愿,但对于21年1月31日,它显示为#值。因此我使用了iferror函数。因此,我的公式现在是=iferror(日期(年(修剪(A2))、天(修剪(A2))、月(修剪(A2))、A2)。忘了提及一些非常重要的内容。它会转换那些具有(YYYY)值的值,如2021年2月12日,但不会转换为21年1月31日(YY).但我想我可以使用if error函数。多亏了很多,我错过了最后两行…这两行是如何被你的系统转换的?我的意思是,对于像31/01/21这样的日期,它们的格式已经是正确的。问题在于像2021年12月2日这样的日期。所以发生的是2021年12月2日,它转换成了2月12日1如我所愿,但对于21年1月31日,它显示为#值。因此我使用了iferror函数。因此我的公式现在是=iferror(日期(年)(修剪(A2)),天(修剪(A2)),月(修剪(A2)),A2)。忘记提到一些非常重要的事情。