Excel 宏中的“文本到列”将24小时转换为12小时格式
我制作了一个宏,它执行文本到列的功能(将存储在一列中的日期和时间划分为另外两列,一列用于日期,一列用于时间) 但是,当我直接在Excel中执行此功能时,我会收到所需的输出:24小时格式的日期+时间,但当我运行与宏记录完全相同的过程时,输出是:12小时格式的日期+时间。使用AM/PM标记创建附加的第三列。宏对少数单元格正常工作,但对少数单元格无效 原始文件: 不带宏的输出(这就是我需要带宏的输出的方式): 带有宏的输出: 使用宏“> 你能建议我如何解决这个问题吗Excel 宏中的“文本到列”将24小时转换为12小时格式,excel,vba,Excel,Vba,我制作了一个宏,它执行文本到列的功能(将存储在一列中的日期和时间划分为另外两列,一列用于日期,一列用于时间) 但是,当我直接在Excel中执行此功能时,我会收到所需的输出:24小时格式的日期+时间,但当我运行与宏记录完全相同的过程时,输出是:12小时格式的日期+时间。使用AM/PM标记创建附加的第三列。宏对少数单元格正常工作,但对少数单元格无效 原始文件: 不带宏的输出(这就是我需要带宏的输出的方式): 带有宏的输出: 使用宏“> 你能建议我如何解决这个问题吗 Selection.TextT
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=True, Other:=False, FieldInfo:= _
Array(Array(1, 4), Array(2, 1)), TrailingMinusNumbers:=True
我认为这是宏录制器错误。请尝试以下代码:
Sub ExtractTime()
'
' Extract time from date
'
'
Dim Target As Range
For Each Target In Selection
If IsDate(Target) Then
Target.Offset(0, 1).Value = Target.Value - Int(Target.Value)
Target.Offset(0, 1).NumberFormat = "HH:MM:SS"
Target.Value = Int(Target.Value)
End If
Next
End Sub
这似乎是论坛上已经提出的一个已知问题。无论如何,从
数据类型:=xlDelimited
切换到数据类型:=xlFixedWidth
似乎可以做到这一点:
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
TrailingMinusNumbers:=True
结果是:
我觉得您的Windows区域设置是MDY,CSV文件的格式是DMY 发生了什么:
12的日期被解释为字符串,并且没有附加D
AM/PM
TTC
时,“实际日期”有两个空格,第三列中的AM/PM
也有两个空格。“字符串”只有一个空格,因此在显示时进行拆分
被解释为日期的日期可能被错误地解释。换句话说,Excel认为您的1-10-2019
是2019年1月10日
,而它应该是2019年10月1日
除了复杂的VBA例程外,解决此问题的方法是正确导入数据,以便在数据到达工作表之前正确解释日期
您可以使用旧版导入向导或Power Query执行此操作
使用其中一种方法,您可以在空格上拆分,并指定日期为DMY,然后按照您的意愿格式化日期和时间。我知道它很旧,但如果有人有相同的问题,下面的代码可以解决它:
FieldInfo:=Array(Array(1, 4), Array(2, 2), Array(3,9))
这部分代码表示第1列是日期,第2列(小时)是文本,第3列(如果将显示为am/pm)被跳过。这对我很有用。您可以添加尽可能多的数组()即使没有可跳过的列,也可以随意设置。然后在文本到列之后添加一行,将日期时间设置为首选格式。文本到列之后,数据分为三列。因此,在AM/PM位于同一第二列以进行时间标识之前,格式设置不起作用。短数据的Windows区域设置是什么e格式?MDY或DMY?是使用文本编辑器打开时的实际CSV文件,与“原始数据”相同“?嗨,谢谢你的回复。不幸的是,它不起作用。谢谢你的更新,蒙蒂。我想知道为什么它对你不起作用——正如你在我的截图上看到的,它对我起作用了。在运行宏之前是否选择了整个列A?结果是什么(宏是否返回错误,或者是否运行但输出不正确)?