【问题标题】:Separating data in a cell, and copying to another column分隔单元格中的数据,并复制到另一列
【发布时间】:2016-02-16 09:13:44
【问题描述】:

我有一个名为 说明 的列,其中包含费用说明和费用日期。我从中获取的文件没有正确的费用日期。

我想分离数据并将日期复制到费用日期列,并将剩余的说明粘贴到说明列。

我心中的逻辑是复制数据并粘贴到隐藏列中,并使用此代码进行分隔。

Sub text2column()

selection.TextToColumns Destination:=Range("S1"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 3), Array(6, 1)), TrailingMinusNumbers:=True

但是我需要从具有资源名称(例如 Name1、Name2、Name3 等)的行开始粘贴/覆盖,并保留 不可用 资源并且不触及不可用资源。

【问题讨论】:

  • 十月,是102816homeoffice吗?这将破坏基于固定宽度的文本到列。
  • 不,应该是2016年1月28日,数据是012816home-office
  • 对不起,我很迟钝。我要问的是 Home-Office 之前的 5 位数字是否会变成 6 位数字,例如122516Home - Office 2016 年 12 月 25 日。就此而言,在 2016 年 1 月 1 日的情况下,它们会变成 4 位数字吗?例如1116Home - Office.
  • 不。数字固定为 6 位。 2016 年 1 月 1 日将是 010116home-office

标签: excel date vba


【解决方案1】:

我喜欢您将流程基于当前 Application.Selection 属性的方式。我有一些样板框架用于处理this answer 中的选定单元格。

Sub splitDescription()
    Dim tmp As String, rng As Range

    With Selection
        For Each rng In .Areas
            With rng
                tmp = Cells(.Cells(1).Row, 16383).Address
                .TextToColumns Destination:=.Parent.Range(tmp), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, 3), Array(6, 1))
                .Offset(0, -2) = .Parent.Range(tmp).Resize(.Rows.Count, 1).Value
                .Cells = .Parent.Range(tmp).Resize(.Rows.Count, 1).Offset(0, 1).Value
                .Parent.Range(tmp).Resize(1, 2).EntireColumn.Clear
            End With
        Next rng
    End With
End Sub

我添加了循环通过Range.Areas property。这将允许您在当前选择的不连续单元格范围内循环(例如 A2:A10、A15:A20)。如果您选择了单个单元格块,则它的Areas.Count 属性为 1,因此没有任何损害。

【讨论】:

  • 感谢您购买这款吉普车。我将尝试使用您的代码来解决问题,并将就此向您提供反馈。再次感谢
  • 道歉。但我还不能给出反馈。我仍在解决如何告诉程序留下不可用的资源。一旦我解决了它,我也会发布代码。谢谢:)
【解决方案2】:

非常感谢 Jeeped 提供的精彩代码。 我解决了如何跳过更新具有“不可用”值并提出此代码的行的问题。

Sub splitDescription()
    Dim tmp As String, rng As Range

    With selection
        For Each rng In .Areas
            With rng
                tmp = Cells(.Cells(1).Row, 16383).Address
                .TextToColumns Destination:=.Parent.Range(tmp), DataType:=xlFixedWidth, _
                               FieldInfo:=Array(Array(0, 3), Array(6, 1))
                .Offset(0, -2) = .Parent.Range(tmp).Resize(.Rows.Count, 1).Value
                .Cells = .Parent.Range(tmp).Resize(.Rows.Count, 1).Offset(0, 1).Value
                .Parent.Range(tmp).Resize(1, 2).EntireColumn.Clear
            End With
        Next rng
    End With

    Range("I4").Select
End Sub

Sub findresource()

    Range("C6").Select
    Do While ActiveCell.Value = "Not Available"
    selection.Offset(1, 0).Select
    Loop

    selection.Offset(0, 5).Select
    Range(selection, selection.End(xlDown)).Select

    Call splitDescription
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多