分隔单元格中的数据,并复制到另一列

时间:2016-02-16 09:13:45

标签: excel excel-vba date vba

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

我想分隔数据并将日期复制到费用日期列,然后将其余说明粘贴到说明列。< / p>

我的想法是复制数据并粘贴到隐藏列,并使用此代码进行分离。

Sub text2column()

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

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

enter image description here

2 个答案:

答案 0 :(得分: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,因此没有任何损害。

答案 1 :(得分:1)

非常感谢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