如何使用VBA修改字符串的一部分

时间:2015-10-12 19:15:37

标签: excel-vba excel-2013 vba excel

所以例如(然后声明不正确,我试图找出放在那里的东西):

For i = 1 to 20

If Instr(1, Cells(i, "A"), "@goggle.com") > 0 Then
"@goggle.com" = "@google.com"

Next i

所以,让我们说一下电子邮件" somebody@goggle.com"是在单元格A2中,因此Instr找到" @ goggle.com"在A2。如果我想将@ goggle.com更改为@ google.com,我该怎么做?

我的目标是找到常见的电子邮件域拼写错误并进行修复。

2 个答案:

答案 0 :(得分:1)

查看Replace声明。

在这种情况下:

Replace(Cells(i, "A"), "@google.com", "@gmail.com")

基本上公式说,在这个字符串`Cells(i,“A”)中找到“@ google.com”并将其替换为“@ gmail.com”

这样你就不需要if语句,因为replace函数不会替换它找不到的任何东西。换句话说,如果在字符串中找不到“@ google.com”,它会继续运行并且不返回任何内容。

答案 1 :(得分:1)

要修复代码,您可以使用替换功能,如上所述

For i = 1 To 20

    If InStr(1, Cells(i, "A"), "@goggle.com") > 0 Then

        Cells(i, "A") = Replace(Cells(i, "A"), "@goggle.com", "@google.com")

    End If

Next

但为了提高所有替换效率,请使用Range()。替换方法以获取值和替换列表:

Option Explicit

Public Sub fixColumnSpelling()

    Const FIND_LIST As String = "@goggle.com @yahho.com @test1.com"
    Const REPL_LIST As String = "@google.com @yahoo.com @test2.com"

    Dim totalItems As Long, i As Long, findItems As Variant, replItems As Variant

    findItems = Split(FIND_LIST)
    replItems = Split(REPL_LIST)

    totalItems = UBound(findItems)

    For i = 0 To totalItems     'bulk replecements in col A

        ActiveSheet.UsedRange.Columns(1).Replace _
            What:=findItems(i), _
            Replacement:=replItems(i), _
            LookAt:=xlPart, _
            SearchOrder:=xlByColumns, _
            MatchCase:=False

    Next

End Sub