Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос производит поиск и ряд действий с искомым, если иском - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос производит поиск и ряд действий с искомым, если иском (Макросы/Sub)
Макрос производит поиск и ряд действий с искомым, если иском
pirat_m Дата: Среда, 08.07.2015, 09:16 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте Уважаемые Форумчане!
Подскажите пожалуйста, нужно чтобы макрос производил поиск на листе InsertTMP и при нахождении искомого (Name A: ) производил ряд действий (удалял Name A: , а оставшийся текст в этой ячейки Text A копировал и вставлял его в соответствующее поле WMA на листе RU), если искомое отсутствовало (Name B: ), то пропускал ряд действий связанных с ним (удалить Name B: , оставшийся текст в этой ячейки Text B копировать и вставить его в соответствующее поле WMB на листе RU) и переходил к следующему (Name C: ) и т.д.
[vba]
Код

Sub Macros()

     Sheets("InsertTMP").Select
      
     Cells.Find(What:="Name A:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
         Cells.Replace What:="Name A: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMA").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select

     Cells.Find(What:="Name B:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
     Cells.Replace What:="Name B: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMB").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select
      
     Cells.Find(What:="Name C:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
         Cells.Replace What:="Name C: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMC").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select

End Sub
[/vba]
PS: Пример прикреплен.
Заранее Благодарю Вас.
К сообщению приложен файл: 8077759.xls (31.5 Kb)
 
Ответить
СообщениеЗдравствуйте Уважаемые Форумчане!
Подскажите пожалуйста, нужно чтобы макрос производил поиск на листе InsertTMP и при нахождении искомого (Name A: ) производил ряд действий (удалял Name A: , а оставшийся текст в этой ячейки Text A копировал и вставлял его в соответствующее поле WMA на листе RU), если искомое отсутствовало (Name B: ), то пропускал ряд действий связанных с ним (удалить Name B: , оставшийся текст в этой ячейки Text B копировать и вставить его в соответствующее поле WMB на листе RU) и переходил к следующему (Name C: ) и т.д.
[vba]
Код

Sub Macros()

     Sheets("InsertTMP").Select
      
     Cells.Find(What:="Name A:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
         Cells.Replace What:="Name A: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMA").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select

     Cells.Find(What:="Name B:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
     Cells.Replace What:="Name B: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMB").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select
      
     Cells.Find(What:="Name C:", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
         :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
         False, SearchFormat:=False).Activate
     ActiveCell.Select
         Cells.Replace What:="Name C: ", Replacement:="", LookAt:=xlPart, _
         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
         ReplaceFormat:=False
     Selection.Copy
     Sheets("RU").Select
     Range("WMC").Select
     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     Sheets("InsertTMP").Select

End Sub
[/vba]
PS: Пример прикреплен.
Заранее Благодарю Вас.

Автор - pirat_m
Дата добавления - 08.07.2015 в 09:16
Manyasha Дата: Среда, 08.07.2015, 10:42 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, здравствуйте, можно так, например:[vba]
Код
Sub Macros()
     Dim shTemp As Worksheet, shRu As Worksheet
     Dim temp As String, wm As String
     Set shTemp = Sheets("InsertTMP")
     Set shRu = Sheets("RU")
     shTemp.Activate
     For i = 2 To shRu.Cells(shRu.Rows.Count, 1).End(xlUp).Row
         temp = shRu.Cells(i, 1)
         On Error Resume Next
             wm = Replace(Cells.Find(What:=temp, LookAt:=xlPart).Value, temp, "")
             If Err = 0 Then
                 shRu.Cells(i, 2) = Trim(wm)
                 adr = Cells.Find(What:=temp, LookAt:=xlPart).Address
                 Range(adr) = Trim(wm)
             End If
         On Error GoTo 0
     Next i
     shRu.Activate
End Sub
[/vba]
К сообщению приложен файл: 8077759-1.xls (34.5 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, здравствуйте, можно так, например:[vba]
Код
Sub Macros()
     Dim shTemp As Worksheet, shRu As Worksheet
     Dim temp As String, wm As String
     Set shTemp = Sheets("InsertTMP")
     Set shRu = Sheets("RU")
     shTemp.Activate
     For i = 2 To shRu.Cells(shRu.Rows.Count, 1).End(xlUp).Row
         temp = shRu.Cells(i, 1)
         On Error Resume Next
             wm = Replace(Cells.Find(What:=temp, LookAt:=xlPart).Value, temp, "")
             If Err = 0 Then
                 shRu.Cells(i, 2) = Trim(wm)
                 adr = Cells.Find(What:=temp, LookAt:=xlPart).Address
                 Range(adr) = Trim(wm)
             End If
         On Error GoTo 0
     Next i
     shRu.Activate
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 08.07.2015 в 10:42
pirat_m Дата: Среда, 08.07.2015, 14:36 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, Manyasha
Спасибо за ваш вариант, но можно его еще чуточку подправить: нужно чтобы "Name A: " удалялся вместе с пробелом и результат вставлялся в указанный диапазон (например в WR), потому что у меня таких форм в книге Excel 6 шт.
Прикрепил новый файл к этому сообщению.
К сообщению приложен файл: 0776914.xls (34.0 Kb)
 
Ответить
СообщениеЗдравствуйте, Manyasha
Спасибо за ваш вариант, но можно его еще чуточку подправить: нужно чтобы "Name A: " удалялся вместе с пробелом и результат вставлялся в указанный диапазон (например в WR), потому что у меня таких форм в книге Excel 6 шт.
Прикрепил новый файл к этому сообщению.

Автор - pirat_m
Дата добавления - 08.07.2015 в 14:36
Manyasha Дата: Среда, 08.07.2015, 15:03 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, в начало макроса добавьте[vba]
Код
    rngName = InputBox("Введите название диапазона:", , "WR")
[/vba]
а первую строчку цикла замените на:[vba]
Код
    rFirst = Range(rngName).Row
      rLast = Range(rngName).Rows.Count + Range(rngName).Row - 1
      For i = rFirst To rLast
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, в начало макроса добавьте[vba]
Код
    rngName = InputBox("Введите название диапазона:", , "WR")
[/vba]
а первую строчку цикла замените на:[vba]
Код
    rFirst = Range(rngName).Row
      rLast = Range(rngName).Rows.Count + Range(rngName).Row - 1
      For i = rFirst To rLast
[/vba]

Автор - Manyasha
Дата добавления - 08.07.2015 в 15:03
pirat_m Дата: Среда, 08.07.2015, 16:03 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, макрос работает замечательно Большое Вам Спасибо hands
Могли бы Вы еще подсказать, что нужно еще добавить, чтобы в получаемом результате не было пробелом в начале ячейки?
 
Ответить
СообщениеManyasha, макрос работает замечательно Большое Вам Спасибо hands
Могли бы Вы еще подсказать, что нужно еще добавить, чтобы в получаемом результате не было пробелом в начале ячейки?

Автор - pirat_m
Дата добавления - 08.07.2015 в 16:03
Manyasha Дата: Среда, 08.07.2015, 16:08 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, Его там и так нет. Функция Trim убивает пробелы.
Если не нравится, можно temp так переназначить:[vba]
Код
temp = shRu.Cells(i, 1) & " "
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, Его там и так нет. Функция Trim убивает пробелы.
Если не нравится, можно temp так переназначить:[vba]
Код
temp = shRu.Cells(i, 1) & " "
[/vba]

Автор - Manyasha
Дата добавления - 08.07.2015 в 16:08
pirat_m Дата: Среда, 08.07.2015, 16:29 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, к сожалению с этой добавкой макрос перестает работать :(
Я только неделю работаю с макросами в Excel, поэтому мало что знаю, не судите строго.
 
Ответить
СообщениеManyasha, к сожалению с этой добавкой макрос перестает работать :(
Я только неделю работаю с макросами в Excel, поэтому мало что знаю, не судите строго.

Автор - pirat_m
Дата добавления - 08.07.2015 в 16:29
Manyasha Дата: Среда, 08.07.2015, 16:40 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, у меня все работает:[vba]
Код
For i = rFirst To rLast
temp = shRu.Cells(i, 1) & " "
On Error Resume Next
[/vba]Проверьте, так ли у Вас.

Да не обязательно этот пробел прибавлять к строке, я же писала
Его там и так нет. Функция Trim убивает пробелы.

не верите?)

Если ошибаюсь, показывайте в файле, что не работает, где пробелы остаются и т.д.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, у меня все работает:[vba]
Код
For i = rFirst To rLast
temp = shRu.Cells(i, 1) & " "
On Error Resume Next
[/vba]Проверьте, так ли у Вас.

Да не обязательно этот пробел прибавлять к строке, я же писала
Его там и так нет. Функция Trim убивает пробелы.

не верите?)

Если ошибаюсь, показывайте в файле, что не работает, где пробелы остаются и т.д.

Автор - Manyasha
Дата добавления - 08.07.2015 в 16:40
pirat_m Дата: Среда, 08.07.2015, 17:24 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, немного разобрался и нашел в чем возникает проблема, макрос работает отлично даже без добавки ( & " ") в temp, если текст для последующей обработки макросом вставлен из блокнота, а если текст вставлен из другого источника, то остаются пробелы в начале ячейки, не помогает даже код вставки
[vba]
Код
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
         False, NoHTMLFormatting:=True
[/vba]
Может тогда нужно, после вставки результата в указанный диапазон, обработать сам диапазон как-нибудь?
 
Ответить
СообщениеManyasha, немного разобрался и нашел в чем возникает проблема, макрос работает отлично даже без добавки ( & " ") в temp, если текст для последующей обработки макросом вставлен из блокнота, а если текст вставлен из другого источника, то остаются пробелы в начале ячейки, не помогает даже код вставки
[vba]
Код
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
         False, NoHTMLFormatting:=True
[/vba]
Может тогда нужно, после вставки результата в указанный диапазон, обработать сам диапазон как-нибудь?

Автор - pirat_m
Дата добавления - 08.07.2015 в 17:24
Manyasha Дата: Среда, 08.07.2015, 17:54 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, тогда так пробуйте: в коде заменяйте Trim(wm) (в 2-х местах) на[vba]
Код
Replace(Trim(wm), Chr(160), "")
[/vba]
Т.е. должно получится:[vba]
Код
            If Err = 0 Then
                 shRu.Cells(i, 2) = Replace(Trim(wm), Chr(160), "")
                 adr = Cells.Find(What:=temp, LookAt:=xlPart).Address
                 Range(adr) = Replace(Trim(wm), Chr(160), "")
             End If
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, тогда так пробуйте: в коде заменяйте Trim(wm) (в 2-х местах) на[vba]
Код
Replace(Trim(wm), Chr(160), "")
[/vba]
Т.е. должно получится:[vba]
Код
            If Err = 0 Then
                 shRu.Cells(i, 2) = Replace(Trim(wm), Chr(160), "")
                 adr = Cells.Find(What:=temp, LookAt:=xlPart).Address
                 Range(adr) = Replace(Trim(wm), Chr(160), "")
             End If
[/vba]

Автор - Manyasha
Дата добавления - 08.07.2015 в 17:54
pirat_m Дата: Среда, 08.07.2015, 18:28 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Manyasha, Огромное Вам Спасибо Марина, yahoo макрос отлично работает respect и кстати с Наступающим Вас Днем Рождения cake Здоровья! Счастья! и Любви! flowers
 
Ответить
СообщениеManyasha, Огромное Вам Спасибо Марина, yahoo макрос отлично работает respect и кстати с Наступающим Вас Днем Рождения cake Здоровья! Счастья! и Любви! flowers

Автор - pirat_m
Дата добавления - 08.07.2015 в 18:28
Manyasha Дата: Среда, 08.07.2015, 18:40 | Сообщение № 12
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
pirat_m, пожалуйста! И спасибо за такую красочную благодарность! :)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеpirat_m, пожалуйста! И спасибо за такую красочную благодарность! :)

Автор - Manyasha
Дата добавления - 08.07.2015 в 18:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос производит поиск и ряд действий с искомым, если иском (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!