Как удалить определенный текст сразу в нескольких ячейках?

2998
Jase

У меня огромный список адресов электронной почты; но для простоты я имею дело с 3 - 10 адресами электронной почты, которые набраны в 1 ячейке, и я не могу, кажется, MASS удалить определенные. Можно ли каким-либо образом удалить конкретный адрес электронной почты из ячейки, ПОДАРОК, что у меня есть список определенных адресов электронной почты, которые я хочу удалить. Это вопрос поиска дубликатов и удаления или есть что-то еще?

Разработать ::

в ячейке A2 у меня есть abc@abc.com aaa@abc.com bbb@abc.com ccc@abc.com

в ячейке A3 у меня есть xyz@xyz.com xxx@xyz.com yyy@xyz.com zzz@xyz.com

В ячейке от H1 до H5 у меня есть abc@abc.com xxx@xyz.com bbb@abc.com ccc@abc.com yyy@xyz.com (каждый адрес электронной почты находится в отдельных ячейках)

Можно ли каким-либо образом удалить конкретный адрес электронной почты из A2 и A3, чтобы у меня остались только aaa@abc.com, xyz@xyz.com и zzz@xyz.com?

Дополнительная информация: я использую Excel для Mac 2011

Любая помощь будет высоко оценена.

Спасибо!

1

3 ответа на вопрос

1
Dave

Если я не пойму неправильно, лучшее, что вы можете здесь сделать, - это найти и заменить

Найдите нужное письмо и замените его пустым значением.

Это может иметь негативные последствия для вашего значения H, но если вы найдете и замените вручную (по одному), это должно быть достаточно просто и быстро.

Решение VBa - сначала сделайте резервную копию.

В соответствии с вашим примером, я предположил, что ваш поиск начинается в H1 и заканчивается в какой-то момент.

Я также предположил, что другие данные начинаются на A2 и заканчиваются строкой в ​​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 
Если я пройду по твоему предложенному маршруту поиска и замены по одному, мне понадобятся целые годы. Я работаю с более чем 2000 конкретными адресами электронной почты, которые необходимо удалить в ячейках. Я ищу более быстрый способ сделать это. Но я ценю вашу помощь! Jase 8 лет назад 0
Я мог бы помочь, если бы у вас была настоящая версия Excel, потому что это можно сделать в VBa довольно легко! Прости @Jase Dave 8 лет назад 0
В Office для Mac есть опция для разработчиков, включающая макросы и редактор Visual Basic. Есть ли способ помочь вам с этими двумя функциями? Jase 8 лет назад 0
Я также могу достать ПК, если моя проблема легко решается. @ Dave Jase 8 лет назад 0
@Jase, обновлено, посмотрите, поможет ли это Dave 8 лет назад 0
Извините, произошла ошибка. обновленный Dave 8 лет назад 0
НЕТ НЕТ ЭТО РАБОТАЕТ !!!! О, ВАУ, СПАСИБО, ТАК МНОГО @DAVE! Я ОЧЕНЬ ЦЕНЮ ЭТО! Я дергаю маленькие волосы, которые у меня остались! Вы спасатель жизни! БЛАГОДАРЮ ВАС!!!!! Jase 8 лет назад 0
Рад, рад, что это сработало Dave 8 лет назад 0
0
Raystafarian

Do to your follow up question - Can I run this Macro faster? - I'm submitting my answer here and voting to close that question as a duplicate.


If I understand you, you want to take all the values in column H and delete them from column E? I'd do that with some arrays to speed it up -

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 

This creates an array out of column H. Then it goes through each cell in column E, parses it to an array, searches each member of that array against the keep array and if found, deletes that member of the array. After going through the cell, it reprints the array with the found ones missing.


Arrays are generally faster than going item by item, but additionally, we're creating our own function rather than using the slow Find and Replace method. The only issue being that there may be extra spaces within the data. If so, we can run a quick find and replace for that. I found it easier to set the members of the array to nothing rather than to re-size the array and move the elements.


Just for completeness' sake, here's a routine that removes extra spaces from column 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 
Огромное спасибо. Этот код работал быстрее и был выполнен в кратчайшие сроки. Я думаю, что вы помогли мне с предыдущим вопросом, на самом деле не могу поблагодарить вас и других за то, что вы мне помогли. Jase 8 лет назад 0
0
Rafa Barragan

Прокрутите список электронной почты, который вы хотите удалить, просто выберите диапазон и замените его пустой строкой, например:

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 

Надеюсь, мой ответ поможет вам