Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как перенести по уникальному значению данные с одного листа на другой
 
Добрый день.

Как поменять код чтобы в 22 счет на листе 1 перенеслась сумма и компания (но логика остальная сохранилась бы)?
Код
Sub СопоставитьСчета()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim j As Long
    Dim currentRow As Long
    Dim companyFound As Boolean
    
    ' Установим ссылки на листы по индексам
    Set ws1 = ThisWorkbook.Sheets(1) ' Первый лист в книге
    Set ws2 = ThisWorkbook.Sheets(2) ' Второй лист в книге
    
    ' Найдем последнюю строку в каждом листе
    lastRow1 = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
    lastRow2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
    
    ' Проходим по всем счетам на Листе1
    For i = 2 To lastRow1 + 1000 ' Начинаем с 2, чтобы пропустить заголовок на Листе1, + 1000 добавлено эксперементальным путем
        
        If ws1.Cells(i, 1).Value <> "" Then ' Проверяем, что счет не пустой
            
            ' Ищем совпадения по счету и компании на Листе2, + 1000 добавлено эксперементальным путем
            For j = 2 To lastRow2 + 1000
                
                If ws1.Cells(i, 1).Value = ws2.Cells(j, 1).Value Then ' Совпадение по счету
                    
                    companyFound = False
                    
                    If ws1.Cells(i, 2).Value = ws2.Cells(j, 2).Value Then ' Совпадение по компании
                        companyFound = True
                        ' Переносим сумму из Листа2 в Лист1
                        ws1.Cells(i, 3).Value = ws2.Cells(j, 3).Value
                    End If
                    
                End If
                
            Next j
            
            ' Если компания не найдена на Листе2 для данного счета, добавляем новые строки с компаниями из Листа2 под последней найденной компанией для этого счета на Листе1
            If Not companyFound Then
                
                For j = 2 To lastRow2
                    
                    If ws1.Cells(i, 1).Value = ws2.Cells(j, 1).Value And _
                       Application.WorksheetFunction.CountIf(ws1.Range("B:B"), ws2.Cells(j, 2).Value) = 0 Then
                    
                        i = i + 1 ' Переходим к следующей строке для вставки новой компании

                        ' Вставляем новую строку и переносим данные из Листа2 в Лист1
                        ws1.Rows(i).Insert Shift:=xlDown

                        ws1.Cells(i, 1).Value = ws2.Cells(j, 1).Value
                        ws1.Cells(i, 2).Value = ws2.Cells(j, 2).Value
                        ws1.Cells(i, 3).Value = ws2.Cells(j, 3).Value

                    End If
                    
                Next j
                
            End If
            
        End If
        
    Next i
    
    MsgBox "Сопоставление завершено!"
End Sub
Изменено: roma roma - 11.05.2025 12:00:05
Как перенести по уникальному значению данные с одного листа на другой
 
Цитата
написал:
roma roma ,  там беда в том что в цикле переменную lastRow1 менять нет смысла (да она и не меняется), я сразу написал что циклом нужно идти снизу вверх.Ну вот так поправил - кнопка похоже из моего файла позаимствована, пусть и чуть кода тоже будет ))Я перевернул цикл, добавил ещё названия, ну и закомментировал лишнее
Спасибо большое! В целом уже похоже на желаемый результат. Но я видимо упустил один момент, внес небольшие изменения в исходный файл, во первых на листе 2 по счету 67 не должно быть не уникальных компаний - поправил, и на листе 1 добавил сторку 5.
В результате логика должна быть такая - макрос видит совпадение по счету 67, все что далее описано необходимо дописать в макрос - далее он определяет что у счета 67 на листе 1 есть две компании(их порядок может быть хаотичным), нужно проверить есть ли эти две компании по счету 67 на листе 2. Если есть соответственно переносим сумму напротив данной компании в колонку сумма. В данном случае сумма по двум компаниям перенесется, а еще по двум уже нужно вставить на новые строки добавленные ниже. Подскажите пожалуйста как можно скорректировать макрос.
Изменено: roma roma - 10.05.2025 23:11:22
Как перенести по уникальному значению данные с одного листа на другой
 
Подскажите пожалуйста как в файле макр (11).xlsm поправить макрос "Сопоставить счета". Он нормально работает, но отрабатывает только первое совпадение (по счету 67). Нужно чтобы и другие совпадение отрабатывал, в данном случае по счету 91.
не работает макрос простой
 
Спасибо! Получается я его как то не так сохранил.
не работает макрос простой
 
Подскажите почему на строке Set ws2 = ThisWorkbook.Sheets(2) ' Второй лист в книге
Код
Sub СопоставитьСчета()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim j As Long
    Dim foundMatch As Boolean
    
    ' Установим ссылки на листы по индексам
    Set ws1 = ThisWorkbook.Sheets(1) ' Первый лист в книге
    Set ws2 = ThisWorkbook.Sheets(2) ' Второй лист в книге

End Sub
макрос ломается
Subscript out of range
Как перенести по уникальному значению данные с одного листа на другой
 
Еще добавлю что на листе1 никакие данные затираться не должны (только добавляться)
Как перенести по уникальному значению данные с одного листа на другой
 
Цитата
написал:
На втором листе всегда так всё сгруппировано, или может быть перемешано? Если перемешано - можно ли отсортировать по счетам?
На втором листе может быть перемешано, можно отсоритровать, второй лист это источник информации, результат на первом листе.
Как перенести по уникальному значению данные с одного листа на другой
 
Цитата
написал:
roma roma , Добрый день.Чтобы писать макрос (и не переписывать потом всё) нужно знать все детали.Например - интересуют только строки где нет суммы? Иначе почему никак не изменилась сумма у счёт 91?На втором листе всегда так всё сгруппировано, или может быть перемешано? Если перемешано - можно ли отсортировать по счетам?Ну а с тем что видим алгоритм простой - запомнили адреса групп второго листа, затем циклом по первому снизу вверх проверяем на пустоту и копипастим запомненные адреса...
Нужен чтобы макрос сопоставил колонку счет из листа1 и колонку счет из листа2. При сопоставлении он обнаруживает наличие в данных колонках одинаковых счетов (67). Дальше он считает количество совпавших строк на листе2 по данному счету (67), их четыре, задача перенести эти 4 строки (а точнее перенести содержимое колонок компания и сумма по данным 4 строкам) на лист1 на строку ниже счета 67 - между счетом 67 и 91 (то есть другими словами на листе1 придется вставить дополнительные три строки между счетом 67 и 91). В результате на листе1 будет четыре счета 67 (один там был и три мы добавили). К этим четырем строкам нужно перенести как я ранее писал содержимое колонок компания и сумма.
Сейчас колонки счет на листе1 совпадают не только по 67 счету, но и по 91. В идеале нужен макрос чтобы все сопадения отрабатывал, но если хотя бы и для одного счета сможете подсказать, может быть я смогу допилить его)
Как перенести по уникальному значению данные с одного листа на другой
 
Цитата
написал:
roma roma , пока ждете макрос можете потестировать
У меня к сожалению excel 2019, решение интересное, но не уверен что мне подойдет.
Необходимо было чтобы данные перенеслись из листа2 в лист1 (в котором уже есть данные, но имеющиеся данные нужно сохранить)
У меня формула отображается так, это значит я ее н смогу редактировать в 2019 версии?
Код
=_xlfn.LET(_xlpm._л1;Лист1!A2:C6;_xlpm._л2;Лист2!A2:C9;_xlpm.ч1_;ЧСТРОК(_xlpm._л1);_xlpm.ф_;_xlfn._xlws.FILTER(_xlpm._л2;ЕЧИСЛО(ПОИСКПОЗ(ИНДЕКС(_xlpm._л2
;;1);_xlfn._xlws.FILTER(ИНДЕКС(_xlpm._л1;;1);(ИНДЕКС(_xlpm._л1;;3))="")));_xlpm.п2_;_xlfn.SEQUENCE(_xlpm.ч1_+ЧСТРОК(_xlpm.ф_));_xlpm.е_;ЕСЛИ(_xlpm.п2_>_xlpm.ч1_;ИНДЕКС(_xlpm.ф_;_xlpm.п2_-_xlpm.ч1_;{1;2;3});_xlpm._л1);_xlfn._xlws.SORT(_xlfn._xlws.FILTER(_xlpm.е_;ИНДЕКС(_xlpm.е_;;3))))
Как перенести по уникальному значению данные с одного листа на другой
 
Цитата
написал:
Покажите все это в файле Excel. Как есть - Как надо.
Как перенести по уникальному значению данные с одного листа на другой
 
Добрый день, подскажите, пожалуйста макрос как сожно решить такую задачу.
Есть лист1, в котором есть счет 67 и компания ВТБ и в который на строчку ниже нужно перенести данные из листа2 по совпадающему критерию - счету 67, т.е. у листа1 и листа2 есть общий критерий - счет 67. На листе1 строк меньше чем на листе 2, т.е. нужно чтобы макрос добавлял на листе1 строку при необходимости и переносил в нее данные. Данные которые нужно перенести на листе2 отметил зеленым цветом. Результат который нужен - на листе 3. То есть по сути нужно чтобы макрос увидел что на листе1 и листе2 есть одинаковый счет 67, понял что нужно перенести 4 строки и добавил бы 3 (т.к. одна со счетом 67 уже есть на листе1), ну и перенес бы содержимое этих строк на лист 1.  
Страницы: 1
Наверх