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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос для поиска значений в других книгах - Мир MS Excel

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

2013
Доброго дня!

Искал похожие темы, но не нашел подходящее решение под свой вопрос.
Если такая тема была - прошу извинить заранее)

Помогите, пожалуйста, в таком вопросе.
Есть исходная книга Эксель, в которой расположено 500 значений в ячейках A1:A500. В той же папке, что и исходная книга, есть множество других книг, в которых есть значения в столбцах от "A" до "D".
Необходимо произвести поиск каждого значения из исходной книги в других книгах, расположеных в папке с исходным файлом и в соседнюю ячейку от исходного значения, добавить имя книги, в которой найдено значение.
Сам в макросах не очень силен, но по по-немногу учусь и кое-что уже понимаю)
Буду очень благодарен за любую помощь в данном вопросе.
Спасибо!
 
Ответить
СообщениеДоброго дня!

Искал похожие темы, но не нашел подходящее решение под свой вопрос.
Если такая тема была - прошу извинить заранее)

Помогите, пожалуйста, в таком вопросе.
Есть исходная книга Эксель, в которой расположено 500 значений в ячейках A1:A500. В той же папке, что и исходная книга, есть множество других книг, в которых есть значения в столбцах от "A" до "D".
Необходимо произвести поиск каждого значения из исходной книги в других книгах, расположеных в папке с исходным файлом и в соседнюю ячейку от исходного значения, добавить имя книги, в которой найдено значение.
Сам в макросах не очень силен, но по по-немногу учусь и кое-что уже понимаю)
Буду очень благодарен за любую помощь в данном вопросе.
Спасибо!

Автор - footballplayer
Дата добавления - 24.01.2017 в 13:12
footballplayer Дата: Вторник, 24.01.2017, 15:14 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2013
На просторах интернета нашел файл, который примерно решает описанную выше задачу.

Но в данном файле проблема в том, что он обрабатывает только одно значение, которое можно ввести в поле ввода текста.
Можно ли изменить макрос данного файла, чтобы он обрабатывал циклично ячейки от А1 до А500 и консолидировал все в один файл, а не каждое найденное значение в новую книгу, как сейчас?

Помогите, пожалуйста. Вопрос очень срочный, необходимо решить задачу. Буду очень признателен за помощь.

Спасибо!
К сообщению приложен файл: post_222774.xls (42.0 Kb)
 
Ответить
СообщениеНа просторах интернета нашел файл, который примерно решает описанную выше задачу.

Но в данном файле проблема в том, что он обрабатывает только одно значение, которое можно ввести в поле ввода текста.
Можно ли изменить макрос данного файла, чтобы он обрабатывал циклично ячейки от А1 до А500 и консолидировал все в один файл, а не каждое найденное значение в новую книгу, как сейчас?

Помогите, пожалуйста. Вопрос очень срочный, необходимо решить задачу. Буду очень признателен за помощь.

Спасибо!

Автор - footballplayer
Дата добавления - 24.01.2017 в 15:14
footballplayer Дата: Вторник, 24.01.2017, 16:05 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2013
Набросал пример того, что необходимо в итоге, с приведением файлов.

К примеру, есть исходный файл (файл Исходный.xlsx). В исходном файле в столбце "A" есть значения от ячейки "A1" до ячейки "A10". В той же папке, где лежит исходный файл, есть множество других книг с разными именами ( к примеру, укажу три книги с именами: Данные1.xlsx, Данные2.xlsx, Данные3.xlsx), но во всех книгах только один лист. В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100".

Необходимо, чтобы макрос произвел поиск всех данных ячеек от "A1" до "A500" из книги Исходный.xlsx в других книгах в той же папке и результатом было бы то, что в в ячейке, соседней к искомой вставлося имя той книги, где найдено искомое значение.

В книги Исходный.xlsx укаал финальный вид, который должен быть после поиска в книгах Данные1, Данные2 и Данные3.
К сообщению приложен файл: 7766006.zip (21.4 Kb)
 
Ответить
СообщениеНабросал пример того, что необходимо в итоге, с приведением файлов.

К примеру, есть исходный файл (файл Исходный.xlsx). В исходном файле в столбце "A" есть значения от ячейки "A1" до ячейки "A10". В той же папке, где лежит исходный файл, есть множество других книг с разными именами ( к примеру, укажу три книги с именами: Данные1.xlsx, Данные2.xlsx, Данные3.xlsx), но во всех книгах только один лист. В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100".

Необходимо, чтобы макрос произвел поиск всех данных ячеек от "A1" до "A500" из книги Исходный.xlsx в других книгах в той же папке и результатом было бы то, что в в ячейке, соседней к искомой вставлося имя той книги, где найдено искомое значение.

В книги Исходный.xlsx укаал финальный вид, который должен быть после поиска в книгах Данные1, Данные2 и Данные3.

Автор - footballplayer
Дата добавления - 24.01.2017 в 16:05
sboy Дата: Вторник, 24.01.2017, 16:59 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Может ли искомое значение быть в двух и более просматриваемых книгах?


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Может ли искомое значение быть в двух и более просматриваемых книгах?

Автор - sboy
Дата добавления - 24.01.2017 в 16:59
sboy Дата: Вторник, 24.01.2017, 17:04 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Цитата footballplayer, 24.01.2017 в 16:05, в сообщении № 3 ()
В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100"

В файле "Данные2" данные в ячейке E21 - опечатка?


Яндекс: 410016850021169
 
Ответить
Сообщение
Цитата footballplayer, 24.01.2017 в 16:05, в сообщении № 3 ()
В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100"

В файле "Данные2" данные в ячейке E21 - опечатка?

Автор - sboy
Дата добавления - 24.01.2017 в 17:04
footballplayer Дата: Вторник, 24.01.2017, 17:12 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2013
Может ли искомое значение быть в двух и более просматриваемых книгах?


Нет, искомое значение должно встречатьс только один раз во всем множестве книг эксель, в которых производится поиск.
 
Ответить
Сообщение
Может ли искомое значение быть в двух и более просматриваемых книгах?


Нет, искомое значение должно встречатьс только один раз во всем множестве книг эксель, в которых производится поиск.

Автор - footballplayer
Дата добавления - 24.01.2017 в 17:12
footballplayer Дата: Вторник, 24.01.2017, 17:20 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

2013
В файле "Данные2" данные в ячейке E21 - опечатка?


Нет, в данном случае это не опечатка. В книгах, где производится поиск, данные будут в ячейках в диапазоне A1:D100. Но в разных книгах данные могут встретиться только, к примеру, в диапазоне A1:A50, а в другой книге в диапазоне A1:B40. То есть, заполненность книг может быть разная, но за пределы A1:D100 данные точно не выходят. В файле примера просто хотел показать, что значение данные могут быть в разных книгах в разных местах.
Вероятно, немного некорректно привел пример)


Сообщение отредактировал footballplayer - Вторник, 24.01.2017, 17:21
 
Ответить
Сообщение
В файле "Данные2" данные в ячейке E21 - опечатка?


Нет, в данном случае это не опечатка. В книгах, где производится поиск, данные будут в ячейках в диапазоне A1:D100. Но в разных книгах данные могут встретиться только, к примеру, в диапазоне A1:A50, а в другой книге в диапазоне A1:B40. То есть, заполненность книг может быть разная, но за пределы A1:D100 данные точно не выходят. В файле примера просто хотел показать, что значение данные могут быть в разных книгах в разных местах.
Вероятно, немного некорректно привел пример)

Автор - footballplayer
Дата добавления - 24.01.2017 в 17:20
sboy Дата: Вторник, 24.01.2017, 17:49 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Цитата footballplayer, 24.01.2017 в 17:20, в сообщении № 7 ()
но за пределы A1:D100 данные точно не выходят

E21 выходит за этот диапазон)
Пробуйте
[vba]
Код
Sub poisk_v()
Dim poisk
Dim sFolder As String, sFiles As String
Dim wB As Workbook, wFromB As Workbook
Application.ScreenUpdating = False
Set wB = ActiveWorkbook
  sFolder = wB.Path & "\"
  With wB.Sheets(1)
For x = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
    poisk = .Cells(x, 1).Value
      sFiles = Dir(sFolder & "*.xls*")
        Do While sFiles <> ""
            If sFiles = wB.Name Then GoTo lop
            Set wFromB = Workbooks.Open(sFolder & sFiles)
            For Each cl In wFromB.Sheets(1).UsedRange.Cells
                If cl.Value = poisk Then
                .Cells(x, 2).Value = sFiles
                wFromB.Close False
                Exit Do
                End If
            Next
        wFromB.Close False
lop:
        sFiles = Dir
    Loop
Next x
End With
Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 2713115.xlsm (15.5 Kb)


Яндекс: 410016850021169
 
Ответить
Сообщение
Цитата footballplayer, 24.01.2017 в 17:20, в сообщении № 7 ()
но за пределы A1:D100 данные точно не выходят

E21 выходит за этот диапазон)
Пробуйте
[vba]
Код
Sub poisk_v()
Dim poisk
Dim sFolder As String, sFiles As String
Dim wB As Workbook, wFromB As Workbook
Application.ScreenUpdating = False
Set wB = ActiveWorkbook
  sFolder = wB.Path & "\"
  With wB.Sheets(1)
For x = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
    poisk = .Cells(x, 1).Value
      sFiles = Dir(sFolder & "*.xls*")
        Do While sFiles <> ""
            If sFiles = wB.Name Then GoTo lop
            Set wFromB = Workbooks.Open(sFolder & sFiles)
            For Each cl In wFromB.Sheets(1).UsedRange.Cells
                If cl.Value = poisk Then
                .Cells(x, 2).Value = sFiles
                wFromB.Close False
                Exit Do
                End If
            Next
        wFromB.Close False
lop:
        sFiles = Dir
    Loop
Next x
End With
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - sboy
Дата добавления - 24.01.2017 в 17:49
sboy Дата: Вторник, 24.01.2017, 17:58 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Хотя вот это конструкцию лучше заменить на Find, быстрей должно работать
[vba]
Код
For Each cl In wFromB.Sheets(1).UsedRange.Cells
                If cl.Value = poisk Then
                .Cells(x, 2).Value = sFiles
                wFromB.Close False
                Exit Do
                End If
            Next
[/vba]
Если никто не поправит, с утра сделаю (рабочий день закончился))


Яндекс: 410016850021169
 
Ответить
СообщениеХотя вот это конструкцию лучше заменить на Find, быстрей должно работать
[vba]
Код
For Each cl In wFromB.Sheets(1).UsedRange.Cells
                If cl.Value = poisk Then
                .Cells(x, 2).Value = sFiles
                wFromB.Close False
                Exit Do
                End If
            Next
[/vba]
Если никто не поправит, с утра сделаю (рабочий день закончился))

Автор - sboy
Дата добавления - 24.01.2017 в 17:58
bmv98rus Дата: Вторник, 24.01.2017, 21:49 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
footballplayer,

sboy,

Позволил себе немного подправить и по вашему замечанию и в порядке. поиска. Открывать файл лучше один раз, и там искать все значения, чем наоборот.
Также, не понял на одном ли листе надо искать в данных, так что добавил для всей книги. Поиск по колонкам A:D. На всякий случай добавил проверку не заполнена ли соседняя ячейка именем файла, чтоб не перезаписывать.

[vba]
Код
Sub poisk_v()
    Dim poisk
    Dim sFolder As String, sFiles As String
    Dim wB As Workbook, wFromB As Workbook
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Set wB = ActiveWorkbook
    sFolder = wB.Path & "\"
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        If sFiles = wB.Name Then GoTo lop
        Set wFromB = Workbooks.Open(sFolder & sFiles)
        With wB.Sheets(1)
            For Each WhatFind In .Cells(1, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 1)
                If IsEmpty(WhatFind.Offset(, 1).Value) Then
                    For Each MySheet In wFromB.Sheets
                        Set result = MySheet.Range("A:D").Find(What:=WhatFind.Value, LookIn:=xlValues, LookAt:= _
                            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                        , SearchFormat:=False)
                        If Not result Is Nothing Then
                        WhatFind.Offset(, 1).Value = sFiles
                            wFromB.Close False
                            GoTo lop
                        End If
                    Next
                End If
             Next
        End With
        wFromB.Close False
lop:
        sFiles = Dir
    Loop
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 4791211.xlsm (13.8 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 24.01.2017, 21:52
 
Ответить
Сообщениеfootballplayer,

sboy,

Позволил себе немного подправить и по вашему замечанию и в порядке. поиска. Открывать файл лучше один раз, и там искать все значения, чем наоборот.
Также, не понял на одном ли листе надо искать в данных, так что добавил для всей книги. Поиск по колонкам A:D. На всякий случай добавил проверку не заполнена ли соседняя ячейка именем файла, чтоб не перезаписывать.

[vba]
Код
Sub poisk_v()
    Dim poisk
    Dim sFolder As String, sFiles As String
    Dim wB As Workbook, wFromB As Workbook
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Set wB = ActiveWorkbook
    sFolder = wB.Path & "\"
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        If sFiles = wB.Name Then GoTo lop
        Set wFromB = Workbooks.Open(sFolder & sFiles)
        With wB.Sheets(1)
            For Each WhatFind In .Cells(1, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 1)
                If IsEmpty(WhatFind.Offset(, 1).Value) Then
                    For Each MySheet In wFromB.Sheets
                        Set result = MySheet.Range("A:D").Find(What:=WhatFind.Value, LookIn:=xlValues, LookAt:= _
                            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                        , SearchFormat:=False)
                        If Not result Is Nothing Then
                        WhatFind.Offset(, 1).Value = sFiles
                            wFromB.Close False
                            GoTo lop
                        End If
                    Next
                End If
             Next
        End With
        wFromB.Close False
lop:
        sFiles = Dir
    Loop
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 24.01.2017 в 21:49
ss Дата: Среда, 06.12.2017, 18:30 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Помогите пожалуйста решить задачу. Есть два файла ексель и необходимо создать третий на основе этих двух.Единственное ,что общее у них это наименование продукта.
Вручную все перебирать полная вешалка,нужен некий макрос который создаст файл ексель на подобие (результат.xls).
К сообщению приложен файл: 1869691.rar (10.0 Kb)
 
Ответить
СообщениеПомогите пожалуйста решить задачу. Есть два файла ексель и необходимо создать третий на основе этих двух.Единственное ,что общее у них это наименование продукта.
Вручную все перебирать полная вешалка,нужен некий макрос который создаст файл ексель на подобие (результат.xls).

Автор - ss
Дата добавления - 06.12.2017 в 18:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для поиска значений в других книгах (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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