Excel 2010:从单元格的文本到列的条带子条带

时间:2016-03-24 14:03:25

标签: excel vba excel-2010

我有一个电子表格,其列中包含可变数据。此列中的样本单元格具有以下内容。

P5V010000167908-PBD-12300026-01,P5V010000167904-PBD-12300026-01,P5V010000167906-PBD-12300026-01,P5V000000581894-UNDEFINED,P5V000000581895-UNDEFINED,P5V000000581896 -

我想去除每个P5V号码(例如P5V010000167908,P5V010000167904,P5V010000167906等)并将它们放入本栏右侧各自的列中。

P5V编号始终以P5V开头,长度始终为15个字符。如何只对P5V号码的列进行文本处理?有什么想法吗?

由于 安迪

2 个答案:

答案 0 :(得分:1)

您可以使用两个查找/替换,然后是文本到列:

  1. 用空格替换-*,
  2. 用空格替换-
  3. 使用空格分隔符
  4. 使用文本到列进行拆分

    当我使用宏录制器执行此操作并稍微清理一下时,我得到:

    Sub Macro2()
        With ActiveSheet.Columns("A:A")
            .Replace What:="-*,", Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            .Replace What:="-", Replacement:="", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
                Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
                :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
                TrailingMinusNumbers:=True
        End With
    End Sub
    

答案 1 :(得分:0)

您只需将其插入VBA模块即可创建以下新UDF(用户自定义函数),然后在字符串右侧的单元格中使用它增加'n'参数。
例如。如果字符串位于单元格C4中,则D4的公式为=ExtractP5V($C$4; 1)E4的公式为=ExtractP5V($C$4; 2),依此类推。

Function ExtractP5V(str, n) As String
    Dim curStart As Integer
    curStart = 1
    Dim i As Integer
    For i = 1 To n Step 1
        Dim nextP5VPos As Integer
        nextP5VPos = InStr(curStart, str, "P5V")
        If nextP5VPos = 0 Then
            ExtractP5V = "-"
            Exit Function
        End If
        If i = n Then
            ExtractP5V = Mid(str, nextP5VPos, 15)
            Exit Function
        End If
        curStart = nextP5VPos + 1
    Next i
End Function

希望有所帮助 - 顺便说一下:代码不是超级干净......:)