使用Mid和Excel中的查找(VBA)提取子字符串并更改单元格值

时间:2017-03-04 20:28:04

标签: excel vba excel-vba

我想遍历一个列并在每个单元格中提取一个子字符串(在我的例子中,"代码:")

enter image description here

我想遍历每个单元格并运行公式。基本上删除列的每个单元格中的所有内容,但代码除外。

我知道如何使用以下公式将字符串提取到另一列B中: = MID(A2,FIND("代码:",A2,1),23)

...但是我想在同一个单元格中进行。我在vba中尝试了这个代码,但不知道我做错了什么:

For Each cell In Range("A:A") cell.Value = Mid(.Value, InStr(1, .Value, "Code:"), 23) Next

1 个答案:

答案 0 :(得分:1)

您的代码中有两个主要错误:

  • 使用.Value没有With块来定义哪个对象是Value(正如PeterT在评论中指出的那样),以及
  • 尝试处理A列中的每个单元格,其中很多(大多数?)根本不包含任何值,绝对不是您要查找的字符串。

重构代码:

Dim CodeExists As Long
'Only run the loop across cells that contain data:
For Each cell In Range("A1", Cells(Rows.Count, "A").End(xlUp))
    With cell
        CodeExists = InStr(1, .Value, "Code:")
        'Check that "Code:" exists
        If CodeExists > 0
            .Value = Mid(.Value, CodeExists, 23)
        End If
    End With
Next

而且,正如加里的学生问的那样,你为什么要用23? “代码:xxxx-xxxx-xxxx”是20个字符长,而不是23个字符,所以你抓住的字符比我想象的要多3个。

P.S。如果您甚至不希望将“代码:”保留在最终结果中,则可以将Mid语句更改为:

            .Value = Mid(.Value, CodeExists + 6, 14)