Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2016, 18:33   #1
master_artyom
Новичок
Джуниор
 
Регистрация: 19.06.2015
Сообщений: 2
По умолчанию Ищу лучше решения по экспорту и импорту данных

Уважаемые знатоки VBA. Подскажите пожалуйста в какую сторону лучше копать, чтобы решить следующую задачу:
Есть большая ОБЩАЯ таблица в экселе (500 столбцов и 5000 строк):
1. Нужно экспортировать определенные данные (скажем, столбцы с 1 по 10 и с 50 по 100, и строки с 300 по 1500) в отдельный файл (отдельную таблицу).
2. Далее этот отдельные файл заполняется пользователем и его нужно импортировать обратно в ОБЩУЮ таблицу. Т.е. нужно найти в ОБЩЕЙ таблицы нужные столбцы и строки для вставки.

Я сделал это с помощью массивов и быстрой ставки, через .resize() = массив. Однако, макрос все равно очень долго работает. Может как-то приспособить dictionary для более быстрого поиска нужных строк и столбцов?

Как бы вы решали эту задачу?
Заранее спасибо за ответ.
master_artyom вне форума Ответить с цитированием
Старый 18.11.2016, 18:44   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

при использовании массивов, процесс импорта (как и экспорта) будет длиться не более 1 секунды

Если тормозит, - либо там дофига слишком формул (надо отключать пересчет формул на время обновления данных), либо вы с кодом перемудрили

Цитата:
скажем, столбцы с 1 по 10 и с 50 по 100, и строки с 300 по 1500
это у вас 2 несвязанных диапазона
т.е. 2 вставки массива
range("a50:j100").value = массив1
range("a300:j500").value = массив2

это выполняется моментально

Цитата:
для более быстрого поиска нужных строк и столбцов
При правильном подходе, столбцы вообще не нужно искать!

Вы же экспортировали это все из того же файла, - ну и запомните в том же файле диапазоны, откуда что было взято
(например, что данные из исходного файла из диапазона a50:j100 вы вставили в редактируемый файл в диапазон b4:k54)
Получится у вас одна или несколько таких записей

А потом в цикле перебираете записи (получая адреса исходного и конечного диапазонов),
и переносите данные обратно:
Код:
ThisWorkbook.worksheets("ИмяЛиста").range("a50:j100").value = ЗагружаемыйФайл.worksheets("ИмяРедактируемогоЛиста").range("b4:k54").value

Последний раз редактировалось EducatedFool; 18.11.2016 в 18:55.
EducatedFool вне форума Ответить с цитированием
Старый 18.11.2016, 20:10   #3
master_artyom
Новичок
Джуниор
 
Регистрация: 19.06.2015
Сообщений: 2
По умолчанию

Спасибо за ответ!
Проблема в том, что строки, которые нужно выгружать идут не по порядку. При этом за то время пока пользователь редактирует экспортированную таблицу, в ОБЩУЮ таблицу могут добавиться новые строки. Т.е. по любому нужно проводить сопоставление по строкам. Столбцы, можно считать, что не меняются.
master_artyom вне форума Ответить с цитированием
Старый 18.11.2016, 20:50   #4
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
Сообщение от master_artyom Посмотреть сообщение
...Однако, макрос все равно очень долго работает. Может как-то приспособить dictionary для более быстрого поиска нужных строк и столбцов?
Если кратко, то приспосабливайте
Но если нужна не теория, то предоставьте свой код и тестовые файлы с подробным описанием
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 18.11.2016, 21:30   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

как вариант - можете попробовать такое решение
http://excelvba.ru/programmes/Lookup

надстройка сравнит данные по одинаковому столбцу (например, сравниваем столбец 1 со столбцом 1),
и скопирует данные в совпавшие строки (в настройках указываем столбцы для копирования: 1-10, 50-100)
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу совета, а лучше помощи (Excel) Rodion_2015 Помощь студентам 0 20.09.2015 14:52
Ищу помощника по ведению сайта для решения мелких задач (HTML, PHP, JavaScript) Nastasia_ya Фриланс 2 04.02.2014 00:37
Таймер. Конвертирование ms в часы,минуты, секунды.. ищу решения.. Человек_Борща Общие вопросы Delphi 3 08.04.2010 09:51
как лучше организовать базу данных ilin-alex Помощь студентам 3 31.03.2010 12:51