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

Вход

Регистрация

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

 

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

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

Добрый день!

Нужна помощь в написании/редактировании макроса.

Есть несколько файлов в одной папке. в каждом
несколько листов.

Задача: в новом файле есть уникальные значения в
столбце B. Нужно просмотреть файлы в этой же папке и найти значения из
столбца B. Значение может быть в нескольких файлах. Если найдено значение то
записать имя найдено файла в столбце I, если найдено во втором файле, то
записать имя второго файла в столбец J и тд

На просторах интернета нашел макрос который
просматривает значения из столбца А и пишет в столбец B, но пишет только одно
имя файла.

Прошу ГУРУ помочь - отредактировать макрос

[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]
 
Ответить
СообщениеДобрый день!

Нужна помощь в написании/редактировании макроса.

Есть несколько файлов в одной папке. в каждом
несколько листов.

Задача: в новом файле есть уникальные значения в
столбце B. Нужно просмотреть файлы в этой же папке и найти значения из
столбца B. Значение может быть в нескольких файлах. Если найдено значение то
записать имя найдено файла в столбце I, если найдено во втором файле, то
записать имя второго файла в столбец J и тд

На просторах интернета нашел макрос который
просматривает значения из столбца А и пишет в столбец B, но пишет только одно
имя файла.

Прошу ГУРУ помочь - отредактировать макрос

[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]

Автор - KatchenkovRE
Дата добавления - 11.04.2023 в 13:46
Pelena Дата: Вторник, 11.04.2023, 15:55 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19181
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Судя по описанию, примерно так можно

[vba]
Код
Sub poisk_v()
    Dim poisk
    Dim sFolder As String, sFiles As String, n As Long
    Dim wB As Workbook, wFromB As Workbook, WhatFind As Range, MySheet As Worksheet, result As Range
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Set wB = ThisWorkbook
    sFolder = wB.Path & "\"
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        If sFiles <> wB.Name Then
            Set wFromB = Workbooks.Open(sFolder & sFiles)
            With wB.Sheets(1)
                For Each WhatFind In .Cells(1, 2).Resize(.Cells(Rows.Count, 2).End(xlUp).Row, 1)
                    For Each MySheet In wFromB.Sheets
                        Set result = MySheet.Range("B:B").Find(What:=WhatFind.Value, LookIn:=xlValues, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                    , SearchFormat:=False)
                        If Not result Is Nothing Then
                            n = Application.Max(7, .Cells(WhatFind.Row, .Columns.Count).End(xlToLeft).Column - 1)
                            WhatFind.Offset(, n).Value = sFiles
                        End If
                    Next
                Next
            End With
            wFromB.Close False
        End If
        sFiles = Dir
    Loop
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Судя по описанию, примерно так можно

[vba]
Код
Sub poisk_v()
    Dim poisk
    Dim sFolder As String, sFiles As String, n As Long
    Dim wB As Workbook, wFromB As Workbook, WhatFind As Range, MySheet As Worksheet, result As Range
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Set wB = ThisWorkbook
    sFolder = wB.Path & "\"
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        If sFiles <> wB.Name Then
            Set wFromB = Workbooks.Open(sFolder & sFiles)
            With wB.Sheets(1)
                For Each WhatFind In .Cells(1, 2).Resize(.Cells(Rows.Count, 2).End(xlUp).Row, 1)
                    For Each MySheet In wFromB.Sheets
                        Set result = MySheet.Range("B:B").Find(What:=WhatFind.Value, LookIn:=xlValues, LookAt:= _
                    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                    , SearchFormat:=False)
                        If Not result Is Nothing Then
                            n = Application.Max(7, .Cells(WhatFind.Row, .Columns.Count).End(xlToLeft).Column - 1)
                            WhatFind.Offset(, n).Value = sFiles
                        End If
                    Next
                Next
            End With
            wFromB.Close False
        End If
        sFiles = Dir
    Loop
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Pelena
Дата добавления - 11.04.2023 в 15:55
KatchenkovRE Дата: Среда, 12.04.2023, 11:16 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Спасибо! Огромное спасибо. Выручили очень сильно
 
Ответить
СообщениеСпасибо! Огромное спасибо. Выручили очень сильно

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

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