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

Вход

Регистрация

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

 

= Мир MS Excel/как создать макрос для поиска строки по условиям - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
как создать макрос для поиска строки по условиям
NICK31 Дата: Четверг, 17.05.2012, 11:56 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

есть файл под названием "1-1" он будет содержать макрос, нужно создать макрос, чтобы он из файла "ЮЛ" копировал строки по 2 условиям в лист 2 содержащие часть слова "недвиж" столбца D и сумма столбца Q больше или равна 3 000 000 руб. выделенны желтым цветом столбцы
К сообщению приложен файл: 3993513.rar (27.3 Kb)
 
Ответить
Сообщениеесть файл под названием "1-1" он будет содержать макрос, нужно создать макрос, чтобы он из файла "ЮЛ" копировал строки по 2 условиям в лист 2 содержащие часть слова "недвиж" столбца D и сумма столбца Q больше или равна 3 000 000 руб. выделенны желтым цветом столбцы

Автор - NICK31
Дата добавления - 17.05.2012 в 11:56
NICK31 Дата: Четверг, 17.05.2012, 16:37 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

может кто сможет вот эту задачу до ума доделать? есть файл, только он некорректно срабатывает!
К сообщению приложен файл: 1-1.xls (39.0 Kb) · 5475197.xls (72.5 Kb)
 
Ответить
Сообщениеможет кто сможет вот эту задачу до ума доделать? есть файл, только он некорректно срабатывает!

Автор - NICK31
Дата добавления - 17.05.2012 в 16:37
Hugo Дата: Четверг, 17.05.2012, 16:52 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Ага, дело шатко-валко пошло... smile
И данные в порядок привели.
Замените основную строку на эту:
[vba]
Code
            Sheets(iList1$).Rows(i).Copy Sheets(iList2$).Rows(n).Cells(1)
[/vba]
Но циклы нужно бы сделать "автонастраиваемые", а не привязанные строго к диапазонам.

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

Помнится, Вы говорили, что ничего менять не можете, что так приходит?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеАга, дело шатко-валко пошло... smile
И данные в порядок привели.
Замените основную строку на эту:
[vba]
Code
            Sheets(iList1$).Rows(i).Copy Sheets(iList2$).Rows(n).Cells(1)
[/vba]
Но циклы нужно бы сделать "автонастраиваемые", а не привязанные строго к диапазонам.

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

Помнится, Вы говорили, что ничего менять не можете, что так приходит?

Автор - Hugo
Дата добавления - 17.05.2012 в 16:52
NICK31 Дата: Четверг, 17.05.2012, 17:01 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

а можно исправить чтобы при изменении он не выдавал вот такую ошибку! как только исправишь, нажимаешь на макрос и вуаля...опять табло
 
Ответить
Сообщениеа можно исправить чтобы при изменении он не выдавал вот такую ошибку! как только исправишь, нажимаешь на макрос и вуаля...опять табло

Автор - NICK31
Дата добавления - 17.05.2012 в 17:01
NICK31 Дата: Четверг, 17.05.2012, 17:25 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

файл уже открыт. повторное открытие приведет к потере данных
 
Ответить
Сообщениефайл уже открыт. повторное открытие приведет к потере данных

Автор - NICK31
Дата добавления - 17.05.2012 в 17:25
NICK31 Дата: Четверг, 17.05.2012, 17:27 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

вот хотелось бы чтобы при изменении данных в таблице, ну например захотел я проверить строчку, сам подписал слово недвижимость и нажал на макрос! он бы мне переписал заново на лист 2 все данные и + новое!
 
Ответить
Сообщениевот хотелось бы чтобы при изменении данных в таблице, ну например захотел я проверить строчку, сам подписал слово недвижимость и нажал на макрос! он бы мне переписал заново на лист 2 все данные и + новое!

Автор - NICK31
Дата добавления - 17.05.2012 в 17:27
Hugo Дата: Четверг, 17.05.2012, 17:32 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
И сейчас так сделает - только после изменения сохраните файл.
Ну или нужно код менять.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеИ сейчас так сделает - только после изменения сохраните файл.
Ну или нужно код менять.

Автор - Hugo
Дата добавления - 17.05.2012 в 17:32
NICK31 Дата: Четверг, 17.05.2012, 17:33 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

а вот без сохранения?может подскажите?
 
Ответить
Сообщениеа вот без сохранения?может подскажите?

Автор - NICK31
Дата добавления - 17.05.2012 в 17:33
Hugo Дата: Четверг, 17.05.2012, 17:44 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Добавил костыли - не нравится мне этот код. Но как объект изучения для начала сойдёт...
[vba]
Code
Sub copy_by_2_conditions()
       a1 = Range("A2").Value
       a2 = Range("B2").Value
       iPath$ = ActiveWorkbook.Path & "\"
       iFile$ = Dir(iPath$ & "ЮЛ.xls")
       iList1$ = "Лист1"
       iList2$ = "Лист2"
       If iFile$ = "" Then
           MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
           Exit Sub
       End If
       Application.ScreenUpdating = False

       Dim n As Integer
       n = 0

       With GetObject(iPath$ & iFile$)
           .Windows(1).Visible = True
           With .Sheets(iList1$)
               For i = 5 To 110
                   If .Cells(i, 4) Like "*" & a1 & "*" And .Cells(i, 17) >= a2 Then
                       n = n + 1
                       .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                   End If
               Next i
           End With
       End With
       Application.ScreenUpdating = True
End Sub
[/vba]

P.S. почистил тему.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДобавил костыли - не нравится мне этот код. Но как объект изучения для начала сойдёт...
[vba]
Code
Sub copy_by_2_conditions()
       a1 = Range("A2").Value
       a2 = Range("B2").Value
       iPath$ = ActiveWorkbook.Path & "\"
       iFile$ = Dir(iPath$ & "ЮЛ.xls")
       iList1$ = "Лист1"
       iList2$ = "Лист2"
       If iFile$ = "" Then
           MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
           Exit Sub
       End If
       Application.ScreenUpdating = False

       Dim n As Integer
       n = 0

       With GetObject(iPath$ & iFile$)
           .Windows(1).Visible = True
           With .Sheets(iList1$)
               For i = 5 To 110
                   If .Cells(i, 4) Like "*" & a1 & "*" And .Cells(i, 17) >= a2 Then
                       n = n + 1
                       .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                   End If
               Next i
           End With
       End With
       Application.ScreenUpdating = True
End Sub
[/vba]

P.S. почистил тему.

Автор - Hugo
Дата добавления - 17.05.2012 в 17:44
NICK31 Дата: Четверг, 17.05.2012, 17:56 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

ну вообще если файл загрузить например с 200 записями, файл корректно сработает? нам просто хотя бы так, чтобы выявлять анные значения!
 
Ответить
Сообщениену вообще если файл загрузить например с 200 записями, файл корректно сработает? нам просто хотя бы так, чтобы выявлять анные значения!

Автор - NICK31
Дата добавления - 17.05.2012 в 17:56
Hugo Дата: Четверг, 17.05.2012, 18:00 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Если 200 - тогда поменяйте тут число на 215:
[vba]
Code
For i = 5 To 110
[/vba]
Ну в общем должно быть понятно.
Или сразу на 1000.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЕсли 200 - тогда поменяйте тут число на 215:
[vba]
Code
For i = 5 To 110
[/vba]
Ну в общем должно быть понятно.
Или сразу на 1000.

Автор - Hugo
Дата добавления - 17.05.2012 в 18:00
NICK31 Дата: Четверг, 17.05.2012, 18:10 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

спасибо большое за помощь!
 
Ответить
Сообщениеспасибо большое за помощь!

Автор - NICK31
Дата добавления - 17.05.2012 в 18:10
NICK31 Дата: Пятница, 18.05.2012, 06:42 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

макрос не срабатывает! выгрузили более объемную базу и пипец встряли...чего то ему не нравится(( может это из-за формата ячейки? или еще что?
К сообщению приложен файл: 8269765.rar (45.1 Kb)
 
Ответить
Сообщениемакрос не срабатывает! выгрузили более объемную базу и пипец встряли...чего то ему не нравится(( может это из-за формата ячейки? или еще что?

Автор - NICK31
Дата добавления - 18.05.2012 в 06:42
Hugo Дата: Пятница, 18.05.2012, 10:16 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Я уже ответил в другом месте, повторюсь:

1. Что Вы сравниваете?
"000000000000000000003 000 000.00"
с
"2*272*500.00"

2. Насколько большая будет база?

P.S. Тут даже вдруг звёздочки появились - значит что-то там нечисто...
Да, там не простые пробелы, а неразрывные, код 160.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеЯ уже ответил в другом месте, повторюсь:

1. Что Вы сравниваете?
"000000000000000000003 000 000.00"
с
"2*272*500.00"

2. Насколько большая будет база?

P.S. Тут даже вдруг звёздочки появились - значит что-то там нечисто...
Да, там не простые пробелы, а неразрывные, код 160.

Автор - Hugo
Дата добавления - 18.05.2012 в 10:16
Hugo Дата: Пятница, 18.05.2012, 12:12 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Такс, вот код:

[vba]
Code
Sub copy_by_2_conditions()
      a1 = Range("A2").Value
      a2 = Range("B2").Value
      iPath$ = ActiveWorkbook.Path & "\"
      iFile$ = Dir(iPath$ & "ЮЛ.xls")
      iList1$ = "Лист1"
      iList2$ = "Лист2"
      If iFile$ = "" Then
          MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
          Exit Sub
      End If
      Application.ScreenUpdating = False

      Dim n As Integer
      n = 0

      With GetObject(iPath$ & iFile$)
          .Windows(1).Visible = True
          With .Sheets(iList1$)
              For i = 5 To 1000
                  temp = Replace(.Cells(i, 17), " ", "")
                  temp = Replace(temp, ChrW(160), "")
                  If IsNumeric(temp) Then
                      If --temp >= a2 Then
                          If .Cells(i, 4) Like "*" & a1 & "*" Then
                    n = n + 1
                    .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                          End If
                      End If
                  End If
              Next i
          End With
      End With
      Application.ScreenUpdating = True
End Sub
[/vba]
В B2 пишите число 3000000, никаких "000000000000000000003 000 000.00"


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеТакс, вот код:

[vba]
Code
Sub copy_by_2_conditions()
      a1 = Range("A2").Value
      a2 = Range("B2").Value
      iPath$ = ActiveWorkbook.Path & "\"
      iFile$ = Dir(iPath$ & "ЮЛ.xls")
      iList1$ = "Лист1"
      iList2$ = "Лист2"
      If iFile$ = "" Then
          MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
          Exit Sub
      End If
      Application.ScreenUpdating = False

      Dim n As Integer
      n = 0

      With GetObject(iPath$ & iFile$)
          .Windows(1).Visible = True
          With .Sheets(iList1$)
              For i = 5 To 1000
                  temp = Replace(.Cells(i, 17), " ", "")
                  temp = Replace(temp, ChrW(160), "")
                  If IsNumeric(temp) Then
                      If --temp >= a2 Then
                          If .Cells(i, 4) Like "*" & a1 & "*" Then
                    n = n + 1
                    .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                          End If
                      End If
                  End If
              Next i
          End With
      End With
      Application.ScreenUpdating = True
End Sub
[/vba]
В B2 пишите число 3000000, никаких "000000000000000000003 000 000.00"

Автор - Hugo
Дата добавления - 18.05.2012 в 12:12
Гость Дата: Пятница, 18.05.2012, 14:19 | Сообщение № 16
Группа: Гости
при нажатии ничего не происходит, посмотри!
 
Ответить
Сообщениепри нажатии ничего не происходит, посмотри!

Автор - Гость
Дата добавления - 18.05.2012 в 14:19
NICK31 Дата: Пятница, 18.05.2012, 14:20 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

сделал, все, как ты сказал...
К сообщению приложен файл: 0119649.rar (44.6 Kb)
 
Ответить
Сообщениесделал, все, как ты сказал...

Автор - NICK31
Дата добавления - 18.05.2012 в 14:20
Hugo Дата: Пятница, 18.05.2012, 14:45 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Проверил - у меня всё отрабатывает как нужно.
Возможно, косяк в десятичных разделителях - у меня в системе/Экселе используются точки.
Через часик поправлю - обед дело святое smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПроверил - у меня всё отрабатывает как нужно.
Возможно, косяк в десятичных разделителях - у меня в системе/Экселе используются точки.
Через часик поправлю - обед дело святое smile

Автор - Hugo
Дата добавления - 18.05.2012 в 14:45
NICK31 Дата: Пятница, 18.05.2012, 14:54 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 112
Репутация: 0 ±
Замечаний: 0% ±

а из этого файла сможешь сделать, чтобы он сохранял все таки на файл ЮЛ, а не в тот где макрос! и файл ЮЛ не закрывалсяпосле нажатия на макрос!
К сообщению приложен файл: 9805786.rar (43.6 Kb)
 
Ответить
Сообщениеа из этого файла сможешь сделать, чтобы он сохранял все таки на файл ЮЛ, а не в тот где макрос! и файл ЮЛ не закрывалсяпосле нажатия на макрос!

Автор - NICK31
Дата добавления - 18.05.2012 в 14:54
Hugo Дата: Пятница, 18.05.2012, 15:51 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Попытка №5...
[vba]
Code
Sub copy_by_2_conditions()
      a1 = Range("A2").Value
      a2 = Range("B2").Value
      iPath$ = ActiveWorkbook.Path & "\"
      iFile$ = Dir(iPath$ & "ЮЛ.xls")
      iList1$ = "Лист1"
      iList2$ = "Лист2"
      If iFile$ = "" Then
          MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
          Exit Sub
      End If
      Application.ScreenUpdating = False

      Dim sep$, n As Integer
      sep_ = Mid(1 / 2, 2, 1)
      n = 0

      With GetObject(iPath$ & iFile$)
          .Windows(1).Visible = True
          With .Sheets(iList1$)
              For i = 5 To 1000
                  temp = Replace(.Cells(i, 17), " ", "")
                  temp = Replace(temp, ChrW(160), "")
                  temp = Replace(temp, ".", sep_)
                  If IsNumeric(temp) Then
                      If --temp >= a2 Then
                          If .Cells(i, 4) Like "*" & a1 & "*" Then
                    n = n + 1
                    .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                          End If
                      End If
                  End If
              Next i
          End With
      End With
      Application.ScreenUpdating = True
End Sub
[/vba]
И сохраняет, и не закрывает.
Кстати, так было всегда.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПопытка №5...
[vba]
Code
Sub copy_by_2_conditions()
      a1 = Range("A2").Value
      a2 = Range("B2").Value
      iPath$ = ActiveWorkbook.Path & "\"
      iFile$ = Dir(iPath$ & "ЮЛ.xls")
      iList1$ = "Лист1"
      iList2$ = "Лист2"
      If iFile$ = "" Then
          MsgBox "Не найден файл! ОПЕРАЦИЯ ПРЕРВАНА"
          Exit Sub
      End If
      Application.ScreenUpdating = False

      Dim sep$, n As Integer
      sep_ = Mid(1 / 2, 2, 1)
      n = 0

      With GetObject(iPath$ & iFile$)
          .Windows(1).Visible = True
          With .Sheets(iList1$)
              For i = 5 To 1000
                  temp = Replace(.Cells(i, 17), " ", "")
                  temp = Replace(temp, ChrW(160), "")
                  temp = Replace(temp, ".", sep_)
                  If IsNumeric(temp) Then
                      If --temp >= a2 Then
                          If .Cells(i, 4) Like "*" & a1 & "*" Then
                    n = n + 1
                    .Rows(i).Copy .Parent.Sheets(iList2$).Rows(n).Cells(1)
                          End If
                      End If
                  End If
              Next i
          End With
      End With
      Application.ScreenUpdating = True
End Sub
[/vba]
И сохраняет, и не закрывает.
Кстати, так было всегда.

Автор - Hugo
Дата добавления - 18.05.2012 в 15:51
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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