我有一个电子表格,其列中包含可变数据。此列中的样本单元格具有以下内容。
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号码的列进行文本处理?有什么想法吗?
由于 安迪
答案 0 :(得分:1)
您可以使用两个查找/替换,然后是文本到列:
-*,
-
当我使用宏录制器执行此操作并稍微清理一下时,我得到:
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
希望有所帮助 - 顺便说一下:代码不是超级干净......:)