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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2015, 11:29   #1
paradokc
 
Регистрация: 24.09.2015
Сообщений: 8
По умолчанию Во фразах найти слова и продублировать фразы со словами с +

MS Excel 2013, Windows

Имеется лист с двумя столбцами данных
1-ый столбец слово или словосочетание,
2-ой – число.

Задача такая – нужно найти в первом столбце словосочетания содержащие определенные слова, например, “под” и “для” продублировать эти словосочетания и добавить в них перед искомыми словами знак +.

Массив словосочетаний в первом столбце огромный, перечень слов для замены - “под”, “для” – тоже несколько десятков слов, ручная работа занимает пол дня времени. Подскажите, пожалуйста, как можно решить эту задачку?

Желательно простыми формулами, если нет то макросом.
Вложения
Тип файла: xlsx test.xlsx (8.7 Кб, 15 просмотров)

Последний раз редактировалось paradokc; 24.09.2015 в 11:32.
paradokc вне форума Ответить с цитированием
Старый 24.09.2015, 11:51   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

многостаночник!
http://www.cyberforum.ru/ms-excel/thread1537004.html
http://www.planetaexcel.ru/forum/ind...y-so-slovami-s
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.09.2015, 12:00   #3
paradokc
 
Регистрация: 24.09.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
нельзя спрашивать сразу на нескольких форумах?
paradokc вне форума Ответить с цитированием
Старый 24.09.2015, 12:23   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

формально - нельзя (не приветствуется)
но реально - нет механизма, который запретил бы это сделать (нет кооперации между форумами и не будет, видимо)

есть правила хорошего тона, которые обязывают "нормального человека" при получении ответа на одном из форумов отписаться на всех остальных, что задача решена.
даже если этого не сделано - я бы не спешил цеплять ярлык "не нормального" на такого человека. ну,... не знал, не догадался, не подумал - оправданий много
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 24.09.2015, 13:31   #5
AleksandrH
Форумчанин
 
Аватар для AleksandrH
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

Код:
Sub m()
    Dim LastRowA As Integer, LastRowF As Integer
    Dim i As Integer, j As Integer, k As Integer, values As Integer
    Dim key As String, word As String
    LastRowA = ActiveWorkbook.Sheets("Исходник").Range("A65535").End(xlUp).Row
    LastRowF = ActiveWorkbook.Sheets("Исходник").Range("F65535").End(xlUp).Row
    For i = 1 To LastRowA
        For j = 1 To LastRowF
            key = ActiveWorkbook.Sheets("Исходник").Cells(j, 6)
            word = ActiveWorkbook.Sheets("Исходник").Cells(i, 1)
            values = ActiveWorkbook.Sheets("Исходник").Cells(i, 2)
            If InStr(word, key) Then
                k = k + 1
                ActiveWorkbook.Sheets("Результат").Cells(k, 1) = Replace(word, key, "+" & key)
                ActiveWorkbook.Sheets("Результат").Cells(k, 2) = values
            End If
        Next j
    Next i
End Sub
в столбце F листа Исходник размести перечень слов для замены
WIX-FILTERS. A Filter for every application.
AleksandrH вне форума Ответить с цитированием
Старый 25.09.2015, 13:12   #6
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

добрый день,попробуйте такой вариант

Код:
 Sub example1()
   Dim i&, x()
   x = Sheets("Исходник").UsedRange.Value
     With CreateObject("vbscript.regexp")
              .IgnoreCase = True
              .Pattern = "для"
       For i = 1 To UBound(x)
        If .test(x(i, 1)) Then x(i, 1) = .Replace(x(i, 1), "+для")
       Next
    End With
  Sheets("Результат").Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x
 End Sub
Код:
Sub example2()
   Dim i&, x()
   x = Sheets("Результат").UsedRange.Value
        With CreateObject("vbscript.regexp")
              .IgnoreCase = True
              .Pattern = "под"
        For i = 1 To UBound(x)
           If .test(x(i, 1)) Then x(i, 1) = .Replace(x(i, 1), "+под")
        Next
      End With
   Sheets("Результат").Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x
 End Sub
Код:
Sub test()
 example1
 example2
 End Sub
Вложения
Тип файла: xls test (4)_25_09_2015_2.xls (32.5 Кб, 9 просмотров)
svsh2016 вне форума Ответить с цитированием
Старый 25.09.2015, 13:29   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

если слов: для, над, под, слева, справа, между .... будет 1000 шт.
то напишете:

Код:
Sub example1()
...
              .Pattern = "для"
... 
End Sub
потом 
Sub example2()
...
              .Pattern = "под"

Sub example3()
...
              .Pattern = "над"
...
...
...

Sub example1000()
...
              .Pattern = "везде!"
может как-то так:
Код:
 Sub example(mask as string)
   Dim i&, x()
   x = Sheets("Исходник").UsedRange.Value
     With CreateObject("vbscript.regexp")
              .IgnoreCase = True
              .Pattern = mask
       For i = 1 To UBound(x)
        If .test(x(i, 1)) Then x(i, 1) = .Replace(x(i, 1), "+" & mask)
       Next
    End With
  Sheets("Результат").Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x
 End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.09.2015, 13:36   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

или вообще создать массив masks, пройтись циклом по массиву 1 раз инициировав CreateObject("vbscript.regexp"), а не для каждого очередного слова.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.09.2015, 14:18   #9
svsh2016
Форумчанин
 
Регистрация: 16.06.2015
Сообщений: 100
По умолчанию

IgorGo,добрый день, я написал для конкретного файл-примера,в предложенном Вами варианте,для этого примера будет так

Код:
 Sub example(mask As String)
   Dim i&, x()
   x = Sheets("Исходник").UsedRange.Value
        With CreateObject("vbscript.regexp")
              .IgnoreCase = True
              .Pattern = mask
        For i = 1 To UBound(x)
           If .test(x(i, 1)) Then x(i, 1) = .Replace(x(i, 1), mask)
        Next
      End With
   Sheets("Результат").Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x
 End Sub
 Sub test2()
 example "для"
 example "где"
 End Sub
Вложения
Тип файла: xls test (4)_25_09_2015_3.xls (42.5 Кб, 12 просмотров)

Последний раз редактировалось Stilet; 25.09.2015 в 14:37.
svsh2016 вне форума Ответить с цитированием
Старый 25.09.2015, 14:44   #10
paradokc
 
Регистрация: 24.09.2015
Сообщений: 8
По умолчанию

Ребята, я вам всем очень признателен!
Сейчас потестирую.
Ну и соответственно я учту правила хорошего тона и раскину ответы по форумам.
Еще раз спасибо!
paradokc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В текстовом файле найти все слова, совпадающие с заданным пользователем и поменять их местами с соседними справа словами ( c# ) CROWN Помощь студентам 4 24.12.2014 15:57
Найти в memo определёные фразы maks5 Общие вопросы Delphi 2 23.09.2011 16:41
Символьная строка содержит слова, разделенные пробелами. Найти все слова-палиндромы (Паскаль) sashunechka Помощь студентам 4 18.05.2011 21:45
Поиск последнего слова фразы в дереве предложения. the_deer_one Свободное общение 5 17.08.2010 14:48
Дано предложение. Между словами предложения один пробел, а после последнего слова точка. Vadim123456 Помощь студентам 0 01.05.2010 23:28