Помогите, пожалуйста, разобраться в вопросе. Появилась необходимость поиска значений находящихся на первом листе, во втором листе с данными и перенос найденного на третий лист книги Эксель. Почитав, поискав решение похожей задачи, нашел в инете код, который практически полностью удовлетворяет необходимостям в поиске и немного переработал его под свои задачи
[vba]
Код
Option Explicit
Sub pois_na_liste() Dim found_value As Range Dim iLastRowpoisk As Long, iLastRowresult As Long, i As Long Dim poisk As Worksheet, gde_poisk As Worksheet, result As Worksheet Dim firstAddress As String
Set poisk = Worksheets("poisk") Set gde_poisk = Worksheets("gde_poisk") Set result = Worksheets("result")
iLastRowpoisk = poisk.Cells(Rows.Count, 1).End(xlUp).Row If iLastRowpoisk = 1 Then MsgBox "Нет данных" Exit Sub End If
For i = 1 To iLastRowpoisk With result
Set found_value = .Columns(1).Find(poisk.Cells(i, 1), LookIn:=xlFormulas, lookat:=xlPart)
Данный код не подходит только в одной моменте. Мне необходимо, чтобы значение из листа "poisk" искалось в листе "gde_poisk" и, если значение найдено, то вся строка листа "gde_poisk" копировалась в лист "result". Данный код ищет и переносит только найденную ячейку из искомого листа. Примерно понимаю, что весь вопрос в этой строке: [vba]
Код
.Cells(iLastRowresult, 1) = poisk.Cells(i, 1)
[/vba] Пытался сделать так: [vba]
Код
.Rows(iLastRowresult) = gde_poisk.Rows(i)
[/vba]
Но таким образом перенос не происходит вовсе. Помогите, пожалуйста, разобраться.
Добрый вечер!
Помогите, пожалуйста, разобраться в вопросе. Появилась необходимость поиска значений находящихся на первом листе, во втором листе с данными и перенос найденного на третий лист книги Эксель. Почитав, поискав решение похожей задачи, нашел в инете код, который практически полностью удовлетворяет необходимостям в поиске и немного переработал его под свои задачи
[vba]
Код
Option Explicit
Sub pois_na_liste() Dim found_value As Range Dim iLastRowpoisk As Long, iLastRowresult As Long, i As Long Dim poisk As Worksheet, gde_poisk As Worksheet, result As Worksheet Dim firstAddress As String
Set poisk = Worksheets("poisk") Set gde_poisk = Worksheets("gde_poisk") Set result = Worksheets("result")
iLastRowpoisk = poisk.Cells(Rows.Count, 1).End(xlUp).Row If iLastRowpoisk = 1 Then MsgBox "Нет данных" Exit Sub End If
For i = 1 To iLastRowpoisk With result
Set found_value = .Columns(1).Find(poisk.Cells(i, 1), LookIn:=xlFormulas, lookat:=xlPart)
Данный код не подходит только в одной моменте. Мне необходимо, чтобы значение из листа "poisk" искалось в листе "gde_poisk" и, если значение найдено, то вся строка листа "gde_poisk" копировалась в лист "result". Данный код ищет и переносит только найденную ячейку из искомого листа. Примерно понимаю, что весь вопрос в этой строке: [vba]
Код
.Cells(iLastRowresult, 1) = poisk.Cells(i, 1)
[/vba] Пытался сделать так: [vba]
Код
.Rows(iLastRowresult) = gde_poisk.Rows(i)
[/vba]
Но таким образом перенос не происходит вовсе. Помогите, пожалуйста, разобраться.giovanni
Сообщение отредактировал giovanni - Вторник, 24.10.2017, 21:43
Прошу прощения, код, выложенный вначале топика - выложен некорректно. Вот правильный код:
[vba]
Код
Sub poisk_na_liste() Dim found_value As Range Dim iLastRowpoisk As Long, iLastRowresult As Long, i As Long Dim poisk As Worksheet, gde_poisk As Worksheet, result As Worksheet Dim firstAddress As String
Set poisk = Worksheets("poisk") Set gde_poisk = Worksheets("gde_poisk") Set result = Worksheets("result")
iLastRowpoisk = poisk.Cells(Rows.Count, 1).End(xlUp).Row If iLastRowpoisk = 1 Then MsgBox "Нет данных" Exit Sub End If ' For i = 1 To iLastRowpoisk With gde_poisk
Set found_value = .Columns(1).Find(poisk.Cells(i, 1), LookIn:=xlFormulas, lookat:=xlPart)
If Not found_value Is Nothing Then
With result iLastRowresult = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(iLastRowresult, 1).EntireRow = gde_poisk.Cells(i, 1).EntireRow End With
End If End With Next i
End Sub
[/vba]
Подставил Ваш код, но переноса данных не происходит, лист "result" пустой.
Приложил файл-пример. Вероятно, я что-то делаю не так.
Прошу прощения, код, выложенный вначале топика - выложен некорректно. Вот правильный код:
[vba]
Код
Sub poisk_na_liste() Dim found_value As Range Dim iLastRowpoisk As Long, iLastRowresult As Long, i As Long Dim poisk As Worksheet, gde_poisk As Worksheet, result As Worksheet Dim firstAddress As String
Set poisk = Worksheets("poisk") Set gde_poisk = Worksheets("gde_poisk") Set result = Worksheets("result")
iLastRowpoisk = poisk.Cells(Rows.Count, 1).End(xlUp).Row If iLastRowpoisk = 1 Then MsgBox "Нет данных" Exit Sub End If ' For i = 1 To iLastRowpoisk With gde_poisk
Set found_value = .Columns(1).Find(poisk.Cells(i, 1), LookIn:=xlFormulas, lookat:=xlPart)
If Not found_value Is Nothing Then
With result iLastRowresult = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(iLastRowresult, 1).EntireRow = gde_poisk.Cells(i, 1).EntireRow End With
End If End With Next i
End Sub
[/vba]
Подставил Ваш код, но переноса данных не происходит, лист "result" пустой.
Приложил файл-пример. Вероятно, я что-то делаю не так.giovanni
Но, оказалось, что этот макрос не совсем то, что нужно. Либо я его так под себя подкорректировал, что сделал какую-то ошибку в коде. Если я на листе "poisk" вставляю, к примеру адидас и хома, то в лист "result" переносятся строки адидас и пума, то есть, первая и вторая строка с листа, в котором производится поиск - "gde_poisk". (
UPD: после некоторых исправлений, макрос заработал. Спасибо!
Но, оказалось, что этот макрос не совсем то, что нужно. Либо я его так под себя подкорректировал, что сделал какую-то ошибку в коде. Если я на листе "poisk" вставляю, к примеру адидас и хома, то в лист "result" переносятся строки адидас и пума, то есть, первая и вторая строка с листа, в котором производится поиск - "gde_poisk". (
UPD: после некоторых исправлений, макрос заработал. Спасибо!giovanni