Поиск и замена на столбец с помощью VBA

#excel #vba #find

#excel #vba #Найти

Вопрос:

Мне было интересно, есть ли способ выполнить эту задачу. У меня есть столбцы A и B. Столбец A1 содержит текстовое значение «Общая служба». Столбец B1 содержит текстовое значение «Общий».

Что я хочу сделать, так это удалить «общую» часть «Общего сервиса», чтобы все, что осталось, это «Сервис». Однако мне нужно сделать это для многих разных значений в столбце A / B.

Есть ли какой-нибудь простой способ автоматизировать это? По сути, это просто массовый поиск и замена пустым значением, оно просто должно основываться на значениях в столбце B.

Обновить:

Спасибо за ответы, но эти решения предполагают, что столбцы выстраиваются в ряд из стороны в сторону. Чтобы уточнить, мне нужно найти ВСЕ значения в столбце B и удалить их ВСЕ из столбца A. Таким образом, строка «из ндс» станет «из» в этом примере (она находит значение «ндс» из столбца B и удаляет его из A). Это должно быть сделано с 1000 разных значений.

введите описание изображения здесь

Заранее спасибо за любую предоставленную помощь.

Комментарии:

1. Формула — =TRIM(SUSTITUTE(A1,B1,""))

2. Да, есть много способов сделать это. Если у вас уже есть код, опубликуйте его. Если нет, то запись макросов — хорошее начало.

3. vba — [A:A] = [INDEX(TRIM(SUBSTITUTE(A:A,B:B,"")),)]

4. Спасибо за помощь, но мои значения столбцов не будут совпадать (см. Обновление).

5. У вас есть служба и центр, так что A3 ничего не будет?

Ответ №1:

Я могу ошибаться, но похоже, вам может понадобиться коллекция. Я вижу что-то вроде этого в качестве отправной точки:

 Sub RemoveWords(DeleteFromCol As Range, FindCol As Range)

  Dim words As New Collection
  Dim r As Range
  Dim word As Variant

  For Each r In FindCol
    words.Add (r.Value2)
  Next r

  For Each r In DeleteFromCol
    For Each word In words
      r.Value2 = Replace(r.Value2, word, "")
    Next word
  Next r

End Sub
  

И затем вы можете вызвать его с помощью произвольных диапазонов в вашем примере:

 RemoveWords Range("A1:A11"), Range("B1:B8")
  

Я предполагаю, что это может быть не 100%, как в вашем примере, в некоторых случаях я бы удалил оба слова, поскольку они существуют в списке «одно слово». Вы можете справиться с этим, как хотите.