Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 13:32   #1
Solny
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 5
По умолчанию Как удалить из ячейки слово, содержащее....

Добрый день!
Подскажите, пожалуйста, как можно удалить из ячейки слово, содержащее определенные символы.
Проблема следующая: наименования в прайсе содержат артикулы, которые необходимо удалить.
Например: "Самокл.этикетки AZ9184-25 ECONOMY,универ,38x21,2мм,белые,25л" .
Нужно удалить "AZ9184-25".
Все артикулы содержат впереди символы "AZ"
Solny вне форума Ответить с цитированием
Старый 01.12.2011, 15:02   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub tt()
    Dim s$, a, i&
    s = [a1].Value
    a = Split(s)
    For i = 0 To UBound(a)
        If a(i) Like "AZ#*" Then a(i) = ""
    Next
    s = Application.Trim(Join(a))
    [b1].Value = s
End Sub
Ваш текст в A1.

Можно чуть сократить:
Код:
Sub ttt()
    Dim a, i&: a = Split([a1].Value)
    For i = 0 To UBound(a)
        If a(i) Like "AZ#*" Then a(i) = ""
    Next: [b1].Value = Application.Trim(Join(a))
End Sub
или так:
Код:
Sub tttt(): Dim a, i&: a = Split([a1].Value)
For i = 0 To UBound(a): a(i) = IIf(a(i) Like "AZ#*", "", a(i)): Next
[b1].Value = Application.Trim(Join(a)): End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.12.2011 в 17:01.
Hugo121 вне форума Ответить с цитированием
Старый 02.12.2011, 11:18   #3
Solny
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 5
Радость

Спасибо!
Навесила цикл сверху, все работает!
Solny вне форума Ответить с цитированием
Старый 02.12.2011, 11:23   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Да, ещё можно Exit For добавить, когда нашли совпадение (если артикул всегда один) - будет быстрее работать. Если данных много - будет заметно.
Но если их много и обрабатывать нужно часто - берите сперва в массив, обрабатывайте, выгружайте назад.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 02.12.2011, 11:59   #5
Solny
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 5
По умолчанию

Спасибо за помощь!
Проблема в том, что я совсем новичок)))))
Еще попутно возникла проблема с другим файлом, там нужно удалить
последние цифры в строке, примеры:
Боковая крышка д/рельса Junior, пластиковая 11 115 36
Мелки цветные,12 мелков 6 цветов в картонной коробке 12306
Настол. одност. подставка Magnetoplan, А3, 297х105х420мм 43105
Доска белая Magnetoplan CC,600х450мм,эмал.покрытие,магн/марк 12 402 СС

Хотела просто формулой типа:
=ЛЕВСИМВ(RC[-1];ДЛСТР(RC[-1])-9)
но проблема, что количество знаков разное......
а в макросах не сильна совсем

Помогите, пожалуйста, если не сложно
Буду очень благодарна
Solny вне форума Ответить с цитированием
Старый 02.12.2011, 12:18   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

удачный пример сразу видно несколько проблем:
Боковая крышка д/рельса Junior, пластиковая 11 115 36
тут что удалаять 36 или 11 115 36?

Доска белая Magnetoplan CC,600х450мм,эмал.покрытие,магн/марк 12 402 СС
тут что удалять? 1)ничего 2)12 402 СС 3)12 402 а СС оставить????
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.12.2011, 12:31   #7
Solny
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 5
По умолчанию

Нда, неудачно написала...
Удалять соответственно:
11 115 36
12306
43105
12 402 СС
Solny вне форума Ответить с цитированием
Старый 02.12.2011, 12:40   #8
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

\из той же оперы. Hugo121, и все-таки я люблю For Each Variant In Array : )

Код:
Sub io()
Dim v, x As String
For Each v In Split([A1].Value)
    If Not v Like "AZ#*" Then x = x & " " & v
Next
x = LTrim(x)
End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 02.12.2011, 13:25   #9
Solny
Новичок
Джуниор
 
Регистрация: 01.12.2011
Сообщений: 5
По умолчанию

Всем спасибо большое!

Оба файла обработала!

Кстати, последний код не работал для строк с СС на конце, их формулой добила.
Solny вне форума Ответить с цитированием
Старый 02.12.2011, 13:26   #10
TheVinnie
Новичок
Джуниор
 
Регистрация: 02.12.2011
Сообщений: 1
По умолчанию Вариант с регулярными выражениями

Для ценителей универсальности подойдет вещь на базе regex
Код:
Sub AutoReplaceArticles()

On Error Resume Next

For Each x In Selection
      
    If WorksheetFunction.IsNA(x) Then
           x.Value = ""
    Else
        
        Dim s$
        s = x.Value
        
        Dim regEx
        Set regEx = CreateObject("vbscript.regexp")
        With regEx
            .IgnoreCase = True
            .MultiLine = False
            .Pattern = "\s+[ |0-9A-Za-z]+$"
            .Global = True
        End With

        x.Value = regEx.Replace(s, "")
    End If
              
    Next
    
End Sub
TheVinnie вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить определенное слово в ячейке, на содержимое другой ячейки. Брысь Microsoft Office Excel 2 04.03.2010 16:01
Как извлечь слово из текстовой ячейки по заданному шаблону и поместить в соседнюю ячейку? Aleox Microsoft Office Excel 4 27.11.2009 19:58
Паскаль. Строки. удалить слово, содержащее меньше всего гласных LIARH Помощь студентам 2 03.09.2009 08:10
Определить в тексте слово, содержащее минимальное число согласных stasig Помощь студентам 3 15.02.2009 13:11
Как удалить слово из строки? Ellita Общие вопросы C/C++ 7 19.09.2007 15:43