@galsik

Макросов VBA Excel?

Доброе время суток.
Есть написанный vba макрос в Excel. Он достаточно большой по количеству строк.
Суть данного макроса в том, что программа открывает папку, где лежит файл Excel, открывает сам файл, который состоит из несколько таблиц не вязаных между собой, берет определённый диапазон (допустим колонка E, строки с 7 по 14) считывает и записывает данные на другой лист.
Потом заходит в следующую папку и проделывает все тоже самые действия, и делает так пока не пройдет по всем папкам (из может быть и 100 и 1000).
По итогу на выходе есть одна большая таблица, в которую построчно по порядку записаны данные из сотен excel фалов. Все работает отлично.

В макросе есть вот это запись:

DateColumn = "E" 'Колонка с данными
 
 DateStart = 7 'номер строки начало 
    
 DateEnd = 14 '''номер строки конец
 
 DateCoint = DateEnd - DateStart + 2


Суть вопроса в том, что что бы собрать все данные из всех таблиц мне приходиться все делать по частям с начало E7-E14, потом я правлю в макросе F7-F14, G7-G14, далее идет таблица G21 -G108. Потом я вручную все "склеиваю" в единый сводный файл. А что надо дописать что бы она, отработав данный строки макроса:

DateColumn = "F" 'Колонка с данными
 
 DateStart = 7 'номер строки начало 
    
 DateEnd = 14 '''номер строки конец
 
 DateCoint = DateEnd - DateStart + 2


и так далее:

DateColumn = "G" 'Колонка с данными
 
 DateStart = 21 'номер строки начало 
    
 DateEnd = 108 '''номер строки конец
 
 DateCoint = DateEnd - DateStart + 2


И последняя таблица:

DateColumn = "F" 'Колонка с данными
 
 DateStart = 7 'номер строки начало 
    
 DateEnd = 14 '''номер строки конец
 
 DateCoint = DateEnd - DateStart + 2
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
Адреса диапазонов в константу, в коде парсим и используем.
Const Addresses As String = "E7:E14,F7:F14,G7:G14,G21:G108,H7:H14"

Sub ...
...
For Each RangeAddress In Split(Addresses, ",")
    Workbooks("srcX.xlsx").Sheets("SheetY").Range(RangeAddress).Copy Workbooks("dst.xlsx").Sheets("SheetZ").Range(RangeAddress)    
Next


Адреса диапазонов назначения тоже могут быть собраны в константу. А для обработки нескольких файлов дополнительно считать смещение и задействовать метод Range.Offset.
Ответ написан
@Iv_and_S
"захардкодить" диапазоны , как в ответе выше - несложно, способов довольно много.
строкой, словарем, массивом, да хоть массивом готовых к перебору и подставновке Ranges.

но если есть возможность, написания логики "нахождения" диапазона - возможно это стоит сделать.
т.е. динамически искать в листе начало/конец наборов данных.

в какой то степени (в зависимости от алгоритма), это скажется на скорость работы.
но зато, вы сможете не заботиться о изменении скрипта, при изменении диапазонов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы