Требуется макрос Excel
Нужен макрос Excel со след функционалом, или как я вижу поэтапную работу этого макроса:
1 Выбираем файл, который нужно обработать.
2 Макрос проводит автозамены в столбце Е. Для этого в файле макроса есть дополнительный лист, куда я в два разных столбца вписываю, что именно нужно заменить и на что заменить. Но есть нюанс, о нем подробнее:
- Столбец Е – это адрес. Там бывают названия стран на русском, а не на родном для страны языке. Наша задача, чтобы страна всегда называлась на родном языке, кроме тех случаев, когда страна в столбце А не совпадает со страной в адресе в Е.
Подробнее и на примере:
Макрос смотрит столбец А – там, к примеру, USA. Идет в лист автозамены – находит там USA (это то, на что мы будем менять) и видит США в той же строке в соседнем столбце. Далее смотрит столбец Е исходного документа. Если в столбце Е присутствует США – меняет его на USA. Если же в столбце Е – Корея, то мы меняем надпись Корея на ее английское название.
- Для этого дополнительно вводим еще один лист (или делаем это на листе автозамены), куда новым столбцом прописываем английские названия всех стран. То есть, если страна в столбце А не совпадает со страной в Е – мы просто берем данные для автозамены из другого места)
3 Макрос делает транслит кириллицы в латиницу, исключая список тех стран, которые не нужно транслитить. Для этого мы так же вводим лист, куда я пропишу список стран, по которым не нужно ничего транслитить. Смотрим на столбец А – если страна не имеется в списке «нетранслит» - то заменяем всю кириллицу на латиницу. Если же есть – ничего не трогаем.
P.S. для ускорения работы макроса можно проводить ранслит только в столбцах D и E
4 Добавляем в исходный документ столбец K, куда будет прописан айдишник страны. Уже прописанный ранее принцип - еще один отдельный лист макроса, где прописаны названия стран и какую присвоить цифру. Сверяем в исходной таблице первый столбец и нужный лист макроса, ищем совпадения – дописываем айдишник.
Примечание: Если не нашли нужную страну – не пропускаем ее, а выводим на экране окошко, где пишем, что не можем присвоить айдишник, показываем мне инфо из 1-го столбца (название страны) и поле, куда я введу сам айди страны. Соответственно, если в документе снова встретится точно такая же проблема – снова спрашивать не нужно.
5. Автозамена в столбцах I и J – все запятые меняем на точки. Там находятся координаты - обычные числа, как положительные, так и отрицательные. Нужно просто заменить и не намудрить с форматами)))
6 Самый объемный пункт. Здесь начинается работа с файлами.
6.1 В столбце "Н" исходного документа есть имена файлов (изображения jpeg и png), но без расширения. Первоначально я указываю путь к папке с картинками.
6.2 Макрос должен искать изображения в папке и перемещать их в другую нужную мне папку, создавая внутри подпапки. Также я должен задать ограничение на число картинок в новых папках. Пример:
Я указал путь к папке, в которой 150 000 картинок, к примеру, "D\картинки", указал путь, куда должно все это переместиться "D\обработанные картинки" и ограничение в 1 000. Макрос ищет по столбцу Н в таблице нужные файлы и переносит их в новое место. Помимо этого внутри папки "D\обработанные картинки" создаются подпапки с именами 1, 2, 3, ...150, и в каждую папку кладется по 1 000 картинок. Ограничения, как уже сказал, должны задаваться вручную, как и путь к входящей и исходящей папке.
6.3 Макрос в новый столбец "L" дописывает путь к каждой картинке, а также ее расширение. Ну, например, "D\обработанные картинки\1\природа.png" Там только jpeg и png файлы, но полное имя файла с расширением и путь к файлу дописать необходимо.
Нюансы:
- Я должен иметь возможность указать папку с исходными картинками, внутри которой будут подпапки. В таком случае поиск будет идти и по самим папкам и в подпапках. Смысл в том, что иногда бывают таблицы по 1 млн строк – и, соответственно, 1 млн мелких файлов в папке могут повесить систему. Если же внутри будет 10 папок по 100к – то все норм. То есть, я указываю общую папку – и макрос ищет и обходит все подпапки внутри нее
- В редких случаях бывает такое, что таблицы две (так как число строк в экселе ограничено), а картинки все лежат в одном месте, и их уже не разделить. Для таких случаев я должен иметь возможность указать номер подпапки, с которой продолжать нумерацию. То есть я, например, обработал первую таблицу в 1,1 млн строк – и картинки переместились в подпапки 1-300. При обработке второй таблицы я указываю, что нужно начинать создавать подпапки с номера 301 – и работа просто «продолжается».
- Скорость обработки должна быть высокой. Могу выслать для примера рабочий макрос – он очень быстро и качественно ищет \ перемещает картинки, но не соответствует всем текущим требованиям.
7 Удаляем в таблице столбцы "А" "С" "G"
В данный момент есть макрос, выполняющий все действия 1,2.3,5,7. Его я без проблем могу выслать вам в помощь. Единственное отличие – макрос разбивает большой документ на мелкие – но для взятия куска кода это вряд ли имеет значение) Работает быстро и как надо – можно брать а основу, но и лишняя «перепроверка» не помешает.
Есть отдельный макрос по работе с файлами. Он отличается от того, что описано в ТЗ (пункт 6), но мне нравится скорость его работы. Этот макрос просто ищет файл и переносит в отдельную папку (создавался с другой целью). Можете его тоже использовать – но, на мой взгляд, вы возьмете оттуда не больше половины кода. Главное, что там есть – он ОЧЕНЬ быстро обрабатывает файлы, и это важно