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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос консолидации и автообновления данных - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос консолидации и автообновления данных
engeli1 Дата: Понедельник, 03.02.2025, 22:39 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Всем добрый вечер! Прошу помочь с реализацией. Есть макрос консолидации и обновления данных, подсмотрела на просторах. Он работает, но только в отношении 2 вкладок: "import" и "backup" , как изменить макрос, чтобы консолидация и обновление происходило со всех вкладок в книге на вкладку "backup"? Уже всю голову сломала, спать спокойно не могу. Несколько вариантов перепробовала, не хочет :'(
К сообщению приложен файл: 12027752.jpg (92.3 Kb)


Сообщение отредактировал engeli1 - Понедельник, 03.02.2025, 22:42
 
Ответить
СообщениеВсем добрый вечер! Прошу помочь с реализацией. Есть макрос консолидации и обновления данных, подсмотрела на просторах. Он работает, но только в отношении 2 вкладок: "import" и "backup" , как изменить макрос, чтобы консолидация и обновление происходило со всех вкладок в книге на вкладку "backup"? Уже всю голову сломала, спать спокойно не могу. Несколько вариантов перепробовала, не хочет :'(

Автор - engeli1
Дата добавления - 03.02.2025 в 22:39
китин Дата: Вторник, 04.02.2025, 07:20 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7034
Репутация: 1079 ±
Замечаний: 0% ±

Excel 2007;2010;2016
С файлом как то было бы получше. По картинке лечить трудно


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеС файлом как то было бы получше. По картинке лечить трудно

Автор - китин
Дата добавления - 04.02.2025 в 07:20
cmivadwot Дата: Среда, 05.03.2025, 01:05 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 599
Репутация: 115 ±
Замечаний: 0% ±

365
engeli1, Код отказался влазить в сообщение, закинул его в ворд
К сообщению приложен файл: sub_copy.docx (15.9 Kb)


Сообщение отредактировал cmivadwot - Среда, 05.03.2025, 10:19
 
Ответить
Сообщениеengeli1, Код отказался влазить в сообщение, закинул его в ворд

Автор - cmivadwot
Дата добавления - 05.03.2025 в 01:05
MikeVol Дата: Среда, 05.03.2025, 03:20 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 425
Репутация: 98 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
engeli1, Доброго времени суток. Устраните замечание полученное от китин,
По картинке лечить трудно
и получите ответ в виде кода макроса. Незнаю (не могу качать файлы с данного форума) правда что в файле от cmivadwot, но думаю что там не код макроса.


Ученик.
Одесса - Украина
 
Ответить
Сообщениеengeli1, Доброго времени суток. Устраните замечание полученное от китин,
По картинке лечить трудно
и получите ответ в виде кода макроса. Незнаю (не могу качать файлы с данного форума) правда что в файле от cmivadwot, но думаю что там не код макроса.

Автор - MikeVol
Дата добавления - 05.03.2025 в 03:20
cmivadwot Дата: Среда, 05.03.2025, 08:10 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 599
Репутация: 115 ±
Замечаний: 0% ±

365
MikeVol, хорошо, когда есть... что написать
 
Ответить
СообщениеMikeVol, хорошо, когда есть... что написать

Автор - cmivadwot
Дата добавления - 05.03.2025 в 08:10
MikeVol Дата: Среда, 05.03.2025, 16:14 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 425
Репутация: 98 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
cmivadwot,
хорошо, когда есть...
Это как понять, наезд? engeli1, а по теме:[vba]
Код
Option Explicit

Sub Consolidate_Data()
    Dim ws          As Worksheet
    Dim importLastRow As Long, destinationLastRow As Long
    Dim curRow      As Long
    Dim dataToCheck As Variant
    Dim rng As Range, rDel As Range

    ' Указываем целевой лист для консолидации
    Dim destinationSheet As Worksheet
    Set destinationSheet = ThisWorkbook.Worksheets("backup")

    ' Колонка для проверки дубликатов
    Dim importColumnCheck As Long
    importColumnCheck = 2

    Dim destinationColumnCheck As Long
    destinationColumnCheck = 2

    ' Начальная строка данных
    Dim importStartRow As Long
    importStartRow = 4

    Dim destinationStartRow As Long
    destinationStartRow = 4

    ' Проход по всем листам, кроме "backup"
    For Each ws In ThisWorkbook.Sheets

        If ws.Name <> "backup" Then

            ' Получаем последнюю строку в листе-источнике
            importLastRow = ws.Cells(Rows.Count, importColumnCheck).End(xlUp).Row

            ' Перебираем строки на текущем листе
            For curRow = importStartRow To importLastRow

                ' Данные для проверки
                dataToCheck = ws.Cells(curRow, importColumnCheck).Value

                ' Получаем последнюю строку в листе "backup"
                destinationLastRow = destinationSheet.Cells(Rows.Count, destinationColumnCheck).End(xlUp).Row

                ' Проверяем, существует ли запись уже в "backup"
                With destinationSheet.Range(destinationSheet.Cells(destinationStartRow, destinationColumnCheck), destinationSheet.Cells(destinationLastRow, destinationColumnCheck))

                    Set rng = .Find(What:=dataToCheck, _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)

                    ' Если запись не найдена, копируем
                    If rng Is Nothing Then
                        ws.Range("A" & curRow).EntireRow.Copy destinationSheet.Range("A" & destinationLastRow + 1)
                    End If

                End With

            Next curRow

        End If

    Next ws

    ' Очистка объектов
    Set rng = Nothing
    Set rDel = Nothing
End Sub
[/vba]Как-то так. Удачи.


Ученик.
Одесса - Украина
 
Ответить
Сообщениеcmivadwot,
хорошо, когда есть...
Это как понять, наезд? engeli1, а по теме:[vba]
Код
Option Explicit

Sub Consolidate_Data()
    Dim ws          As Worksheet
    Dim importLastRow As Long, destinationLastRow As Long
    Dim curRow      As Long
    Dim dataToCheck As Variant
    Dim rng As Range, rDel As Range

    ' Указываем целевой лист для консолидации
    Dim destinationSheet As Worksheet
    Set destinationSheet = ThisWorkbook.Worksheets("backup")

    ' Колонка для проверки дубликатов
    Dim importColumnCheck As Long
    importColumnCheck = 2

    Dim destinationColumnCheck As Long
    destinationColumnCheck = 2

    ' Начальная строка данных
    Dim importStartRow As Long
    importStartRow = 4

    Dim destinationStartRow As Long
    destinationStartRow = 4

    ' Проход по всем листам, кроме "backup"
    For Each ws In ThisWorkbook.Sheets

        If ws.Name <> "backup" Then

            ' Получаем последнюю строку в листе-источнике
            importLastRow = ws.Cells(Rows.Count, importColumnCheck).End(xlUp).Row

            ' Перебираем строки на текущем листе
            For curRow = importStartRow To importLastRow

                ' Данные для проверки
                dataToCheck = ws.Cells(curRow, importColumnCheck).Value

                ' Получаем последнюю строку в листе "backup"
                destinationLastRow = destinationSheet.Cells(Rows.Count, destinationColumnCheck).End(xlUp).Row

                ' Проверяем, существует ли запись уже в "backup"
                With destinationSheet.Range(destinationSheet.Cells(destinationStartRow, destinationColumnCheck), destinationSheet.Cells(destinationLastRow, destinationColumnCheck))

                    Set rng = .Find(What:=dataToCheck, _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)

                    ' Если запись не найдена, копируем
                    If rng Is Nothing Then
                        ws.Range("A" & curRow).EntireRow.Copy destinationSheet.Range("A" & destinationLastRow + 1)
                    End If

                End With

            Next curRow

        End If

    Next ws

    ' Очистка объектов
    Set rng = Nothing
    Set rDel = Nothing
End Sub
[/vba]Как-то так. Удачи.

Автор - MikeVol
Дата добавления - 05.03.2025 в 16:14
cmivadwot Дата: Среда, 05.03.2025, 18:41 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 599
Репутация: 115 ±
Замечаний: 0% ±

365
но думаю что там не код макроса.
так же как и тут)))
 
Ответить
Сообщение
но думаю что там не код макроса.
так же как и тут)))

Автор - cmivadwot
Дата добавления - 05.03.2025 в 18:41
MikeVol Дата: Среда, 05.03.2025, 22:38 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 425
Репутация: 98 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Код отказался влазить в сообщение

Что ж там за монстр такой, мой код (ну не мой а слегка модифицированный) влез однако. ;)


Ученик.
Одесса - Украина
 
Ответить
Сообщение
Код отказался влазить в сообщение

Что ж там за монстр такой, мой код (ну не мой а слегка модифицированный) влез однако. ;)

Автор - MikeVol
Дата добавления - 05.03.2025 в 22:38
cmivadwot Дата: Среда, 05.03.2025, 23:17 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 599
Репутация: 115 ±
Замечаний: 0% ±

365
MikeVol, переборщил с пробелами.... [vba]
Код
Sub Copy_New_Data_All_Sheets()
'''''''' Консолидация данных со всех листов в backup ''''''''

' Объявление переменных
Dim ws As Worksheet ' Текущий обрабатываемый лист
Dim destinationSheet As Worksheet ' Целевой лист для сохранения данных
Dim importLastRow As Long ' Последняя строка с данными в текущем листе
Dim destinationLastRow As Long ' Последняя строка в целевом листе
Dim dataToCheck As Variant ' Значение ячейки для проверки дубликатов
Dim curRow As Long ' Текущая строка в исходном листе
Dim rng As Range, rDel As Range ' Диапазоны для поиска и удаления
Dim importColumnCheck As Integer ' Проверяемый столбец в исходных листах
Dim destinationColumnCheck As Integer ' Проверяемый столбец в целевом листе
Dim importStartRow As Integer ' Стартовая строка данных в исходных листах
Dim destinationStartRow As Integer ' Стартовая строка в целевом листе

' Настройки (можно менять под свои нужды)
importColumnCheck = 2 ' Проверяем столбец B (2) в исходных листах
destinationColumnCheck = 2 ' Проверяем столбец B (2) в целевом листе
importStartRow = 4 ' Данные начинаются с 4 строки в исходных листах
destinationStartRow = 4 ' Данные начинаются с 4 строки в целевом листе

' Инициализация целевого листа
Set destinationSheet = ThisWorkbook.Sheets("backup")

' Цикл по всем листам книги
For Each ws In ThisWorkbook.Worksheets

' Пропускаем целевой лист "backup"
If ws.Name <> "backup" Then

' Находим последнюю строку с данными в текущем листе
importLastRow = ws.Cells(ws.Rows.Count, importColumnCheck).End(xlUp).Row

' Цикл по строкам данных текущего листа
For curRow = importStartRow To importLastRow

' Получаем значение для проверки
dataToCheck = ws.Cells(curRow, importColumnCheck).Value

' Находим последнюю строку в целевом листе
destinationLastRow = destinationSheet.Cells(destinationSheet.Rows.Count, destinationColumnCheck).End(xlUp).Row

' Поиск дубликатов в целевом листе
With destinationSheet.Range(destinationSheet.Cells(destinationStartRow, destinationColumnCheck), _
  destinationSheet.Cells(destinationLastRow, destinationColumnCheck))
Set rng = .Find(What:=dataToCheck, _
  LookIn:=xlValues, _
  LookAt:=xlWhole, _
  SearchOrder:=xlByRows, _
  SearchDirection:=xlNext, _
  MatchCase:=False)

' Если дубликат не найден
If rng Is Nothing Then
' Копируем всю строку в конец целевого листа
ws.Rows(curRow).Copy Destination:=destinationSheet.Cells(destinationLastRow + 1, 1)

' Помечаем строку для удаления (опционально)
If rDel Is Nothing Then
Set rDel = ws.Range("A" & curRow)
Else
Set rDel = Union(rDel, ws.Range("A" & curRow))
End If
End If
End With
Next curRow
End If
Next ws

' Удаление обработанных строк (раскомментировать при необходимости)
'If Not rDel Is Nothing Then rDel.EntireRow.Delete

' Очистка памяти
Set destinationSheet = Nothing
Set ws = Nothing
MsgBox "Консолидация завершена!", vbInformation
End Sub
[/vba]
 
Ответить
СообщениеMikeVol, переборщил с пробелами.... [vba]
Код
Sub Copy_New_Data_All_Sheets()
'''''''' Консолидация данных со всех листов в backup ''''''''

' Объявление переменных
Dim ws As Worksheet ' Текущий обрабатываемый лист
Dim destinationSheet As Worksheet ' Целевой лист для сохранения данных
Dim importLastRow As Long ' Последняя строка с данными в текущем листе
Dim destinationLastRow As Long ' Последняя строка в целевом листе
Dim dataToCheck As Variant ' Значение ячейки для проверки дубликатов
Dim curRow As Long ' Текущая строка в исходном листе
Dim rng As Range, rDel As Range ' Диапазоны для поиска и удаления
Dim importColumnCheck As Integer ' Проверяемый столбец в исходных листах
Dim destinationColumnCheck As Integer ' Проверяемый столбец в целевом листе
Dim importStartRow As Integer ' Стартовая строка данных в исходных листах
Dim destinationStartRow As Integer ' Стартовая строка в целевом листе

' Настройки (можно менять под свои нужды)
importColumnCheck = 2 ' Проверяем столбец B (2) в исходных листах
destinationColumnCheck = 2 ' Проверяем столбец B (2) в целевом листе
importStartRow = 4 ' Данные начинаются с 4 строки в исходных листах
destinationStartRow = 4 ' Данные начинаются с 4 строки в целевом листе

' Инициализация целевого листа
Set destinationSheet = ThisWorkbook.Sheets("backup")

' Цикл по всем листам книги
For Each ws In ThisWorkbook.Worksheets

' Пропускаем целевой лист "backup"
If ws.Name <> "backup" Then

' Находим последнюю строку с данными в текущем листе
importLastRow = ws.Cells(ws.Rows.Count, importColumnCheck).End(xlUp).Row

' Цикл по строкам данных текущего листа
For curRow = importStartRow To importLastRow

' Получаем значение для проверки
dataToCheck = ws.Cells(curRow, importColumnCheck).Value

' Находим последнюю строку в целевом листе
destinationLastRow = destinationSheet.Cells(destinationSheet.Rows.Count, destinationColumnCheck).End(xlUp).Row

' Поиск дубликатов в целевом листе
With destinationSheet.Range(destinationSheet.Cells(destinationStartRow, destinationColumnCheck), _
  destinationSheet.Cells(destinationLastRow, destinationColumnCheck))
Set rng = .Find(What:=dataToCheck, _
  LookIn:=xlValues, _
  LookAt:=xlWhole, _
  SearchOrder:=xlByRows, _
  SearchDirection:=xlNext, _
  MatchCase:=False)

' Если дубликат не найден
If rng Is Nothing Then
' Копируем всю строку в конец целевого листа
ws.Rows(curRow).Copy Destination:=destinationSheet.Cells(destinationLastRow + 1, 1)

' Помечаем строку для удаления (опционально)
If rDel Is Nothing Then
Set rDel = ws.Range("A" & curRow)
Else
Set rDel = Union(rDel, ws.Range("A" & curRow))
End If
End If
End With
Next curRow
End If
Next ws

' Удаление обработанных строк (раскомментировать при необходимости)
'If Not rDel Is Nothing Then rDel.EntireRow.Delete

' Очистка памяти
Set destinationSheet = Nothing
Set ws = Nothing
MsgBox "Консолидация завершена!", vbInformation
End Sub
[/vba]

Автор - cmivadwot
Дата добавления - 05.03.2025 в 23:17
  • Страница 1 из 1
  • 1
Поиск:

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