Страницы: 1
RSS
выбор строк по нескольким условиям, метод find или что то другое
 
Добрый день дорогие форумчане! Помогите пожалуйста глупенькой девушке с этими трудными для меня макросами.. задали мне разобраться с документом который содержит 3 листа, на первых 2 данные за разные промежутки времени (1 лист- один месяц, 2 лист другой месяц) а на 3-ий лист нужен макрос который ищет строки которые содержат определенный номер (в данном случае "111", "333", "444") на листе 1 и 2 и вставляет в форму таблицы на листе 3. Пробовала макрорекодером сделать поиск, но не поняла как несколько условий указать и как потом все это выбрать и скопировать туда куда надо... Помогите кто чем может плиииз!(
 
без макросов
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Может так?
 
Цитата
Помогите пожалуйста глупенькой девушке с этими трудными для меня макросами.
Макрос в модуль листа 3, разницу можно проставить формулой

Код
Option Explicit

Sub Poisk_Carry()
Dim Nomer As Integer
Dim FoundNomer As Range
Dim Wid As String
Dim i As Long
Dim j As Integer
Dim iLastRow As Long
Dim FirstAdr As String
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
      Range("C3:D" & iLastRow).ClearContents
      Range("F3:G" & iLastRow).ClearContents
        ' цикл по номерам в столбце А
    For i = 3 To iLastRow
        Nomer = Cells(i, 1)
      For j = 1 To 2   'цикл по листам
       With Sheets("Лист" & j)
            Set FoundNomer = .Columns("A").Find(Nomer, , xlValues, xlWhole)
        If Not FoundNomer Is Nothing Then
            FirstAdr = FoundNomer.Address     'адрес первого найденного номера
            Wid = Cells(i, 2)                 ' вид продукта
          Do
            If .Cells(FoundNomer.Row, 3) = Wid Then
                Cells(i, 2 + j) = .Cells(FoundNomer.Row, 5) 'цена2 неделя 1
                Cells(i, 5 + j) = .Cells(FoundNomer.Row, 7) 'цена2 неделя 2
            End If
            Set FoundNomer = .Columns("A").FindNext(FoundNomer)
          Loop While FoundNomer.Address <> FirstAdr
        End If
       End With
      Next
    Next
End Sub
 
 
Kuzmich Спасибо огромное !)) Только я не поняла как выполняется поиск) Ведь если мне понадобится добавить строки с другим номером, что мне надо поменять?))
 
Цитата
Только я не поняла как выполняется поиск
Поиск осуществляется методом Find и FindNext, почитайте в справке.
Попробуйте добавить строки с другими номерами и запустить макрос.
 
Kuzmich все я поняла принцип работы этого макроса!)) только я немного не это имела ввиду)) я хотела чтобы в find как то было прописано несколько условий поиска ( "111" "222" "444") и макрос искал на первых двух листах все строки с этими номерами и вставлял их на лист 3, а не подтягивал данные как ВПР)) ну допустим на листе 3 вся таблица пустая кроме шапки и я в макросе меняю искомые номера которые мне нужны в этот момент допустим не ( "111" "222" "444") а ("222" "333") и он ищет и вставляет)) помогите пожалуйста добрый человек))
 
A And("111";"222";"333") не пробовали?
 
SerArtur как это все впихнуть в макрос Kuzmich?(( я вообще дурочка блин в этом деле((  
 
Номера можно задавать в массиве MyArray
Попробуйте такой вариант
Код
Option Explicit

Sub Poisk_Carry()
Dim Nomer As Integer
Dim FoundNomer As Range
Dim Wid As String
Dim i As Long
Dim j As Integer
Dim iLastRow As Long
Dim FirstAdr As String
Dim MyArray
    MyArray = Array("111", "333", "444")
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
      Range("A3:D" & iLastRow).ClearContents
      Range("F3:G" & iLastRow).ClearContents
        ' цикл по номерам в массиве MyArray
    For i = 0 To UBound(MyArray)
        Nomer = MyArray(i)
      For j = 1 To 2   'цикл по листам
       With Sheets("Лист" & j)
            Set FoundNomer = .Columns("A").Find(Nomer, , xlValues, xlWhole)
        If Not FoundNomer Is Nothing Then
            FirstAdr = FoundNomer.Address     'адрес первого найденного номера
          Do
            iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
                Cells(iLastRow, 1) = .Cells(FoundNomer.Row, 1)     'номер
                Cells(iLastRow, 2) = .Cells(FoundNomer.Row, 3)     'вид
                Cells(iLastRow, 2 + j) = .Cells(FoundNomer.Row, 5) 'цена2 неделя 1
                Cells(iLastRow, 5 + j) = .Cells(FoundNomer.Row, 7) 'цена2 неделя 2
            Set FoundNomer = .Columns("A").FindNext(FoundNomer)
          Loop While FoundNomer.Address <> FirstAdr
        End If
       End With
      Next
    Next
End Sub
 
Пока не знаю как совместить данные листа 1 и листа 2 по номеру и виду на листе 3
 
Kuzmich ну я представляю себе это как ( если лист 1 и лист 2 совпадают по номеру, то проверяем на совпадение вида и как то это склеиваем) ...
 
Тут сложность в том, что на листе 1 у вас может быть три вхождения номера 111, а на листе 2 их вообще может не быть,
или будет только одно вхождение, а номера нужно совместить с видами и распределить по неделям в одну строку.
 
Kuzmich а если предположить, что у нас на листе 1 и 2 все одинаково кроме значений сумм, т.е. на листе 1, 3 вхождения 111 и на листе 2 тоже только 3 вхождения 111...?
 
Попробуйте такой макрос на листе3
Код
Sub Poisk_Carry()
Dim Nomer As Integer
Dim FoundNomer As Range
Dim Wid As String
Dim i As Long
Dim iLastRow As Long
Dim FirstAdr As String
Dim MyArray
    MyArray = Array("111", "333", "444")
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
      Range("A3:D" & iLastRow).ClearContents
      Range("F3:G" & iLastRow).ClearContents
        ' цикл по номерам в массиве MyArray
    For i = 0 To UBound(MyArray)
        Nomer = MyArray(i)
        ' ищем номера на листе1 и переносим на лист3
       With Sheets("Лист1")
            Set FoundNomer = .Columns("A").Find(Nomer, , xlValues, xlWhole)
        If Not FoundNomer Is Nothing Then
            FirstAdr = FoundNomer.Address     'адрес первого найденного номера
          Do
            iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
                Cells(iLastRow, 1) = .Cells(FoundNomer.Row, 1) 'номер
                Cells(iLastRow, 2) = .Cells(FoundNomer.Row, 3) 'вид
                Cells(iLastRow, 3) = .Cells(FoundNomer.Row, 5) 'цена2 неделя 1
                Cells(iLastRow, 6) = .Cells(FoundNomer.Row, 7) 'цена2 неделя 2
            Set FoundNomer = .Columns("A").FindNext(FoundNomer)
          Loop While FoundNomer.Address <> FirstAdr
        End If
       End With
    Next
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    ' ищем номера с листа3 на листе2
    With Sheets("Лист2")
      For i = 3 To iLastRow
            Nomer = Cells(i, 1)
            Set FoundNomer = .Columns("A").Find(Nomer, , xlValues, xlWhole)
        If Not FoundNomer Is Nothing Then
            FirstAdr = FoundNomer.Address     'адрес первого найденного номера
            Wid = Cells(i, 2)                 ' вид продукта
          Do
            If .Cells(FoundNomer.Row, 3) = Wid Then
                Cells(i, 4) = .Cells(FoundNomer.Row, 5) 'цена2 неделя 1
                Cells(i, 7) = .Cells(FoundNomer.Row, 7) 'цена2 неделя 2
            End If
            Set FoundNomer = .Columns("A").FindNext(FoundNomer)
          Loop While FoundNomer.Address <> FirstAdr
        End If
      Next
    End With
End Sub
 
 
Kuzmich огромное спасибо!!)))))
Страницы: 1
Наверх