нужно найти ячейки, в которых больше 5ти слов + проставить ссылки

Автор frimazai, 20.02.2012, 14:03

« назад - далее »

frimazai

Всем привет!

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

пример:
Краска акрилатная ELITE INTERIOR Silk Velour Satin --> Краска акрилатная ELITE INTERIOR Velour

2. нужно линками из столбца А заполнить столбец В
формат классический, типа - http:

файл прикладываю    

Serge 007

Первая часть решается легко:
=ЕСЛИ(СУММПРОИЗВ(--(ПСТР( A1;СТРОКА($1:$99);1)=" "))>4;A1)

Со второй непонятки.
Цитироватьв данных ячейках нужно удалить те слова, которые состоят из минимального количества букв, так чтобы ячейка состояла максимум из пяти слов
если кол-во букв в словах одинаково - удаляем то, которое ближе к концу ячейки.

пример:
Краска акрилатная ELITE INTERIOR Silk Velour Satin --> Краска акрилатная ELITE INTERIOR Velour
Из минимального количества букв состоит слово Silk (4 буквы), однако Вы удаляете и его и слово Satin (5 букв).
По какому принципу?
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

frimazai

"По какому принципу?"

"Краска акрилатная ELITE INTERIOR Silk Velour Satin"

фразы должны быть максимум из пяти слов
эта состоит из 7ми, нужно удалить две
ищем минимальное - Silk
больше четырех буквенных нет
ищем 5ти - видим - ELITE, Satin
т.к. ELITE стоит ближе к началу - оставляем, а Satin нужно убрать,
Профит - "Краска акрилатная ELITE INTERIOR Velour"





ZORRO2005

frimazai,
по вашему алгоритму из
ТРЕНД 20  Износостойкая полуматовая краска для стен и потолков
должно получиться
ТРЕНД Износостойкая полуматовая краска потолков
Вам точно так надо?
Яндекс-деньги: 410011658492153


nilem

Эх, накрутил  :)
Sub ertert()
Dim x, i&, j&, s, t(), mn&, id$()
x = Application.Trim(Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value)
For i = 1 To UBound(x)
    s = Split(x(i, 1))
    If UBound(s) > 4 Then
        Do While UBound(s) > 4
            ReDim t(UBound(s)): ReDim id(UBound(s))
            For j = 0 To UBound(s)
                t(j) = Len(s(j)): id(j) = CStr(j)
            Next j

            mn = WorksheetFunction.Min(t)
            For j = UBound(s) To 0 Step -1
                If t(j) = mn Then
                    id = Filter(id, id(j), 0, 1): Exit For
                End If
            Next j

            For j = 0 To UBound(id)
                s(j) = s(CLng(id(j)))
            Next j
            ReDim Preserve s(UBound(id))
        Loop
        x(i, 1) = Join(s)
    End If
Next i
[b1].Resize(i - 1).Value = x
End Sub