Страницы: 1
RSS
Поиск значений одного листа в другом
 
Доброго дня!
Пытаюсь написать небольшой макрос. Понемножку получается, но остановился на одном моменте. Помогите, пожалуйста, разобраться.

Во вложении есть файл с примером. В нем два листа. В Листе 1, в столбце "А" есть исходные данные для поиска. На втором листе в столбцу "А" также есть данные, среди которых и необходимо найти данные из столбца "А" Листа 1. Необходимо произвести поиск каждого значения из ячеек столбца "А" Листа 1 в ячейках столбца "А" Листа 2 поочередно. На Листе 2 искомое значение может повторяться много раз.
Подскажите, пожалуйста, как можно произвести такой поиск, чтобы брать значение из ячейки и искать его на втором Листе столько, сколько оно там встречается и с каждым найденным расположением можно было производить какое-либо действие и продолжать поиск дальше?

Спасибо!
 
В справке по Find есть пример c FindNext
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо за подсказку)

Воспользовался справкой по команде FindNext. С помощью нее написал небольшой код.
Код работает в примитивном виде, ищет и копирует данные из ячейки с офсетом (0,2) от той, которая ищется на "Листе2"
Но все найденные значения копируются в одну и ту же ячейку на "Листе 1", в ячейку "С2", которая является оффсетом (0,2) от искомой.
В моем случае необходимо, чтобы в зависимости от найденного значения, оно копировалось в одну из ячеек с именем от "Столбец 1" до "Столбец 12"
Вероятно, я очень непонятливо описываю (

Если сказать проще, необходимо каждое значение, найденное в цикле FindNext перехватить в отдельную переменную, чтобы с ней можно было что-то делать
в дальнейшем.
Во вложение добавил файл в таком виде, как он должен быть, если ищется значение из ячейки "А2" "Листа1" на "Листе2"

Подскажите, пожалуйста, в сторону каких инструментов VBA необходимо смотреть?
 
Вроде, получилось подкорректировать код так, чтобы он работал, как описано в топике выше.
Но теперь споткнулся на одном моменте и никак не могу пойти дальше.
Код
Sub test()


Dim findcell As Variant

Set ws1 = ThisWorkbook.Worksheets("Лист1")
Set ws2 = ThisWorkbook.Worksheets("Лист2")
Set findcell = ws1.Range("A2")



With ws2.Range("A1:A500")
    Set c = .Find(findcell.Value, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do          
           b = c.Offset(0, 2).Value

           Select Case b
           Case "111"
                    findcell.Offset(0, 2).Value = b
            Case "222"
                   findcell.Offset(0, 3).Value = b
            Case "333"
                   findcell.Offset(0, 4).Value = b
            Case "444"
                   findcell.Offset(0, 5).Value = b
            Case "555"
                   findcell.Offset(0, 6).Value = b
            Case "666"
                   findcell.Offset(0, 8).Value = b
            Case "777"
                   findcell.Offset(0, 9).Value = b
            Case "888"
                   findcell.Offset(0, 10).Value = b
            Case "999"
                   findcell.Offset(0, 11).Value = b
            Case "101010"
                   findcell.Offset(0, 12).Value = b
            Case "111111"
                   findcell.Offset(0, 13).Value = b
            Case "121212"
                   findcell.Offset(0, 14).Value = b
                   End Select
      
            Set c = .FindNext(c)
            If c Is Nothing Then
                GoTo DoneFinding
            End If
            Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
DoneFinding:
End With
End Sub
Данный код работает с данными из ячейки "А2" листа "Лист 1".
Но на практике в стобце "А" ячеек может быть и 100 и 1000 и больше.
Подскажите, пожалуйста, как доработать данный код, чтобы он поочередно применялся сначала к ячейке "А2" листа "Лист 1",
далее к "А3", "А4" и к стольким ячейкам, сколько есть в столбце "А" листа "Лист 1", откуда и берутся значения, которые ищутся в книге.

Примерно понимаю, что необходимо оформить данный скрипт в цикл, но мои знания в VBA пока не позволяют так прямо сразу понять как именно
необходимо зациклить)

Спасибо!
Изменено: footballplayer - 24.02.2017 16:06:43
 
Скрытый текст

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, спасибо за ответ!

Скопировал Ваш код, но сразу же возникла ошибка Syntax error на строке:
Код
Const lSTEP_COL As Long = 4 ' шаг смещения
Возможно, мне необходимо подключить какие-либо библиотеки в VBA-редакторе, чтобы код заработал?
 
footballplayer, это обычная константа. У меня нет ошибки при выполнении макроса. Приложите проблемный файл.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, прикладываю во вложении файл. Такое ощущение, что у меня в редакторе что-то не включено или не установлено)
Изменено: footballplayer - 24.02.2017 16:06:23
 
Проблема на Вашей стороне при копипасте текста макроса из браузера в ВБА.
---
Добавлен цикл по ячейкам с искомыми значениями.
Скрытый текст
Изменено: JayBhagavan - 24.02.2017 18:50:35

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, да, Вы правы. Сейчас все работает.

В Вашем файле код работает отлично! Спасибо!
Если несложно, подскажите, пожалуйста, можно ли его применить ко всем ячейкам столбца "А" листа "Лист1"?
В настоящий момент код применяется только к той ячейке, которая указана в переменной "findcell".

Спасибо!
 
Файл перезалил.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, спасибо!!! Работает отлично!
Страницы: 1
Наверх