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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск совпадений и копирование - Мир MS Excel

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

Excel 2010
Доброго времени суток. Знаю VBA не так углублено, чтобы решить задачу и решил попросить помощи здесь. Задача следующая: есть 2 файла. В 1-ом файле есть все выполненные транзакции по нескольким терминалам. Во 2-ом файле с несколькими листами транзакции конкретного терминала. Нужно найти совпадения столбцов даты и суммы(допустим что в 1-ом файле это столбцы G и F, а во 2-ом B и С) из 1 файла во 2(на всех листах) и найденные совпадения записать на отдельный лист 1-го.
Спасибо.
К сообщению приложен файл: 4559637.xlsx(12.9 Kb) · 4163150.xlsx(10.2 Kb)


Сообщение отредактировал Noise - Понедельник, 24.06.2019, 11:45
 
Ответить
СообщениеДоброго времени суток. Знаю VBA не так углублено, чтобы решить задачу и решил попросить помощи здесь. Задача следующая: есть 2 файла. В 1-ом файле есть все выполненные транзакции по нескольким терминалам. Во 2-ом файле с несколькими листами транзакции конкретного терминала. Нужно найти совпадения столбцов даты и суммы(допустим что в 1-ом файле это столбцы G и F, а во 2-ом B и С) из 1 файла во 2(на всех листах) и найденные совпадения записать на отдельный лист 1-го.
Спасибо.

Автор - Noise
Дата добавления - 24.06.2019 в 11:20
китин Дата: Понедельник, 24.06.2019, 11:26 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 5656
Репутация: 896 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
Noise, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
СообщениеNoise, - Прочитайте Правила форума
- Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума

Автор - китин
Дата добавления - 24.06.2019 в 11:26
boa Дата: Понедельник, 24.06.2019, 12:54 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 391
Репутация: 106 ±
Замечаний: 0% ±

2013, 365
Здравствуйте, Noise,
В стандартный модуль 1-й книги
[vba]
Код
Sub Dict()
'' Author:  boa
'' Written: 24.06.2019
'' Edited:
'  Description:

    Dim MyArray As Range, NewMyArray, Dic As Object, sKey$
    Dim a As Range, sh As Worksheet, iRow&
    
    Set Dic = CreateObject("Scripting.Dictionary")
    
    ThisWorkbook.Worksheets("Лист2").Cells.Clear
    Set MyArray = ThisWorkbook.Worksheets("Лист1").Cells(1, 1).CurrentRegion
On Error Resume Next            'что бы не останавливалось на ошибке
    For Each a In MyArray.Rows
        sKey = CStr(CDate(a.Cells(1).Value)) & CStr(a.Cells(7).Value)
        Dic.Add sKey, sKey
    Next a
    With Workbooks("4163150.xlsx")  'вторая книга. Должна быть открыта
        For Each sh In .Worksheets
            Set MyArray = sh.Cells(1, 1).CurrentRegion.Offset(1)
            For Each a In MyArray.Rows
                sKey = CStr(CDate(a.Cells(2).Value)) & CStr(a.Cells(5).Value)
                If Dic.Exists(sKey) Then 'если такой ключ уже есть, то переносим строку
                    iRow = iRow + 1
                    a.Copy ThisWorkbook.Worksheets("Лист2").Cells(iRow, 1)
                End If
            Next a
        Next sh
    End With
End Sub
[/vba]




Сообщение отредактировал boa - Понедельник, 24.06.2019, 12:55
 
Ответить
СообщениеЗдравствуйте, Noise,
В стандартный модуль 1-й книги
[vba]
Код
Sub Dict()
'' Author:  boa
'' Written: 24.06.2019
'' Edited:
'  Description:

    Dim MyArray As Range, NewMyArray, Dic As Object, sKey$
    Dim a As Range, sh As Worksheet, iRow&
    
    Set Dic = CreateObject("Scripting.Dictionary")
    
    ThisWorkbook.Worksheets("Лист2").Cells.Clear
    Set MyArray = ThisWorkbook.Worksheets("Лист1").Cells(1, 1).CurrentRegion
On Error Resume Next            'что бы не останавливалось на ошибке
    For Each a In MyArray.Rows
        sKey = CStr(CDate(a.Cells(1).Value)) & CStr(a.Cells(7).Value)
        Dic.Add sKey, sKey
    Next a
    With Workbooks("4163150.xlsx")  'вторая книга. Должна быть открыта
        For Each sh In .Worksheets
            Set MyArray = sh.Cells(1, 1).CurrentRegion.Offset(1)
            For Each a In MyArray.Rows
                sKey = CStr(CDate(a.Cells(2).Value)) & CStr(a.Cells(5).Value)
                If Dic.Exists(sKey) Then 'если такой ключ уже есть, то переносим строку
                    iRow = iRow + 1
                    a.Copy ThisWorkbook.Worksheets("Лист2").Cells(iRow, 1)
                End If
            Next a
        Next sh
    End With
End Sub
[/vba]

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

Excel 2010
boa, огромное спасибо за ответ. Если не затруднит....можно ли записать совпадение не в новый лист 1-го файла, а в тот же лист(1-ый), только взяв строку из 2-го и подставить ее именно напротив совпадения в 1-ом?


Сообщение отредактировал Noise - Понедельник, 24.06.2019, 14:16
 
Ответить
Сообщениеboa, огромное спасибо за ответ. Если не затруднит....можно ли записать совпадение не в новый лист 1-го файла, а в тот же лист(1-ый), только взяв строку из 2-го и подставить ее именно напротив совпадения в 1-ом?

Автор - Noise
Дата добавления - 24.06.2019 в 14:15
boa Дата: Понедельник, 24.06.2019, 14:57 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 391
Репутация: 106 ±
Замечаний: 0% ±

2013, 365
Можно многое, если читать внимательно код
[vba]
Код
Sub Dict()
'' Author:  boa
'' Written: 24.06.2019
'' Edited:
'  Description:

    Dim MyArray As Range, NewMyArray, Dic As Object, sKey$
    Dim a As Range, sh As Worksheet ', iRow&
    
    Set Dic = CreateObject("Scripting.Dictionary")
    
    ThisWorkbook.Worksheets("Лист2").Cells.Clear
    Set MyArray = ThisWorkbook.Worksheets("Лист1").Cells(1, 1).CurrentRegion
On Error Resume Next            'что бы не останавливалось на ошибке
    For Each a In MyArray.Rows
        sKey = CStr(CDate(a.Cells(1).Value)) & CStr(a.Cells(7).Value)
        Dic.Add sKey, a.Row
    Next a
    With Workbooks("4163150.xlsx")  'книга должна быть открыта
        For Each sh In .Worksheets
            Set MyArray = sh.Cells(1, 1).CurrentRegion.Offset(1)
            For Each a In MyArray.Rows
                sKey = CStr(CDate(a.Cells(2).Value)) & CStr(a.Cells(5).Value)
                If Dic.Exists(sKey) Then 'если такой ключ уже есть, то переносим строку
'                    iRow = iRow + 1
                    a.Copy ThisWorkbook.Worksheets("Лист1").Cells(Dic(sKey), 10)
                End If
            Next a
        Next sh
    End With
End Sub
[/vba]




Сообщение отредактировал boa - Понедельник, 24.06.2019, 14:58
 
Ответить
СообщениеМожно многое, если читать внимательно код
[vba]
Код
Sub Dict()
'' Author:  boa
'' Written: 24.06.2019
'' Edited:
'  Description:

    Dim MyArray As Range, NewMyArray, Dic As Object, sKey$
    Dim a As Range, sh As Worksheet ', iRow&
    
    Set Dic = CreateObject("Scripting.Dictionary")
    
    ThisWorkbook.Worksheets("Лист2").Cells.Clear
    Set MyArray = ThisWorkbook.Worksheets("Лист1").Cells(1, 1).CurrentRegion
On Error Resume Next            'что бы не останавливалось на ошибке
    For Each a In MyArray.Rows
        sKey = CStr(CDate(a.Cells(1).Value)) & CStr(a.Cells(7).Value)
        Dic.Add sKey, a.Row
    Next a
    With Workbooks("4163150.xlsx")  'книга должна быть открыта
        For Each sh In .Worksheets
            Set MyArray = sh.Cells(1, 1).CurrentRegion.Offset(1)
            For Each a In MyArray.Rows
                sKey = CStr(CDate(a.Cells(2).Value)) & CStr(a.Cells(5).Value)
                If Dic.Exists(sKey) Then 'если такой ключ уже есть, то переносим строку
'                    iRow = iRow + 1
                    a.Copy ThisWorkbook.Worksheets("Лист1").Cells(Dic(sKey), 10)
                End If
            Next a
        Next sh
    End With
End Sub
[/vba]

Автор - boa
Дата добавления - 24.06.2019 в 14:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск совпадений и копирование (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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