我有一个PO号列表。它们看起来像(4010059877-TUR36036133或TUR6039716 ## 4010073239)。我需要能够将单元格缩小到仅PO编号,即4010059877编号。我要排除的部分中唯一一致的部分是“ TUR #########”。
我已经研究了排除所有非数字字符的代码,但是某些单元格具有这些“ TUR#”。我进行了查找,并用通配符“ *”代替。我也在网上搜索,没有看到类似的东西。
查找并替换尝试的代码
Sub Replace()
Columns("AJ").Replace What:="TUR*", _
Replacement:="", _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False, _
ReplaceFormat:=False
End Sub
替换所有在TUR ##########后面留下多余数字的非数字字符
Dim finRow As String
finRow = Sheets("Data").Range("A20000").End(xlUp).Row
Set myRange = Sheets("Data").Range("AK2:AK" & finRow)
For Each myCell In myRange
LastString = ""
For I = 1 To Len(myCell.Value)
mT = Mid(myCell.Value, I, 1)
If mT Like "[0-9]" Then
tString = mT
Else
tString = ""
End If
LastString = LastString & tString
Next I
myCell.Value = LastString
Next
我的预期结果是将TUR #########删除并替换为空。
答案 0 :(得分:3)
您可以使用InStr()函数,然后使用它来支持Left,例如:
loc = instr(mycell,"TUR")
val = left(mycell.value,loc-1)
编辑1:
由于SJR的评论,将在位置1找到“ TUR”时添加处理该问题的示例。
loc = instr(mycell,"TUR")
if loc = 1 then
val = ""
else
val = left(mycell.value,loc-1)
end if
编辑2:
Dim val as long 'assumes you will only have a number in the end
val = right(left(mycell.value,12),11)
mycell.value = val
这应该剪掉第一个括号,并且11位PO后的信息没有问题。这甚至可能特定于instr(mycell.value,“ TUR”)为true的情况(一个开关),以防您有其他可能的情况。
答案 1 :(得分:0)
我们也可以尝试进行正则表达式替换:
Dim Regex As System.Text.RegularExpressions.Regex
Dim input As String = "4010059877-TUR36036133"
Dim output As String = Regex.Replace(input, "([0-9]+)-TUR[0-9]+", "$1")
Console.WriteLine(output)
这将输出:4010059877