Comment puis-je supprimer du texte spécifique dans plusieurs cellules à la fois?

J'ai une énorme liste d'adresses e-mail; Mais juste pour simplifier les choses, je m'occupe de 3 à 10 adresses e-mail qui sont tapées dans 1 cellule et je ne peux pas sembler MASS supprimer celles-ci spécifiques. Y at-il une façon de supprimer une adresse électronique spécifique de la cellule, DONNE que j'ai une liste d'adresses de messagerie spécifiques que je souhaite supprimer. Est-il question de trouver des doublons et de supprimer ou y at-il plus?

Élaborer::

Dans la cellule A2, j'ai [email protected] [email protected] [email protected] [email protected]

Dans la cellule A3, j'ai [email protected] [email protected] [email protected] [email protected]

Dans la cellule H1 à H5, j'ai [email protected] [email protected] [email protected] [email protected] [email protected] (chaque adresse électronique se trouve dans les cellules individuelles)

Existe-t-il une façon de supprimer une adresse électronique spécifique de A2 et A3 afin que je n'ai plus que [email protected], [email protected] et [email protected]?

Informations supplémentaires: j'utilise Excel pour Mac 2011

Toute aide sera grandement appréciée.

Je vous remercie!

Faites à votre question de suivi – Puis-je exécuter cette macro plus rapidement? – Je soumets ma réponse ici et je vote pour clore cette question en double.


Si je vous comprends, vous voulez prendre toutes les valeurs dans la colonne H et les supprimer de la colonne E? Je ferais cela avec des tableaux pour l'accélérer –

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 

Cela crée un réseau hors de la colonne H. Ensuite, il passe par chaque cellule de la colonne E, l'analyse dans un tableau, recherche chaque membre de ce tableau contre le tableau Keep et, s'il est trouvé, supprime ce membre du tableau. Après avoir parcouru la cellule, il réimprime le tableau avec les personnes trouvées.


Les tableaux sont généralement plus rapides que les objets par élément, mais en plus, nous créons notre propre fonction plutôt que d'utiliser la méthode lente de Find and Replace . Le seul problème est qu'il peut y avoir des espaces supplémentaires dans les données. Si c'est le cas, nous pouvons effectuer une recherche rapide et le remplacer pour cela. J'ai trouvé plus facile de configurer les membres du tableau plutôt que de redimensionner le tableau et de déplacer les éléments.


Pour l'exhaustivité, voici une routine qui élimine les espaces supplémentaires de la colonne 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 

À moins que je ne comprenne mal, la meilleure chose que vous pouvez faire ici est d'utiliser Find and Replace

Trouvez le courrier électronique souhaité et remplacez-le par une valeur vide.

Cela peut avoir des effets négatifs sur votre valeur H mais, si vous trouvez et remplacez manuellement (un à la fois), il devrait être facile et rapide.

Une solution VBa – Effectuez une sauvegarde d'abord.

Selon votre exemple, j'ai supposé que votre recherche commence à H1 et se termine à un moment donné.

J'ai également supposé que les autres données commencent sur A2 et finissent une rangée en 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 

Faites une boucle dans votre liste de courrier électronique que vous souhaitez supprimer, sélectionnez la gamme et remplacez-la par une chaîne vide, comme ceci:

 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 

J'espère que ma réponse vous aidera