Страницы: 1
RSS
Найти в тексте слова из списка и записать их через запятую
 
Все перерыл, но не нашёл нужной формулы.
Нужно в тексте найти слова из колонки B и записать одинаковые слова, также через запятую в колонку С их может быть несколько. Размер таблицы большой, текста более 50к, а слов для поиска более 5к. Заранее спасибо!
Изменено: fearx - 19.04.2021 12:05:47
 
Код
C2:C23     =ЕСЛИОШИБКА(ИНДЕКС($D$1:$Y$1;1;ПОИСКПОЗ(ИСТИНА;D2:Y2;0));"")
D1:S1      =ИНДЕКС($B:$B;СТОЛБЕЦ()-2)
D2:S23     =НЕ(ЕОШ(НАЙТИ(D$1;$A2)))
 
Интересное решение, но не совсем подходит, бывает несколько совпадений и их нужно записать через запятую. В примере кусок таблицы, на самом деле слов для поиска более 5к.
 
Цитата
fearx: на самом деле слов для поиска более 5к
формула захлебнётся - ищите макрос, несколько раз уже обсуждалось
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
https://www.excel-vba.ru/chto-umeet-excel/najti-v-yachejke-lyuboe-slovo-iz-spiska
Изменено: Marat Ta - 19.04.2021 12:33:57
 
Код
Dim i As Integer
Dim j As Integer
Dim str As String
For i = 2 To 23
    str = ""
    For j = 2 To 16
        If InStr(1, Cells(i, 1), Cells(j, 2)) > 0 Then str = str & Cells(j, 2) & ", "
    Next j
Cells(i, 3) = str
Next i
Изменено: Anton Kozyrev - 19.04.2021 12:28:30
 
Вариант макросом.
Код
Sub ТекстСлова()
    Dim sh As Worksheet
    Set sh = ActiveSheet
    With sh
        Dim arr As Variant
        Dim y As Long
        Dim u As Long
        Dim m As Long
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        m = .Cells(.Rows.Count, 2).End(xlUp).Row
        arr = .Range(.Cells(1, 1), .Cells(Application.Max(y, m), 3))
        
        Dim ou As Variant
        For y = 2 To UBound(arr, 1)
            For u = 2 To m
                If InStr(arr(y, 1), arr(u, 2)) > 0 Then
                    If Not IsEmpty(ou) Then
                        ReDim Preserve ou(0 To UBound(ou) + 1)
                    Else
                        ReDim ou(0 To 0)
                    End If
                    
                    ou(UBound(ou)) = arr(u, 2)
                End If
            Next
            If IsArray(ou) Then
                arr(y, 3) = Join(ou, ", ")
                Erase ou
                ou = Empty
            Else
                arr(y, 3) = Empty
            End If
        Next
        .Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
    End With
End Sub
 
Цитата
МатросНаЗебре написал:
ТекстСлова()
=ТекстСлова(A2;B:B) всяко пробовал не получатся запустить. Подскажите как сделать
 
Вид - Макросы - ТекстСлова - Выполнить
 
Огромное Вам спасибо! Макрос отлично работает.
Страницы: 1
Наверх