Искал похожие темы, но не нашел подходящее решение под свой вопрос. Если такая тема была - прошу извинить заранее)
Помогите, пожалуйста, в таком вопросе. Есть исходная книга Эксель, в которой расположено 500 значений в ячейках A1:A500. В той же папке, что и исходная книга, есть множество других книг, в которых есть значения в столбцах от "A" до "D". Необходимо произвести поиск каждого значения из исходной книги в других книгах, расположеных в папке с исходным файлом и в соседнюю ячейку от исходного значения, добавить имя книги, в которой найдено значение. Сам в макросах не очень силен, но по по-немногу учусь и кое-что уже понимаю) Буду очень благодарен за любую помощь в данном вопросе. Спасибо!
Доброго дня!
Искал похожие темы, но не нашел подходящее решение под свой вопрос. Если такая тема была - прошу извинить заранее)
Помогите, пожалуйста, в таком вопросе. Есть исходная книга Эксель, в которой расположено 500 значений в ячейках A1:A500. В той же папке, что и исходная книга, есть множество других книг, в которых есть значения в столбцах от "A" до "D". Необходимо произвести поиск каждого значения из исходной книги в других книгах, расположеных в папке с исходным файлом и в соседнюю ячейку от исходного значения, добавить имя книги, в которой найдено значение. Сам в макросах не очень силен, но по по-немногу учусь и кое-что уже понимаю) Буду очень благодарен за любую помощь в данном вопросе. Спасибо!footballplayer
На просторах интернета нашел файл, который примерно решает описанную выше задачу. Но в данном файле проблема в том, что он обрабатывает только одно значение, которое можно ввести в поле ввода текста. Можно ли изменить макрос данного файла, чтобы он обрабатывал циклично ячейки от А1 до А500 и консолидировал все в один файл, а не каждое найденное значение в новую книгу, как сейчас? Помогите, пожалуйста. Вопрос очень срочный, необходимо решить задачу. Буду очень признателен за помощь. Спасибо!
На просторах интернета нашел файл, который примерно решает описанную выше задачу. Но в данном файле проблема в том, что он обрабатывает только одно значение, которое можно ввести в поле ввода текста. Можно ли изменить макрос данного файла, чтобы он обрабатывал циклично ячейки от А1 до А500 и консолидировал все в один файл, а не каждое найденное значение в новую книгу, как сейчас? Помогите, пожалуйста. Вопрос очень срочный, необходимо решить задачу. Буду очень признателен за помощь. Спасибо!footballplayer
Набросал пример того, что необходимо в итоге, с приведением файлов.
К примеру, есть исходный файл (файл Исходный.xlsx). В исходном файле в столбце "A" есть значения от ячейки "A1" до ячейки "A10". В той же папке, где лежит исходный файл, есть множество других книг с разными именами ( к примеру, укажу три книги с именами: Данные1.xlsx, Данные2.xlsx, Данные3.xlsx), но во всех книгах только один лист. В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100".
Необходимо, чтобы макрос произвел поиск всех данных ячеек от "A1" до "A500" из книги Исходный.xlsx в других книгах в той же папке и результатом было бы то, что в в ячейке, соседней к искомой вставлося имя той книги, где найдено искомое значение.
В книги Исходный.xlsx укаал финальный вид, который должен быть после поиска в книгах Данные1, Данные2 и Данные3.
Набросал пример того, что необходимо в итоге, с приведением файлов.
К примеру, есть исходный файл (файл Исходный.xlsx). В исходном файле в столбце "A" есть значения от ячейки "A1" до ячейки "A10". В той же папке, где лежит исходный файл, есть множество других книг с разными именами ( к примеру, укажу три книги с именами: Данные1.xlsx, Данные2.xlsx, Данные3.xlsx), но во всех книгах только один лист. В книгах, в которых производится поиск, данные расположены в ячейках "A1:D100".
Необходимо, чтобы макрос произвел поиск всех данных ячеек от "A1" до "A500" из книги Исходный.xlsx в других книгах в той же папке и результатом было бы то, что в в ячейке, соседней к искомой вставлося имя той книги, где найдено искомое значение.
В книги Исходный.xlsx укаал финальный вид, который должен быть после поиска в книгах Данные1, Данные2 и Данные3.footballplayer
Нет, в данном случае это не опечатка. В книгах, где производится поиск, данные будут в ячейках в диапазоне A1:D100. Но в разных книгах данные могут встретиться только, к примеру, в диапазоне A1:A50, а в другой книге в диапазоне A1:B40. То есть, заполненность книг может быть разная, но за пределы A1:D100 данные точно не выходят. В файле примера просто хотел показать, что значение данные могут быть в разных книгах в разных местах. Вероятно, немного некорректно привел пример)
Нет, в данном случае это не опечатка. В книгах, где производится поиск, данные будут в ячейках в диапазоне A1:D100. Но в разных книгах данные могут встретиться только, к примеру, в диапазоне A1:A50, а в другой книге в диапазоне A1:B40. То есть, заполненность книг может быть разная, но за пределы A1:D100 данные точно не выходят. В файле примера просто хотел показать, что значение данные могут быть в разных книгах в разных местах. Вероятно, немного некорректно привел пример)footballplayer
Сообщение отредактировал footballplayer - Вторник, 24.01.2017, 17:21
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
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
Позволил себе немного подправить и по вашему замечанию и в порядке. поиска. Открывать файл лучше один раз, и там искать все значения, чем наоборот. Также, не понял на одном ли листе надо искать в данных, так что добавил для всей книги. Поиск по колонкам 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]
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
Помогите пожалуйста решить задачу. Есть два файла ексель и необходимо создать третий на основе этих двух.Единственное ,что общее у них это наименование продукта. Вручную все перебирать полная вешалка,нужен некий макрос который создаст файл ексель на подобие (результат.xls).
Помогите пожалуйста решить задачу. Есть два файла ексель и необходимо создать третий на основе этих двух.Единственное ,что общее у них это наименование продукта. Вручную все перебирать полная вешалка,нужен некий макрос который создаст файл ексель на подобие (результат.xls).ss