Макрос для переноса данных из excel в excel
Добрый вечер, уважаемый Omeg!
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам?
Добрый вечер, уважаемый Omeg!
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам? GWolf
Пометте цветом, пожалуйста, блоки формы, количество строк в которых может изменятся. Или же форма неизменна ни по строкам ни по столбцам? Автор - GWolf
Дата добавления - 17.01.2013 в 18:03
Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде)
Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему(( Добрый вечер, уважаемый GWolf!
Пометил строки, количество которых может изменяться. Если это сильно осложняет положение, можно количество полей оставить в таком виде)
Спасибо что откликнулись, два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чему(( Omeg
Доброй ночи, уважаемый Omeg!
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
полагаю, что в виду того, что Вы
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чемумой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу!
С уважением GWolf.
Доброй ночи, уважаемый Omeg!
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
полагаю, что в виду того, что Вы
два дня сижу с книгой по VBA, но опыта нет, до этого не приходилась делать такие задачи. Очень трудно сразу сообразить что к чемумой труд не будет бесполезен. Для случая с изменяющимися координатами "Итого начислено" и "Итого удержано" код будет несколько другим. Если будете иметь немного терпения то я таки и его Вам напишу!
С уважением GWolf. GWolf
Путей к вершине множество. Этот один из многих.
Пока ждал от Вас ответа, набросал макрос для неизменного количества строк в файле-источнике:
Dim P_familija As String, P_imja As String, P_otcestwo As String
Dim P_NomIspList As String
Dim P_SumOsnDolg As String, P_SumUderj As String, P_SumPerecisl As String
P_familija = "" '- Фамилия
P_imja = "" '- Имя
P_otcestwo = "" '- Отчество
P_NomIspList = "" '- Номер исполнительного листа
P_SumOsnDolg = "" '- Сумма основного долга --> Начальный баланс
P_SumUderj = "" '- Сумма удержанная
P_SumPerecisl = "" '- Сумма начисленная
nR = 0 '- обнуляем счетчик
'закроем файл-приемник с сохранением
.Close SaveChanges:=True
End With
Set wbOp = Nothing '- чистим объектную переменную
'очистим значения переменных
P_familija = ""
P_imja = ""
P_otcestwo = ""
P_NomIspList = ""
P_SumOsnDolg = ""
P_SumUderj = ""
P_SumPerecisl = ""
End Sub
Приведу три способа Автоматического переноса данных с одного листа программы «Эксель» в другой.
Первый, самый простой и примитивный способ связи двух таблиц на разных листах документа -вставка данных при помощи опции специальной вставки.
Рассмотрим, как соединить две таблицы по шагам.
Первый шаг.
Необходимо выделить ту таблицу, из которой будут транслироваться данные во вторую таблицу.
Второй шаг.
Копировать информацию сочетанием клавиш ctrl+C или вызвав контекстное меню правой кнопкой мыши и кликнув по пункту меню «Копировать»
Третий шаг.
Перейти на лист документа «Excel», в который Вы планируете транслировать информацию из первой таблицы.
Четвертый шаг.
После вставки связи следует отформатировать вид ячеек – привести их к надлежащему виду.
При использовании данного метода роль второй таблицы («реципиента») играет сама сводная таблица.
Как обновить сводную таблицу
При клике правой кнопкой мыши по сводной таблице и нажатии на пункт «Обновить» сводная таблица автоматически перенесет все данные из связанного массива информации («таблицы донора»).
О том, как в «Эксель» создавать сводные таблицы подробно написано в статье:
Как делать сводные таблицы в программе «Excel» и для чего они нужны.
Правда нужно отметить, что этот способ подходит только пользователям Excel 2016 и пользователям Excel 2013и выше с установленной надстройкой «Power Query».
Смысл способа в следующем:
Из таблицы -Power Query
Источник данных для запроса Power Query
После выбора области данных появится окно настройки вида новой таблицы. В этом окне Вы можете настроить последовательность вывода столбцов и удалить ненужные столбцы.
После настройки вида таблицы нажмите кнопку «Закрыть и загрузить»
Обновление полученной таблицы происходит кликом правой кнопки мыши по названию нужного запроса в правой части листа (список «Запросы книги»). После клика правой кнопкой мыши в выпадающем контекстном меню следует нажать на пункт «Обновить»
Обновление запроса в PowerQuery
На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:
Исходная таблица задания №1
Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):
Часть результирующего списка задания №1
Решение копированием с листа на лист
Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.
Dim n1 As Long , n2 As Long , n3 As Long , n4 As Long , _ n1 = Sheets ( "Лист1" ) . Cells ( 1 , 1 ) . CurrentRegion . Rows . CountПеременные:
- n1 – количество строк в исходной таблице;
- n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
- n3 – номер строки текущей ячейки на втором листе;
- n4 – номер столбца текущей ячейки на втором листе;
- i1 – счетчик цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Решение с использованием массивов
Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.
Подпрограммы Kopirovanie и Vstavka используются в цикле For. Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.
Переменные:
- massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
- massiv2 – одномерный массив, заполняемый данными из переменной txt1;
- massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
- txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
- n1 – количество строк в исходной таблице;
- n2 – количество столбцов в исходной таблице;
- n3 – номер текущей строки на втором листе;
- n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
- i1, i2, i3 – счетчики цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.
Всем, кто работает с Excel, периодически приходится переносить данные из одной таблицы в другую, а зачастую и просто копировать массивы в разные файлы. При этом необходимо сохранять исходные форматы ячеек, формулы, что в них находятся, и прочие переменные, которые могут потеряться при неправильном переносе.
Давайте разберёмся с тем, как переносить таблицу удобнее всего и рассмотрим несколько способов. Вам останется лишь выбрать тот, что наилучшим образом подходит к конкретной задачи, благо Microsoft побеспокоилась об удобстве своих пользователей в любой ситуации.
Копирование таблицы с сохранением структуры
Если у вас есть одна или несколько таблиц, форматирование которых необходимо сохранять при переносе, то обычный метод Ctrl+C – Ctrl+V не даст нужного результата.
В результате мы получим сжатые или растянутые ячейки, которые придётся вновь выравнивать по длине, чтобы они не перекрывали информацию.
Расширять вручную таблицы размером в 20-30 ячеек, тем более, когда у вас их несколько, не самая увлекательная задача. Однако существует несколько способов значительно упростить и оптимизировать весь процесс переноса при помощи инструментов, уже заложенных в программу.
Способ 1: Специальная вставка
Этот способ подойдёт в том случае, если из форматирования вам достаточно сохранить ширину столбцов и подтягивать дополнительные данные или формулы из другого файла/листа нет нужды.
Способ 2: Выделение столбцов перед копированием
В этом случае вы сразу получите нужный формат, достаточно выделить столбцы или строки, в зависимости от ситуации, вместе с заголовками. Таким образом, изначальная длина и ширина сохранятся в буфере обмена и на выходе вы получите нужный формат ячеек. Чтобы добиться такого результата, необходимо:
В каждом отдельном случае рациональней использовать свой способ. Однако он будет оптимален для небольших таблиц, где выделение области копирования не займёт у вас более двух минут. Соответственно, его удобно применять в большинстве случаев, так как в специальной вставке, рассмотренной выше, невозможно сохранить высоту строк. Если вам необходимо выровнять строки заранее – это лучший выбор. Но зачастую помимо самой таблицы необходимо перенести и формулы, что в ней хранятся. В этом случае подойдёт следующий метод.
Способ 3: Вставка формул с сохранением формата
Специальную вставку можно использовать, в том числе, и для переноса значений формул с сохранением форматов ячеек. Это наиболее простой и при этом быстрый способ произвести подобную операцию. Может быть удобно при формировании таблиц на распечатку или отчётностей, где лишний вес файла влияет на скорость его загрузки и обработки.
Чтобы выполнить операцию, сделайте следующее:
- Выделите и скопируйте исходник.
- В контекстном меню вставки просто выберите «Значения» и подтвердите действие.
Вместо третьего действия можно использовать формат по образцу. Подойдёт, если копирование происходит в пределах одного файла, но на разные листы. В простонародье этот инструмент ещё именуют «метёлочкой».
Читайте также: