Excel 如何替换列中单元格中的文本?

Excel 如何替换列中单元格中的文本?,excel,vba,Excel,Vba,我正在构建一个工具来解析/格式化粘贴的数据,并将其复制到一个更有组织的表中 最后一个表有4列,第3列是电子邮件地址 我想将电子邮件地址列中的(@gmail.com)替换为显示“外部电子邮件地址”的值。输入新数据时,表的大小会发生变化 以我有限的知识,我没有成功。如果你能展示你所说的“很多事情已经完成了”以及你迄今为止所取得的成就,那就太好了,但是 Dim lastRow as long, ws as Worksheet, i as long Set ws = ThisWorkBook.Work

我正在构建一个工具来解析/格式化粘贴的数据,并将其复制到一个更有组织的表中

最后一个表有4列,第3列是电子邮件地址

我想将电子邮件地址列中的(@gmail.com)替换为显示“外部电子邮件地址”的值。输入新数据时,表的大小会发生变化


以我有限的知识,我没有成功。

如果你能展示你所说的“很多事情已经完成了”以及你迄今为止所取得的成就,那就太好了,但是

Dim lastRow as long, ws as Worksheet, i as long

Set ws = ThisWorkBook.Worksheets("YourWorksheetName")

' Suppose your third column is column C
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
' Suppose the first row is the header, column C = 3 in terms of index
For i = 2 To lastRow
    If ws.Cells(i,3).Value Like "*@gmail.com*" Then
         ws.Cells(i,3).Value = "external email address"
    End If
Next i
您可以像这样尝试使用InStr()

Sub ReplaceExternalEmails()

    'ofc sheet's and listObj's indexes or "names" matters and depends on your case, try to figure these out
    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    'Loop through 3rd column to check for external mails
    Dim cel As Range
    For Each cel In someTable.DataBodyRange.Columns(3).Cells
        If InStr(cel.Value, "@gmail.com") Then
            cel.Value = "external email address"
        End If
    Next cel

End Sub
Sub ReplaceExternalEmails()

    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    Dim fnd As Variant: fnd = "*@gmail.com"
    Dim rpl As Variant: rpl = "external email address"

    someTable.DataBodyRange.Columns(3).Replace _
        What:=fnd, Replacement:=rpl

End Sub
你也可以加上

cel.ClearFormats
内为循环,或其他一些格式化,所以它不会保持蓝色下划线,如果你关心的话

另一种方法(对于较大的数据集可能更快)是替换值,这相当于CTRL+F/Replace这样的方法

Sub ReplaceExternalEmails()

    'ofc sheet's and listObj's indexes or "names" matters and depends on your case, try to figure these out
    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    'Loop through 3rd column to check for external mails
    Dim cel As Range
    For Each cel In someTable.DataBodyRange.Columns(3).Cells
        If InStr(cel.Value, "@gmail.com") Then
            cel.Value = "external email address"
        End If
    Next cel

End Sub
Sub ReplaceExternalEmails()

    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    Dim fnd As Variant: fnd = "*@gmail.com"
    Dim rpl As Variant: rpl = "external email address"

    someTable.DataBodyRange.Columns(3).Replace _
        What:=fnd, Replacement:=rpl

End Sub

若你们能展示你们所说的“很多事情已经完成了”的意思,以及你们迄今为止所取得的成就,那个将是一件好事,但

您可以像这样尝试使用InStr()

Sub ReplaceExternalEmails()

    'ofc sheet's and listObj's indexes or "names" matters and depends on your case, try to figure these out
    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    'Loop through 3rd column to check for external mails
    Dim cel As Range
    For Each cel In someTable.DataBodyRange.Columns(3).Cells
        If InStr(cel.Value, "@gmail.com") Then
            cel.Value = "external email address"
        End If
    Next cel

End Sub
Sub ReplaceExternalEmails()

    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    Dim fnd As Variant: fnd = "*@gmail.com"
    Dim rpl As Variant: rpl = "external email address"

    someTable.DataBodyRange.Columns(3).Replace _
        What:=fnd, Replacement:=rpl

End Sub
你也可以加上

cel.ClearFormats
内为循环,或其他一些格式化,所以它不会保持蓝色下划线,如果你关心的话

另一种方法(对于较大的数据集可能更快)是替换值,这相当于CTRL+F/Replace这样的方法

Sub ReplaceExternalEmails()

    'ofc sheet's and listObj's indexes or "names" matters and depends on your case, try to figure these out
    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    'Loop through 3rd column to check for external mails
    Dim cel As Range
    For Each cel In someTable.DataBodyRange.Columns(3).Cells
        If InStr(cel.Value, "@gmail.com") Then
            cel.Value = "external email address"
        End If
    Next cel

End Sub
Sub ReplaceExternalEmails()

    Dim someTable As ListObject
    Set someTable = Sheets(1).ListObjects(1)

    Dim fnd As Variant: fnd = "*@gmail.com"
    Dim rpl As Variant: rpl = "external email address"

    someTable.DataBodyRange.Columns(3).Replace _
        What:=fnd, Replacement:=rpl

End Sub

欢迎来到堆栈溢出。请注意,因为这不是免费的代码编写服务,所以您有必要展示您迄今为止所做的尝试以及遇到的问题或错误(通过展示代码),或者至少展示您所做的研究和努力。否则它只是要求我们为你做所有的工作。阅读可以帮助你改进你的问题。阅读也可能有帮助。欢迎使用堆栈溢出。请注意,因为这不是免费的代码编写服务,所以您有必要展示您迄今为止所做的尝试以及遇到的问题或错误(通过展示代码),或者至少展示您所做的研究和努力。否则它只是要求我们为你做所有的工作。阅读可以帮助你改进你的问题。阅读也可能有帮助。第一组代码工作得很好!!当我说大部分工作已经完成时,它主要只是移动列并旋转数据。当我到达这一部分时,我撞到了一堵砖墙。但是,由于某些原因,我不得不删除“.DataBodyRange”位,因为VBA不喜欢它。非常感谢你!您的欢迎:(BTW.DATABODYORY LIT BIT指的是您想要使用的范围。因此,只有SoeTable的身体-不包括标题。如果您用Real. Read替换它,它将考虑包括头、总计等在内的所有内容)。在这里您可以找到详细信息。第一组代码工作得很好!!当我说大部分工作已经完成时,它主要只是移动列并旋转数据。当我到达这一部分时,我撞到了一堵砖墙。但是,由于某些原因,我不得不删除“.DataBodyRange”位,因为VBA不喜欢它。非常感谢你!您的欢迎:(BTW.DATABODYORY LIT BIT指的是您想要使用的范围。因此,只有SoeTable的身体-不包括标题。如果您用Real. Read替换它,它将考虑包括头、总计等在内的所有内容)。在这里您可以找到详细信息。