Страницы: 1
RSS
Уменьшение текста путём удаления наименьшего однокоренного слова
 
Здравствуйте.
Не подскажете, можно ли сделать макрос. чтобы он удалял из текстовой ячейки "однокоренные" слова. Нужно удалить наименьшее  слово, которое ПОЛНОСТЬЮ входит в другой слово в этой же ячейке, оставив более длинное.

Например:
медо медовы напиток -> медовы напиток
женьшенев напиток женьше  -> женьшенев напиток
 
Можно макросом.
Я сам - дурнее всякого примера! ...
 
Понятно. Видимо, неправильно сформулировал свою потребность. "можно ли сделать макрос". Я тоже. когда сын у меня спрашивает; "Папа. у тебя есть 100 рублей?", отвечаю: "Да, есть." Однако не даю, пока не попросит напрямую :)
Попрошу по другому: "Сделайте. плиз, такой макрос. если не трудно и выложите его сюда".
Изменено: Sobes - 03.04.2016 08:56:58
 
Для выделенного диапазона. Переделывать не буду, пример Вы не выложили.
Код
Public Sub www()
    Dim c As Range, a, i&, n&, m&
    For Each c In Selection.Cells
        a = Split(c.Value, " ")
        m = Empty: n = Empty
        For i = 0 To UBound(a)
            If UBound(Filter(a, a(i), True)) > n Then
            m = i: n = UBound(Filter(a, a(i)))
            End If
        Next
        a(m) = "": c(1, 2) = Application.Trim(Join(a, " "))
    Next
End Sub
Я сам - дурнее всякого примера! ...
 
Спасибо большое!
 
А можно всё таки немного переделать?
Потому что если встречаются три однокоренных слова сейчас остаются два. Нужно. чтобы осталось одно.
При запуске макроса повторно удаляется просто самое наименьшее слово, даже не однокоренное.
Исправленный пример
медовы напиток -> медовы напиток
женьшенев напиток женьш женьше -> женьшенев напиток
 
Цитата
Sobes написал: Исправленный пример
Пример - это ФАЙЛ-пример. Как есть - Как надо (см.Правила, п.2.3.)
С максимально возможным количеством вариантов
Согласие есть продукт при полном непротивлении сторон
 
Прошу прощения. Вот пример.
 
Цитата
kuklp написал:
Переделывать не буду, пример Вы не выложили.
Цитата
Sobes написал:
А можно всё таки немного переделать?
:D
 
Спасибо за Up ;)
 
Вроде сделал. Правда задачу упростить пришлось, так как порядок слов не важен.
Код только слишком длинный получился.
Наверное, сократить можно.
 
8)  Вариант с сохранением порядка, для примера:
Код
Public Sub www()
    Dim c As Range, a, i&, n&, m&, s$
    For Each c In UsedRange.Columns(1).Cells
    s = Application.Trim(c.Value)
    Do
        a = Split(s, " "): m = Empty: n = Empty
        For i = 0 To UBound(a)
            If UBound(Filter(a, a(i), True)) > n Then _
            m = i: n = UBound(Filter(a, a(i)))
        Next
        If n Then a(m) = "": s = Application.Trim(Join(a, " "))
    Loop Until n = 0
    c = s
    Next
End Sub
Я сам - дурнее всякого примера! ...
 
Вон оно Чо!
А уж думал, не поможете. Полдня зря убил :)
Спасибо огромное!
 
Доброго времени!
Если Можно, прошу поправить макрос.
Подробнее в файле:
Заранее спасибо!
 
Приложил вариант решения
 
Спасибо Огромное!
Страницы: 1
Наверх