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

Вход

Регистрация

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

 

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

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

Excel 2019
Добрый вечер форумчане!
Нужна Ваша помощь: имеются 2 файла - основной и файл-выгрузка из системы. В основном файле есть лист, в который из файла-выгрузки нужно копировать определенные столбцы. Суть вопроса следующая - файл-выгрузка содержит достаточно много столбцов из которых для обновления данных в основном файле нужно всего лишь 4 столбца. И если, например эту выгрузку сделать сегодня, порядок столбцов может быть один, а если сделать, например ее завтра - порядок столбцов может быть совершенно другим. При этом названия остаются без изменений, меняется только их (столбцов) порядок. Можно для избавления от рутины как-то оптимизировать этот процесс через макрос, т.е. копировать данные из второго файла опираясь только на названия столбцов, а не на их порядок в книге? И желательно, чтобы при копировании из 2го файла, этот файл не открывался?
Сейчас копирование информации из файла в файл через vba работает, но работает при условии, что порядок столбцов всегда одинаковый и 2й файл при копировании открывается.
Заранее спасибо


Сообщение отредактировал Maxxxis - Пятница, 21.08.2020, 23:31
 
Ответить
СообщениеДобрый вечер форумчане!
Нужна Ваша помощь: имеются 2 файла - основной и файл-выгрузка из системы. В основном файле есть лист, в который из файла-выгрузки нужно копировать определенные столбцы. Суть вопроса следующая - файл-выгрузка содержит достаточно много столбцов из которых для обновления данных в основном файле нужно всего лишь 4 столбца. И если, например эту выгрузку сделать сегодня, порядок столбцов может быть один, а если сделать, например ее завтра - порядок столбцов может быть совершенно другим. При этом названия остаются без изменений, меняется только их (столбцов) порядок. Можно для избавления от рутины как-то оптимизировать этот процесс через макрос, т.е. копировать данные из второго файла опираясь только на названия столбцов, а не на их порядок в книге? И желательно, чтобы при копировании из 2го файла, этот файл не открывался?
Сейчас копирование информации из файла в файл через vba работает, но работает при условии, что порядок столбцов всегда одинаковый и 2й файл при копировании открывается.
Заранее спасибо

Автор - Maxxxis
Дата добавления - 21.08.2020 в 23:24
Апострофф Дата: Суббота, 22.08.2020, 01:33 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 458
Репутация: 126 ±
Замечаний: 0% ±

Excel 1997
Maxxxis, Здравствуйте!
очень много вводных в задаче и мало конкретики. Нам сочинять нужно ваши файлы и то что через vba у вас работает?
 
Ответить
СообщениеMaxxxis, Здравствуйте!
очень много вводных в задаче и мало конкретики. Нам сочинять нужно ваши файлы и то что через vba у вас работает?

Автор - Апострофф
Дата добавления - 22.08.2020 в 01:33
Hugo Дата: Суббота, 22.08.2020, 11:29 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
1. Можно.
2. Нельзя.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение1. Можно.
2. Нельзя.

Автор - Hugo
Дата добавления - 22.08.2020 в 11:29
Maxxxis Дата: Суббота, 22.08.2020, 23:27 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
Цитата Апострофф, 22.08.2020 в 01:33, в сообщении № 2 ()
очень много вводных в задаче и мало конкретики. Нам сочинять нужно ваши файлы и то что через vba у вас работает?

извиняюсь, файлы прилагаю.
сейчас через макрос работает автоматическое копирование нужных массивов из книги в книгу. макрос может и кривой, но все же работает
[vba]
Код
Sub выгрузка()
Workbooks.Open Filename:="C:\Users\Max\Desktop\123\Данные из системы.xlsx"
r1_ = Workbooks("Данные из системы.xlsx").Worksheets("1").Range("C" & Rows.Count).End(xlUp).Row - 1
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("B2:B" & r1_).TextToColumns
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("B2:B" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("A2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("C2:C" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("B2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("I2:I" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("C2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("K2:K" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("D2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("Данные из системы.xlsx").Close savechanges:=False
Application.CutCopyMode = True
End Sub
[/vba]
суть вопроса в том, что в файле "выгрузка из системы" порядок столбцов может быть каждый раз разным, но названия столбцов из выгрузки в выгрузку всегда одинаковое. Вопрос в том, можно ли организовать копирование данных из книги в книгу, ориентируясь только на названия нужных столбцов?
К сообщению приложен файл: 6486247.xlsm (17.6 Kb) · __.xlsx (10.9 Kb)


Сообщение отредактировал Maxxxis - Суббота, 22.08.2020, 23:28
 
Ответить
Сообщение
Цитата Апострофф, 22.08.2020 в 01:33, в сообщении № 2 ()
очень много вводных в задаче и мало конкретики. Нам сочинять нужно ваши файлы и то что через vba у вас работает?

извиняюсь, файлы прилагаю.
сейчас через макрос работает автоматическое копирование нужных массивов из книги в книгу. макрос может и кривой, но все же работает
[vba]
Код
Sub выгрузка()
Workbooks.Open Filename:="C:\Users\Max\Desktop\123\Данные из системы.xlsx"
r1_ = Workbooks("Данные из системы.xlsx").Worksheets("1").Range("C" & Rows.Count).End(xlUp).Row - 1
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("B2:B" & r1_).TextToColumns
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("B2:B" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("A2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("C2:C" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("B2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("I2:I" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("C2").Select
ActiveSheet.Paste
Workbooks("Данные из системы.xlsx").Worksheets("1").Range("K2:K" & r1_).Copy
Workbooks("Выгрузка.xlsm").Activate
ActiveWorkbook.Worksheets("Лист1").Range("D2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("Данные из системы.xlsx").Close savechanges:=False
Application.CutCopyMode = True
End Sub
[/vba]
суть вопроса в том, что в файле "выгрузка из системы" порядок столбцов может быть каждый раз разным, но названия столбцов из выгрузки в выгрузку всегда одинаковое. Вопрос в том, можно ли организовать копирование данных из книги в книгу, ориентируясь только на названия нужных столбцов?

Автор - Maxxxis
Дата добавления - 22.08.2020 в 23:27
Hugo Дата: Воскресенье, 23.08.2020, 10:59 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Можно Ваш код особо и не менять, просто выполните сперва этот (записано рекордером):
[vba]
Код

Sub Макрос2()
'
' Макрос2 Макрос
'

'
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A1:M1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("1").Sort
        .SetRange Range("A1:M35")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]
Но конечно в своём нужно теперь поправить копируемые столбцы, в каком порядке и куда - это надеюсь разберётесь.
P.S. сейчас только обратил внимание что Range("A1:M35") нужно сперва определить динамически, ну это умеете.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.08.2020, 11:08
 
Ответить
СообщениеМожно Ваш код особо и не менять, просто выполните сперва этот (записано рекордером):
[vba]
Код

Sub Макрос2()
'
' Макрос2 Макрос
'

'
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A1:M1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("1").Sort
        .SetRange Range("A1:M35")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]
Но конечно в своём нужно теперь поправить копируемые столбцы, в каком порядке и куда - это надеюсь разберётесь.
P.S. сейчас только обратил внимание что Range("A1:M35") нужно сперва определить динамически, ну это умеете.

Автор - Hugo
Дата добавления - 23.08.2020 в 10:59
Maxxxis Дата: Воскресенье, 23.08.2020, 22:38 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2019
P.S. сейчас только обратил внимание что Range("A1:M35") нужно сперва определить динамически, ну это умеете.

за макрос большое спасибо, работает
а вот с динамическим диапазоном сложнее.. помогите, пожалуйста, сделать его %)
 
Ответить
Сообщение
P.S. сейчас только обратил внимание что Range("A1:M35") нужно сперва определить динамически, ну это умеете.

за макрос большое спасибо, работает
а вот с динамическим диапазоном сложнее.. помогите, пожалуйста, сделать его %)

Автор - Maxxxis
Дата добавления - 23.08.2020 в 22:38
Hugo Дата: Воскресенье, 23.08.2020, 22:51 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Ну в общем тут главное определить 35 там или другое число. А это умеете.
Хотя вполне может быть что можно просто брать Range("A1").currentregion, но я не проверял.
Как другой вариант - поиском или перебором выяснить в каком столбце нужные названия, и затем в коде использовать эти значения.
Но зачем, если согласно исходных условий достаточно отсортировать столбцы и брать заранее известные?


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD


Сообщение отредактировал Hugo - Воскресенье, 23.08.2020, 22:57
 
Ответить
СообщениеНу в общем тут главное определить 35 там или другое число. А это умеете.
Хотя вполне может быть что можно просто брать Range("A1").currentregion, но я не проверял.
Как другой вариант - поиском или перебором выяснить в каком столбце нужные названия, и затем в коде использовать эти значения.
Но зачем, если согласно исходных условий достаточно отсортировать столбцы и брать заранее известные?

Автор - Hugo
Дата добавления - 23.08.2020 в 22:51
  • Страница 1 из 1
  • 1
Поиск:

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