Wie lösche ich bestimmten Text in mehreren Zellen gleichzeitig?

3060
Jase

Ich habe eine riesige Liste von E-Mail-Adressen. sondern nur um die Dinge einfach i mit 3 befasse - 10 E - Mail - Adressen, die in 1 Zelle getippt werden und ich kann nicht scheinen MASS spezifische zu löschen. Gibt es eine Möglichkeit, eine bestimmte E-Mail-Adresse aus der Zelle zu löschen, GEBEN, dass ich eine Liste mit bestimmten E-Mail-Adressen habe, die ich löschen möchte. Geht es darum, Duplikate zu finden und zu löschen, oder gibt es noch mehr dazu?

Zu erarbeiten:

In Zelle A2 habe ich abc@abc.com aaa@abc.com bbb@abc.com ccc@abc.com

In Zelle A3 habe ich xyz@xyz.com xxx@xyz.com yyy@xyz.com zzz@xyz.com

In Zelle H1 bis H5 habe ich abc@abc.com xxx@xyz.com bbb@abc.com ccc@abc.com yyy@xyz.com (jede E-Mail-Adresse befindet sich in einzelnen Zellen)

Gibt es eine Möglichkeit, eine bestimmte E-Mail-Adresse aus A2 und A3 zu löschen, so dass mir nur noch aaa@abc.com, xyz@xyz.com und zzz@xyz.com zur Verfügung stehen?

Zusätzliche Informationen: Ich verwende Excel für Mac 2011

Jede Hilfe wird sehr geschätzt.

Vielen Dank!

1

3 Antworten auf die Frage

1
Dave

Wenn ich es nicht missverstehe, ist das Beste, was Sie hier tun können, das Suchen und Ersetzen

Suchen Sie die gewünschte E-Mail und ersetzen Sie sie durch einen leeren Wert.

Dies kann sich jedoch negativ auf den H-Wert auswirken. Wenn Sie jedoch manuell nacheinander suchen und ersetzen, sollte dies leicht und schnell genug sein.

Eine VBA-Lösung - Machen Sie zuerst ein Backup.

Nach Ihrem Beispiel habe ich angenommen, dass Ihr Nachschlagen bei H1 beginnt und irgendwann endet.

Ich habe auch angenommen, dass die anderen Daten auf A2 beginnen und eine Reihe in A beenden

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 
Wenn ich Ihren vorgeschlagenen Weg des Findens und Ersetzens nacheinander durchgehe, brauche ich eine Ewigkeit, um dies zu tun. Ich arbeite mit über 2000 spezifischen E-Mail-Adressen, die innerhalb von Zellen gelöscht werden müssen. Ich suche einen schnelleren Weg, dies zu tun. Aber ich danke Ihnen für Ihre Hilfe! Jase vor 8 Jahren 0
Ich könnte helfen, wenn Sie die echte Version von Excel hätten, da dies in VBa sehr einfach möglich ist! Entschuldigung @Jase Dave vor 8 Jahren 0
Office für Mac verfügt über eine Developer Option, die Makros und Visual Basic Editor enthält. Gibt es eine Möglichkeit, mit diesen beiden Funktionen zu helfen? Jase vor 8 Jahren 0
Ich kann auch einen PC in die Hände bekommen, wenn mein Problem eine einfache Lösung hat. @Dave Jase vor 8 Jahren 0
@Jase, aktualisiert, ob das hilft Dave vor 8 Jahren 0
Entschuldigung, es ist ein Fehler aufgetreten. aktualisierte Dave vor 8 Jahren 0
Nein, es hat funktioniert !!!! OH WOW VIELEN DANK VIEL @ DAVE! Ich schätze es wirklich! Ich habe die kleinen Haare gezogen, die ich noch habe! Du bist ein Lebensretter! DANKE DIR!!!!! Jase vor 8 Jahren 0
Freude, froh, dass es funktioniert hat Dave vor 8 Jahren 0
0
Raystafarian

Fragen Sie nach, ob Sie dieses Makro schneller ausführen können. - Ich sende hier meine Antwort und stimme ab, um diese Frage als Duplikat zu schließen.


Wenn ich Sie verstehe, möchten Sie alle Werte in Spalte H übernehmen und aus Spalte E löschen? Ich würde das mit einigen Arrays tun, um es zu beschleunigen -

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 

Dadurch wird ein Array aus Spalte H erstellt. Dann durchläuft es jede Zelle in Spalte E, analysiert es in ein Array, durchsucht jedes Member dieses Arrays anhand des Keep-Arrays und löscht dieses Member des Arrays, wenn es gefunden wird. Nach dem Durchlaufen der Zelle wird das Array erneut gedruckt, wobei die gefundenen fehlen.


Arrays sind im Allgemeinen schneller als gehende Elemente für Elemente, aber zusätzlich erstellen wir unsere eigene Funktion, anstatt die langsame Find and Replace Methode zu verwenden. Das einzige Problem ist, dass möglicherweise zusätzliche Leerzeichen in den Daten vorhanden sind. Wenn ja, können wir eine schnelle Suche durchführen und dafür ersetzen. Ich fand es einfacher, die Mitglieder des Arrays auf nichts zu setzen, als das Array neu zu dimensionieren und die Elemente zu verschieben.


Der Vollständigkeit halber folgt eine Routine, die zusätzliche Leerzeichen aus Spalte E entfernt

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 
Ich danke dir sehr. Dieser Code lief schneller und wurde in kürzester Zeit erledigt. Ich glaube, Sie haben mir zuvor mit einer vorherigen Frage geholfen, ich kann Ihnen wirklich nicht danken, und den anderen, die mir durch diese Sache geholfen haben, genug. Jase vor 8 Jahren 0
0
Rafa Barragan

Durchlaufen Sie Ihre E-Mail-Liste, die Sie löschen möchten, wählen Sie einfach den Bereich aus und ersetzen Sie ihn durch eine leere Zeichenfolge:

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 

Hoffe, meine Antwort hilft dir