我想遍历一个列并在每个单元格中提取一个子字符串(在我的例子中,"代码:")
我想遍历每个单元格并运行公式。基本上删除列的每个单元格中的所有内容,但代码除外。
我知道如何使用以下公式将字符串提取到另一列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
答案 0 :(得分:1)
您的代码中有两个主要错误:
.Value
没有With
块来定义哪个对象是Value
(正如PeterT在评论中指出的那样),以及重构代码:
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)