Como excluo um texto específico em várias células de uma só vez?

1

Eu tenho uma lista enorme de endereços de e-mail; mas apenas para simplificar as coisas eu estou lidando com 3 - 10 endereços de e-mail que são digitados em 1 célula e não consigo MASS deletar os específicos. Existe alguma maneira que eu possa excluir um endereço de e-mail específico da célula, GIVEN que eu tenho uma lista de endereços de e-mail específicos que eu quero excluir. É uma questão de encontrar duplicados e excluir ou há mais para isso?

Elaborar ::

na célula A2 eu tenho [email protected] [email protected] [email protected] [email protected]

na célula A3 eu tenho [email protected] [email protected] [email protected] [email protected]

Na célula H1 até H5 eu tenho [email protected] [email protected] [email protected] [email protected] [email protected] (cada endereço de e-mail está em células individuais )

Existe alguma maneira de excluir um endereço de e-mail específico de A2 e A3, de modo que só me resta [email protected], [email protected] e [email protected]?

Informações adicionais: Estou usando o Excel para Mac 2011

Qualquer ajuda será muito apreciada.

Obrigado!

    
por Jase 07.07.2015 / 15:29

3 respostas

0

Faça sua pergunta de acompanhamento - Posso executar essa macro mais rapidamente? - Estou enviando minha resposta aqui e votando para fechar essa questão como uma duplicata.

Se eu entendi, você quer pegar todos os valores da coluna H e deletá-los da coluna E? Eu faria isso com alguns arrays para acelerar -

Option Explicit
Sub DoTheThing()
Application.ScreenUpdating = False
Dim lastrow As Integer
'Find last row in column H to size our array
lastrow = ActiveSheet.Cells(Rows.Count, "H").End(xlUp).row

'Declare the array and then resize it to fit column H
Dim varkeep() As Variant
ReDim varkeep(lastrow - 1)

'Load column H into the array
Dim i As Integer
For i = 0 To lastrow - 1
    varkeep(i) = Range("H" & i + 1)
Next

Dim member As Variant
'find last row in column E
lastrow = ActiveSheet.Cells(Rows.Count, "E").End(xlUp).row

'loop each cell in column E starting in row 2 ending in lastrow
For i = 2 To lastrow
    'Make a new array
    Dim myArray As Variant
    'Load the cell into the array
    myArray = Split(Cells(i, 5), " ")
    Dim k As Integer
    'for each member of this array
    For k = LBound(myArray) To UBound(myArray)
        member = myArray(k)
        'call the contains function to check if the member exists in column H
        If Contains(varkeep, member) Then
            'if it does, set it to nothing
            myArray(k) = vbNullString
        End If
    Next
    'let's reprint the array to the cell before moving on to the next cell in column E
    Cells(i, 5) = Trim(Join(myArray, " "))
Next
Application.ScreenUpdating = True
End Sub


Function Contains(arr As Variant, m As Variant) As Boolean
    Dim tf As Boolean
    'Start as false
    tf = False
    Dim j As Integer
        'Search for the member in the keeparray
        For j = LBound(arr) To UBound(arr)
            If arr(j) = m Then
                'if it's found, TRUE
                tf = True
                Exit For
            End If
        Next j
        'Return the function as true or false for the if statement
        Contains = tf
End Function

Isso cria uma matriz fora da coluna H. Em seguida, ela passa por cada célula na coluna E, analisa-a em uma matriz, pesquisa cada membro dessa matriz na matriz keep e, se encontrada, exclui esse membro da matriz. Depois de passar pela célula, ele reimprime a matriz com os que estão faltando.

Os arrays geralmente são mais rápidos do que item por item, mas, além disso, estamos criando nossa própria função em vez de usar o método slow Find and Replace . O único problema é que pode haver espaços extras nos dados. Se assim for, podemos executar um rápido encontrar e substituir por isso. Achei mais fácil definir os membros da matriz como nada, em vez de redimensionar a matriz e mover os elementos.

Apenas por completo, aqui está uma rotina que remove espaços extras da coluna E

Sub ConsecSpace()
Dim c As Range
Dim lastrow As Integer
lastrow = ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Row
Dim strValue As String
For Each c In Range("E2:E" & lastrow)
    strValue = c.Value
    Do While InStr(1, strValue, "  ")
        strValue = Replace(strValue, "  ", " ")
    Loop
    c = strValue
Next
End Sub
    
por 06.08.2015 / 13:47
1

A menos que eu entenda mal, a melhor coisa que você pode fazer aqui é usar o Localizar e substituir

Encontre o email que deseja e substitua-o por um valor vazio.

Isso pode ter efeitos negativos no seu valor H, mas se você encontrar e substituir manualmente (um de cada vez), deve ser fácil e rápido o suficiente.

Uma solução VBa - Faça um backup primeiro.

De acordo com o seu exemplo, eu assumi que sua consulta começa em H1 e termina em algum momento.

Eu também assumi que os outros dados iniciam em A2 e terminam algumas linhas em A

Option Explicit
Sub DoTheThing()
 Dim keepValueCol As String
 keepValueCol = "H"               'You may need to update this

 Dim row As Integer
 row = 2                          'what row do the values start in column A

 Dim keepValueRow As Integer
 keepValueRow = 1

 Do While (Range("A" & row).Value <> "")

    Do While (Range(keepValueCol & keepValueRow).Value <> "")

    Range("A" & row).Value = Replace(Range("A" & row).Value, Range(keepValueCol & keepValueRow).Value, "")
    Range("A" & row).Value = Trim(Replace(Range("A" & row).Value, "  ", " "))

    keepValueRow = keepValueRow + 1
    Loop


 keepValueRow = 1
 row = row + 1
 Loop

End Sub
    
por 07.07.2015 / 15:56
0

Faça um loop na sua lista de e-mail que você deseja excluir, basta selecionar o intervalo e substituí-lo por uma string vazia, assim:

Sub Replace_Email_List()

Dim rList as Range, rReplace as Range
Dim sEMail as String

'' Following your Example
Set rList = Range("H1",Range("H1").End(xlDown)) '' or just Range("H1:H5")
Set rReplace = Range("A1",Range("A1").End(xlDown)) '' or just Range("A1:A2")

For i = 1 to rList.Row
    sEMail = rList(i,1)

    rReplace.Replace What:=sEmail, Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=True
Next i

End Sub

Espero que minha resposta ajude você

    
por 11.05.2016 / 23:32