Есть текст - на многих строках, т.е. несколько предложений в одной ячейке, ячеек много, в этом тексте нужно найти тоже много слов, по сути ВПР с нахождением сопоставления "*..*", но хочется ввести текст, нажать на клавишу и готово, так как текст большой, а "*..*" для каждого сопоставления делать тяжело, макрос есть, это с одной стороны со второй есть макрос - поиска сопоставлений, он в файле, но забивать туда вручную массив того, что надо найти не хочется, а хочется указать диапазон ячеек, есть ли какая-то команда помимо arrSearchWords или может с помощью нее что-то можно сделать
также можно выбирать копирование только в определенные столбцы, а в строки - нет, над этим думаю сам, но вдруг у кого етсь мысли
Есть текст - на многих строках, т.е. несколько предложений в одной ячейке, ячеек много, в этом тексте нужно найти тоже много слов, по сути ВПР с нахождением сопоставления "*..*", но хочется ввести текст, нажать на клавишу и готово, так как текст большой, а "*..*" для каждого сопоставления делать тяжело, макрос есть, это с одной стороны со второй есть макрос - поиска сопоставлений, он в файле, но забивать туда вручную массив того, что надо найти не хочется, а хочется указать диапазон ячеек, есть ли какая-то команда помимо arrSearchWords или может с помощью нее что-то можно сделать
также можно выбирать копирование только в определенные столбцы, а в строки - нет, над этим думаю сам, но вдруг у кого етсь мыслиAkost100
Привет, Akost100 на Лист1 запишите в столбце С ест принимает идет ...
и попробуйте вот так: [vba]
Код
Sub Поискикопирование() Dim strStartAddr As String Dim rgResult As Range Dim arrSearchWords Dim i As Long arrSearchWords = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(arrSearchWords) Set rgResult = .Find(arrSearchWords(i, 1)) If Not rgResult Is Nothing Then strStartAddr = rgResult.Address Do Sheets(2).Cells(Sheets(2).Rows.Count, 5).End(xlUp)(2) = rgResult Set rgResult = .FindNext(rgResult) If rgResult.Address = strStartAddr Then Exit Do Loop End If Next i End With End Sub
[/vba]
Привет, Akost100 на Лист1 запишите в столбце С ест принимает идет ...
и попробуйте вот так: [vba]
Код
Sub Поискикопирование() Dim strStartAddr As String Dim rgResult As Range Dim arrSearchWords Dim i As Long arrSearchWords = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(arrSearchWords) Set rgResult = .Find(arrSearchWords(i, 1)) If Not rgResult Is Nothing Then strStartAddr = rgResult.Address Do Sheets(2).Cells(Sheets(2).Rows.Count, 5).End(xlUp)(2) = rgResult Set rgResult = .FindNext(rgResult) If rgResult.Address = strStartAddr Then Exit Do Loop End If Next i End With End Sub
может еще со строками что-то получится, у меня идей нет пока никаких. потому что я привязан еще к формулам обычным, а там этого сделать нельзя, мне надо результаты вставить в симметричную таблицу с изначально заданным количеством строк, а потом пустые удалить, но между каждым результатом или группой должна быть пустая строка, вернее заполненная, но определенной фромулой, пытаюсь вставлять вместо Целлс еще что-то, но это неправильно и я это сам понимаю, да и ошибку выдает, может вообще изначально каким-то другим путем пойти - например создать шаблон таблицы, но а дальше...и опять тупик т.е. пока писал сформулировать задачу получилось, как нужно разместить результат действия относительно исконного значения, т.е есть таблица а б с и текст, результаты поиска в тексте этих а б с надо разместить не абы как, а именно под результат а - под а, результат б - под б ... и чтобы еще пустых строк 100 оставалось после размещения
может еще со строками что-то получится, у меня идей нет пока никаких. потому что я привязан еще к формулам обычным, а там этого сделать нельзя, мне надо результаты вставить в симметричную таблицу с изначально заданным количеством строк, а потом пустые удалить, но между каждым результатом или группой должна быть пустая строка, вернее заполненная, но определенной фромулой, пытаюсь вставлять вместо Целлс еще что-то, но это неправильно и я это сам понимаю, да и ошибку выдает, может вообще изначально каким-то другим путем пойти - например создать шаблон таблицы, но а дальше...и опять тупик т.е. пока писал сформулировать задачу получилось, как нужно разместить результат действия относительно исконного значения, т.е есть таблица а б с и текст, результаты поиска в тексте этих а б с надо разместить не абы как, а именно под результат а - под а, результат б - под б ... и чтобы еще пустых строк 100 оставалось после размещенияAkost100
Sub ertert() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) sp = Split(Mid(x(i, 2), 2), "~") .Cells(2).Resize(UBound(sp) + 1).Value = Application.Transpose(sp) End With Next i .Activate End With End Sub
[/vba] все, идемте Голос смотреть
давайте попробуем через ertert [vba]
Код
Sub ertert() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) sp = Split(Mid(x(i, 2), 2), "~") .Cells(2).Resize(UBound(sp) + 1).Value = Application.Transpose(sp) End With Next i .Activate End With End Sub
спасибо, nilem, подскажите еще пожалуйста, как строки, в которых будет находится первое слово обрамить в рамку, ведь у этих строк будет постоянно разный адрес - в файле, т.е хотелось бы, чтобы только имена были в рамке, а остальное то что ниже - без, т.е на листе 2 - как получилось, а на листе 3 - как бы хотелось
спасибо, nilem, подскажите еще пожалуйста, как строки, в которых будет находится первое слово обрамить в рамку, ведь у этих строк будет постоянно разный адрес - в файле, т.е хотелось бы, чтобы только имена были в рамке, а остальное то что ниже - без, т.е на листе 2 - как получилось, а на листе 3 - как бы хотелосьAkost100
и еще вопрос, поскольку я пытаюсь разобраться, вот это: Dim x, i&, j&, r As Range, adr As String, sp
с таким еще не сталкивался просто, x,i,j поясните пожалуйста, что-то на координаты векторов похоже adr,sp - тоже что такое если время будет конечно
и еще вопрос, поскольку я пытаюсь разобраться, вот это: Dim x, i&, j&, r As Range, adr As String, sp
с таким еще не сталкивался просто, x,i,j поясните пожалуйста, что-то на координаты векторов похоже adr,sp - тоже что такое если время будет конечноAkost100
Sub ertert() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium sp = Split(Mid(x(i, 2), 2), "~") With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End With Next i .Activate End With End Sub
[/vba]
пробуйте [vba]
Код
Sub ertert() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium sp = Split(Mid(x(i, 2), 2), "~") With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End With Next i .Activate End With End Sub
Dim x, i&, j&, r As Range, adr As String, sp это строка объявления переменных, а крючки & - то же самое, что As Long почитайте справку ВБА и еще книжку какую-нибудь (здесь на сайте есть раздел литература)
Dim x, i&, j&, r As Range, adr As String, sp это строка объявления переменных, а крючки & - то же самое, что As Long почитайте справку ВБА и еще книжку какую-нибудь (здесь на сайте есть раздел литература)nilem
Sub ertert22() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium If InStr(x(i, 2), "~") Then sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End If End With Next i .Activate End With End Sub
[/vba]
пробуем: [vba]
Код
Sub ertert22() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium If InStr(x(i, 2), "~") Then sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End If End With Next i .Activate End With End Sub
Sub ertert33() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) If InStr(x(i, 2), "~") Then .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End If End With Next i .Activate End With End Sub
[/vba]
[vba]
Код
Sub ertert33() Dim x, i&, j&, r As Range, adr As String, sp Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) If InStr(x(i, 2), "~") Then .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlMedium sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With End If End With Next i .Activate End With End Sub
подскажите как сделать пожалуйста - я относительно получившихся результатов мароса выше ertret22 вставляю в другом столбце, но вэтих же строках числа, а в первой строке мне необходимо получить сумму вставленных чисел, но чтобы сумма прописывалась автоматически в макросе, в файле пример - на листе 4 в столбце D как хотелось бы
подскажите как сделать пожалуйста - я относительно получившихся результатов мароса выше ertret22 вставляю в другом столбце, но вэтих же строках числа, а в первой строке мне необходимо получить сумму вставленных чисел, но чтобы сумма прописывалась автоматически в макросе, в файле пример - на листе 4 в столбце D как хотелось быAkost100
Sub ertert22_2() Dim x, i&, j&, r As Range, adr As String, sp: Application.ScreenUpdating = False Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlThin If InStr(x(i, 2), "~") Then sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With .Item(1, 4).FormulaR1C1 = "=SUM(R[1]C:R[" & UBound(sp) + 1 & "]C)" End If End With Next i .Activate End With: Application.ScreenUpdating = True End Sub
Sub ertert22_2() Dim x, i&, j&, r As Range, adr As String, sp: Application.ScreenUpdating = False Sheets("Лист1").Activate x = Range("C1:D" & Cells(Rows.Count, 3).End(xlUp).Row).Value With Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To UBound(x) Set r = .Find(x(i, 1)) If Not r Is Nothing Then adr = r.Address Do x(i, 2) = x(i, 2) & "~" & r Set r = .FindNext(r) Loop While r.Address <> adr End If Next i End With With Sheets("Лист4") For i = 1 To UBound(x) With .Cells(Rows.Count, 1).End(xlUp)(3) .Value = x(i, 1) .Resize(, 22).Borders.Weight = xlThin If InStr(x(i, 2), "~") Then sp = Split(Mid(x(i, 2), 2), "~") For j = 0 To UBound(sp) sp(j) = x(i, 1) & Split(sp(j), x(i, 1))(1) Next j With .Cells(2).Resize(UBound(sp) + 1) .Value = Application.Transpose(sp) .Resize(UBound(sp) + 2, 22).Borders.LineStyle = xlContinuous .Resize(UBound(sp) + 2, 22).Borders.Item(xlInsideHorizontal).LineStyle = xlLineStyleNone End With .Item(1, 4).FormulaR1C1 = "=SUM(R[1]C:R[" & UBound(sp) + 1 & "]C)" End If End With Next i .Activate End With: Application.ScreenUpdating = True End Sub