从excel中删除由*和/分隔的文本字符串

时间:2013-04-05 18:54:24

标签: excel excel-vba excel-formula excel-2010 vba

我有一列包含以下

样本的单元格
a1 = D11F2/J3C2/FENCE*25A/23A/21A/20A
a2 = d11f2/00A/123/d6f2

我想删除任何3位数代码“/ 00A”,它们通常用/分隔,但在A1的情况下它被星号“* 25a”分开

此公式/宏将导致:

a1 = D11F2/J3C2/FENCE
a2 = d11f2/d6f2

感谢所有的帮助!

我尝试使用替代公式,但它只删除了分隔符后的第一个或第二个字符串

2 个答案:

答案 0 :(得分:0)

以下VBA功能似乎符合我的理解:

Function stripThree(s As String)
' find any sequence of three "digits"
' that are separated by either ' ', '*', or '/'
' and remove them, including their leading separator

Dim ii, l, lastGood, lastSep As Integer
Dim retval As String

lastGood = 0
lastSep = 0

For ii = 1 To Len(s)
  l = Mid(s, ii, 1)
  retval = retval & l
  If l = "/" Or l = "*" Or l = " " Then
    If ii - lastSep = 4 Then
      retval = Left(retval, Len(retval) - 5) & l
    End If
    lastSep = ii
  End If
Next ii

' if last "separator" is the end of the string
' we still need to remove the three digit/letter code
If lastSep + 4 = ii Then
  retval = Left(retval, Len(retval) - 4)
End If


stripThree = retval

End Function

此代码的示例:

input:  D11F2/J3C2/FENCE*25A/23A/21A/20A
output: D11F2/J3C2/FENCE

input:  d11f2/00A/123/d6f2
output: d11f2/d6f2

按照问题的规定。

答案 1 :(得分:0)

这里我提供了另一种没有编码或公式的解决方案。每个人都很容易做到这一点。

  1. 选择数据区域。例如。 A1:A20
  2. 按“ Ctrl + H "调用替换功能。
  3. 查找要填充的区域: 查找星标,替换为区域:/ 然后,您可以将所有星号()替换为斜杠(/)

    查找:〜*

    取代:/

    对于垫片更换,使用相同的方式,空间只是tpye" &#34 ;.没有",没有必要〜。

    查找:(< - 有间隔符)

    取代:/

  4. 再次按Ctrl + H.

    查询:/ ??? /

    替换:/

  5. 现在你替换了除/ xxx后缀之外的所有/ 3位数字 5.使用过滤器选择后缀为/ xxx

    的代码

    过滤器:* / ???

    单独处理。也许还需要一个公式: =左(A1,len(A1)-4)