文本到列日期格式问题

时间:2021-03-29 03:56:11

标签: excel vba

我目前在尝试将包含时间和日期、分钟和秒信息的列重新格式化为时间和日期格式时遇到问题,然后我可以使用过滤器将最旧到最新等重新排序。< /p>

这是单元格条目的示例

24/03/2021 10:30:35:540

现在,如果我使用宏记录器来记录我选择所需的列并使用文本到列功能>固定宽度,将列分隔线设为 16 并选择常规作为列数据格式,我最终会得到单元格条目如下所示,它适用于过滤。

24/03/2021  10:30:00 AM

一旦停止录制宏并查看我在 VBA 中得到的信息:

Columns("P:P").Select
    Selection.TextToColumns Destination:=Range("P1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(16, 1)), TrailingMinusNumbers:=True

我的问题是,当我尝试将此代码作为宏运行时,它会影响日期,请参阅下面的说明,它似乎只影响可以将格式交换为美国化的日期?

例如原始单元格包含 2021 年 3 月 7 日

07/03/2021 05:46:45:328

当手动使用文本到列时,它可以,但是当使用 VBA 运行上面的代码时,日期和月份转置,下面是分成两列的结果,3 和 7 交换了,现在日期是 7 月 3 日

3/07/2021 5:46  :45:328     

如果我不需要,我真的不需要使用文本到列功能,但是如果没有它,我很难将单元格转换为日期和时间格式。

例如,也尝试过 =LEFT(P2,16),然后将列重新粘贴为值,然后尝试使用格式单元格 > 自定义 > d/mm/yyyy h:mm,但这不起作用。

如果有人有任何我希望听到的其他建议?希望能够通过 VBA 运行某些东西,作为更大的宏集的一部分,重点是能够通过 VBA 完成它。

2 个答案:

答案 0 :(得分:0)

Array(0, 1)Array(1,4) 更改为 DMY 以获取 Columns("P:P").TextToColumns Destination:=Range("P1"), _ DataType:=xlFixedWidth, FieldInfo:=Array(Array(1,4), Array(16, 1)), _ TrailingMinusNumbers:=True

如果您使用以下设置录制宏,您将获得以上代码。

enter image description here

您也不需要 SELECT 列。试试这个

functions:
  stream-function:
    handler: src/stream-handler/stream.handler
    memorySize: 1024 #in MB, also control CPU throughput
    timeout: 31 #in seconds, match with downstream to avoid concurrent request
    events:
      - stream:
          type: kinesis
          arn:
            Fn::GetAtt: [HagoStream, Arn]
          batchSize: 1
          parallelizationFactor: 2
          Id: "my cloud watch rule name"
          InputTransformer: {
               InputTemplate: '{"uniqueId": "96c80428-14fe-c8d0-f6e3-639384992391"}',
                InputPathsMap: {
                  id: '$.uniqueId'
                }
            }
          maximumRetryAttempts: 2
          destinations:
            onFailure:
              arn:
                Fn::GetAtt: [HagoFailedQueue, Arn]
              type: sqs

    environment:
      DLQ_URL:
        Ref: HagoDlqQueue

注意:不幸的是,这不是 100% 可靠的。 VBA“非常以美国为中心”:D

答案 1 :(得分:0)

考虑使用 Power Query 解决方案(并且,如果您的数据最初来自 CSV 文件,则可以将该算法合并并用作导入过程的一部分)。

  • 通过用小数替换最后的冒号来保留小数秒:
    • 在最后一个 : 冒号处拆分

enter image description here

  • 然后合并(重新加入)使用 . 小数作为分隔符

enter image description here

  • 更改数据类型使用区域设置并选择 English(European)datetime 之类的内容
    • 右键单击该列访问此对话框

enter image description here

M 代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Split Column by Delimiter" = Table.SplitColumn(Source, "Timestamp", 
            Splitter.SplitTextByEachDelimiter({":"}, QuoteStyle.Csv, true), {"Timestamp.1", "Timestamp.2"}),
    #"Merged Columns" = Table.CombineColumns(
            Table.TransformColumnTypes(
                #"Split Column by Delimiter", {{"Timestamp.2", type text}}, "en-US"),
                    {"Timestamp.1", "Timestamp.2"},Combiner.CombineTextByDelimiter(".", QuoteStyle.None),"Timestamp"),
    
    #"Changed Type with Locale" = Table.TransformColumnTypes(#"Merged Columns", {{"Timestamp", type datetime}}, "en-150")
in
    #"Changed Type with Locale"

enter image description here