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

Вход

Регистрация

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

 

= Мир MS Excel/Копировать строки из книг в другую - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Копировать строки из книг в другую
timo64uk Дата: Пятница, 25.10.2024, 06:13 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
Добрый день.
Есть Новая папка по пути C:\Новая папка и в ней расположено несколько различных книг .xlsx.
Книги имеют по два листа. Имя первого листа меняется, имя второго Приложение 1 неизменно во всех книгах.
Помогите, пожалуйста, с кодом копирующим и вставляющим построчно значения как "вставить123" в открытую книгу:
11ую и 18ую строку первого листа каждой книги из Новой папки;
8ую и последующие непустые строки по столбцу A второго листа каждой книги из Новой папки (если 9ая строка пустая, то копируем только 8ую).

Например: в книгу 00 вставляю строки из книг 11 и 22
К сообщению приложен файл: 00.xlsx (9.7 Kb) · 11.xlsx (32.5 Kb) · 22.xlsx (33.4 Kb)


Сообщение отредактировал timo64uk - Пятница, 25.10.2024, 06:19
 
Ответить
СообщениеДобрый день.
Есть Новая папка по пути C:\Новая папка и в ней расположено несколько различных книг .xlsx.
Книги имеют по два листа. Имя первого листа меняется, имя второго Приложение 1 неизменно во всех книгах.
Помогите, пожалуйста, с кодом копирующим и вставляющим построчно значения как "вставить123" в открытую книгу:
11ую и 18ую строку первого листа каждой книги из Новой папки;
8ую и последующие непустые строки по столбцу A второго листа каждой книги из Новой папки (если 9ая строка пустая, то копируем только 8ую).

Например: в книгу 00 вставляю строки из книг 11 и 22

Автор - timo64uk
Дата добавления - 25.10.2024 в 06:13
MikeVol Дата: Пятница, 25.10.2024, 11:28 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
timo64uk, Доброго времени суток. Нечто подобное решали на другом ресурсе (если надо будет ссылку дам). Но как-то тяжко я вас понял, и то не уверен что я вас понял правильно. Вот вам вариант:[vba]
Код
Option Explicit

Sub Merge()
    Dim i As Long, j As Long
    Dim FileNames() As String
    Dim ws          As Worksheet

    Dim Merged      As Workbook
    Set Merged = ThisWorkbook

    Dim iFolderPath As String
    iFolderPath = "C:\Новая папка"    ' Замените на ваш путь к файлам

    Dim FilePath    As String
    FilePath = Dir(iFolderPath & "\*.xlsx")

    Dim FileCount   As Long
    FileCount = 0

    Dim RowCnt      As Long
    RowCnt = 1

    ' Подсчет и сохранение путей к файлам
    Do While FilePath <> ""
        FileCount = FileCount + 1
        ReDim Preserve FileNames(1 To FileCount)
        FileNames(FileCount) = iFolderPath & "\" & FilePath
        FilePath = Dir
    Loop

    If FileCount < 1 Then
        MsgBox "No files found in the specified directory!", vbCritical
        Exit Sub
    End If

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    For i = LBound(FileNames) To UBound(FileNames)

        Dim wb      As Workbook
        Set wb = Workbooks.Open(FileNames(i), UpdateLinks:=False)

        For Each ws In wb.Worksheets

            If ws.Index = 1 Then

                ' Первая таблица: 11-я и 18-я строки
                If ws.FilterMode Then ws.ShowAllData
                Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(11).Value
                RowCnt = RowCnt + 1

                Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(18).Value
                RowCnt = RowCnt + 1
            ElseIf ws.Index = 2 Then

                ' Вторая таблица: 8-я, 9-я, 10-я и 11-я строки
                If ws.FilterMode Then ws.ShowAllData

                Dim LastRow As Long
                LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

                For j = 8 To Application.Min(11, LastRow)
                    Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(j).Value
                    RowCnt = RowCnt + 1
                Next j

            End If

        Next ws

        wb.Close SaveChanges:=False
    Next i

    ' Освобождение объектов
    Set wb = Nothing
    Set Merged = Nothing

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

    MsgBox "Finished merging.", vbInformation
End Sub
[/vba]Удачи.

P.S. Дополнил ответ файлом примером так как
Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера).
У меня ничего не подвисает.
К сообщению приложен файл: 25_10_2024_exw_kopirovat_strok.xlsm (15.7 Kb)


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Пятница, 25.10.2024, 13:17
 
Ответить
Сообщениеtimo64uk, Доброго времени суток. Нечто подобное решали на другом ресурсе (если надо будет ссылку дам). Но как-то тяжко я вас понял, и то не уверен что я вас понял правильно. Вот вам вариант:[vba]
Код
Option Explicit

Sub Merge()
    Dim i As Long, j As Long
    Dim FileNames() As String
    Dim ws          As Worksheet

    Dim Merged      As Workbook
    Set Merged = ThisWorkbook

    Dim iFolderPath As String
    iFolderPath = "C:\Новая папка"    ' Замените на ваш путь к файлам

    Dim FilePath    As String
    FilePath = Dir(iFolderPath & "\*.xlsx")

    Dim FileCount   As Long
    FileCount = 0

    Dim RowCnt      As Long
    RowCnt = 1

    ' Подсчет и сохранение путей к файлам
    Do While FilePath <> ""
        FileCount = FileCount + 1
        ReDim Preserve FileNames(1 To FileCount)
        FileNames(FileCount) = iFolderPath & "\" & FilePath
        FilePath = Dir
    Loop

    If FileCount < 1 Then
        MsgBox "No files found in the specified directory!", vbCritical
        Exit Sub
    End If

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    For i = LBound(FileNames) To UBound(FileNames)

        Dim wb      As Workbook
        Set wb = Workbooks.Open(FileNames(i), UpdateLinks:=False)

        For Each ws In wb.Worksheets

            If ws.Index = 1 Then

                ' Первая таблица: 11-я и 18-я строки
                If ws.FilterMode Then ws.ShowAllData
                Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(11).Value
                RowCnt = RowCnt + 1

                Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(18).Value
                RowCnt = RowCnt + 1
            ElseIf ws.Index = 2 Then

                ' Вторая таблица: 8-я, 9-я, 10-я и 11-я строки
                If ws.FilterMode Then ws.ShowAllData

                Dim LastRow As Long
                LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

                For j = 8 To Application.Min(11, LastRow)
                    Merged.Worksheets(1).Rows(RowCnt).Value = ws.Rows(j).Value
                    RowCnt = RowCnt + 1
                Next j

            End If

        Next ws

        wb.Close SaveChanges:=False
    Next i

    ' Освобождение объектов
    Set wb = Nothing
    Set Merged = Nothing

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

    MsgBox "Finished merging.", vbInformation
End Sub
[/vba]Удачи.

P.S. Дополнил ответ файлом примером так как
Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера).
У меня ничего не подвисает.

Автор - MikeVol
Дата добавления - 25.10.2024 в 11:28
timo64uk Дата: Пятница, 25.10.2024, 11:54 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
Удачи

Спасибо. Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера).
При последующем открытии предлагает открыть в безопасном режиме. Поочередно буду исключать строки кода.
 
Ответить
Сообщение
Удачи

Спасибо. Сейчас подвисает книга при проигрывании и закрывается (объем не большой - файлы из примера).
При последующем открытии предлагает открыть в безопасном режиме. Поочередно буду исключать строки кода.

Автор - timo64uk
Дата добавления - 25.10.2024 в 11:54
Nic70y Дата: Пятница, 25.10.2024, 12:01 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 9030
Репутация: 2374 ±
Замечаний: 0% ±

Excel 2010
похоже 00 файл составлен копированием и вставкой значений,
так и сделал
файл поместить в туже папку, где файлы, с которых копируется
или пропишите путь
макрос также подвязан к двойному клику на ячейке A1
[vba]
Код
Sub u_17()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    x = Cells(Rows.Count, "a").End(xlUp).Row
    Range("a1:q" & x).Clear
    a = ThisWorkbook.Path   'папка в который находиться файл
    b = Dir(a & "\*.xlsx")  'имя файла с рашрирешием xlsx
    Do While b <> ""
        c = Cells(Rows.Count, "a").End(xlUp).Row + 1
        Workbooks.Open Filename:=a & "\" & b, UpdateLinks:=False
        Workbooks(b).Sheets(1).Range("a11:q11").Copy
        ThisWorkbook.Sheets(1).Range("a" & c).PasteSpecial Paste:=xlPasteValues
        Workbooks(b).Sheets(1).Range("a18:q18").Copy
        ThisWorkbook.Sheets(1).Range("a" & c + 1).PasteSpecial Paste:=xlPasteValues
        e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row
        Workbooks(b).Sheets(2).Range("a8:h" & e).Copy
        ThisWorkbook.Sheets(1).Range("a" & c + 2).PasteSpecial Paste:=xlPasteValues
        Workbooks(b).Close False
        b = Dir
    Loop
    Rows(1).Delete
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
[/vba]
К сообщению приложен файл: 00.xlsm (16.7 Kb)


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Пятница, 25.10.2024, 12:02
 
Ответить
Сообщениепохоже 00 файл составлен копированием и вставкой значений,
так и сделал
файл поместить в туже папку, где файлы, с которых копируется
или пропишите путь
макрос также подвязан к двойному клику на ячейке A1
[vba]
Код
Sub u_17()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    x = Cells(Rows.Count, "a").End(xlUp).Row
    Range("a1:q" & x).Clear
    a = ThisWorkbook.Path   'папка в который находиться файл
    b = Dir(a & "\*.xlsx")  'имя файла с рашрирешием xlsx
    Do While b <> ""
        c = Cells(Rows.Count, "a").End(xlUp).Row + 1
        Workbooks.Open Filename:=a & "\" & b, UpdateLinks:=False
        Workbooks(b).Sheets(1).Range("a11:q11").Copy
        ThisWorkbook.Sheets(1).Range("a" & c).PasteSpecial Paste:=xlPasteValues
        Workbooks(b).Sheets(1).Range("a18:q18").Copy
        ThisWorkbook.Sheets(1).Range("a" & c + 1).PasteSpecial Paste:=xlPasteValues
        e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row
        Workbooks(b).Sheets(2).Range("a8:h" & e).Copy
        ThisWorkbook.Sheets(1).Range("a" & c + 2).PasteSpecial Paste:=xlPasteValues
        Workbooks(b).Close False
        b = Dir
    Loop
    Rows(1).Delete
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 25.10.2024 в 12:01
MikeVol Дата: Пятница, 25.10.2024, 13:19 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
timo64uk, Дополнил свой второй пост файлом примером, тестируйте!


Ученик.
Одесса - Украина
 
Ответить
Сообщениеtimo64uk, Дополнил свой второй пост файлом примером, тестируйте!

Автор - MikeVol
Дата добавления - 25.10.2024 в 13:19
timo64uk Дата: Суббота, 26.10.2024, 04:19 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
Дополнил ответ

Спасибо, заработало.
Но берет лишь с первого листа данные (второй лист игнорирует). И видимо что-то у офисного компа запрещено политикой безопасности и при проигрывании все эксель закрываются и открывается восстановленный файл с хорошими результатами.
Тестировал на 27 файлах - работает. Пришлось политику безопасности обходить через старые файлы .xlsm, т.к. новые прячет и Alt+F8 отображает как `25_10_2024_exw_kopirovat_strok.xlsm`!Module1.Merge
в туже папку
Спасибо.
Код подкрашивал желтым на переменных, обозначил из через Dim As a Variant. После начал подкрашивать [vba]
Код
e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row
[/vba]
И работает лишь с двумя файлами, если больше, то не замечает их. Ну и также вырубается Эксель и в восстановленном виден результат.


Сообщение отредактировал timo64uk - Суббота, 26.10.2024, 04:37
 
Ответить
Сообщение
Дополнил ответ

Спасибо, заработало.
Но берет лишь с первого листа данные (второй лист игнорирует). И видимо что-то у офисного компа запрещено политикой безопасности и при проигрывании все эксель закрываются и открывается восстановленный файл с хорошими результатами.
Тестировал на 27 файлах - работает. Пришлось политику безопасности обходить через старые файлы .xlsm, т.к. новые прячет и Alt+F8 отображает как `25_10_2024_exw_kopirovat_strok.xlsm`!Module1.Merge
в туже папку
Спасибо.
Код подкрашивал желтым на переменных, обозначил из через Dim As a Variant. После начал подкрашивать [vba]
Код
e = Workbooks(b).Sheets(2).Cells(Rows.Count, "a").End(xlUp).Row
[/vba]
И работает лишь с двумя файлами, если больше, то не замечает их. Ну и также вырубается Эксель и в восстановленном виден результат.

Автор - timo64uk
Дата добавления - 26.10.2024 в 04:19
timo64uk Дата: Суббота, 26.10.2024, 05:33 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 1 ±
Замечаний: 0% ±

Office16
Пробовал код из похожей темы с форума - в "ребут" эксель также уходит.
Отрабатывает хорошо, но там и немного иная задача - все листы в один новый файл.
В принципе ребут не страшен. просто изначально он воспринимался как некая ошибка кода, а оказалось все в норме.


Сообщение отредактировал timo64uk - Суббота, 26.10.2024, 05:35
 
Ответить
СообщениеПробовал код из похожей темы с форума - в "ребут" эксель также уходит.
Отрабатывает хорошо, но там и немного иная задача - все листы в один новый файл.
В принципе ребут не страшен. просто изначально он воспринимался как некая ошибка кода, а оказалось все в норме.

Автор - timo64uk
Дата добавления - 26.10.2024 в 05:33
MikeVol Дата: Суббота, 26.10.2024, 11:01 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 81 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
[offtop]М-да, говорил я себе, не стоит этому человеку помогать. Судя по его предыдущим темам. Всё не Слава Богу с ним. Что-ж, будет мне уроком. Лучше мне мимо пройти тем этого пользователя. [/offtop]


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Суббота, 26.10.2024, 11:02
 
Ответить
Сообщение[offtop]М-да, говорил я себе, не стоит этому человеку помогать. Судя по его предыдущим темам. Всё не Слава Богу с ним. Что-ж, будет мне уроком. Лучше мне мимо пройти тем этого пользователя. [/offtop]

Автор - MikeVol
Дата добавления - 26.10.2024 в 11:01
  • Страница 1 из 1
  • 1
Поиск:

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