Café Québécois

Квебекское кафе

Текущее время: 21 авг 2018, 01:35

Часовой пояс: UTC − 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Макрос в Экселе
СообщениеДобавлено: 12 июн 2018, 06:17 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Есть задача сделать макрос для следующей задачи.

Есть изначальный файл с данными с несколькими десятками колонок с уникальными именами типа Имя1, Имя2, Имя3 и т.д.
Их нужно перенести в другой эксель-файл в колонки ДругоеИмя1, ДругоеИмя2, ДругоеИмя3 и т.д. Есть информация, что соответствует чему, но колонки идут вразнобой. Потом ещё над некоторыми из них всякие действия, типа смены формата, операций Vlookup в других файлах, concatenate отдельных колонок и т.п.

В принципе, рабочий макрос уже есть, построенный на принципе: Искать Имя1 > Переход на 2-ю строку > Копировать 1000 строк > Переход в другой файл > Искать ДругоеИмя1 > Переход на 2-ю строку > Вставить. Как мне изначально сказали, так я и сделала.
Однако изучение кода макроса показало, что у него нет связи между нахождением ячейки Имя1 и переходом на 2-ю строку той же колонки. Что значит, что если макрос запустить на файле с другим порядком колонок, то он скопирует не то или не туда, т.к. ориентируется не на имена, а на буквенные обозначения колонок. Он ищет ячейки, а не колонки. Как его научить искать именно колонки?

Вот отрывок:
Код:
 Cells.Find(What:="employerphone", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate ///вот тут он нашёл нужную колонку (точнее ячейку)
    Range("Q2:Q1001").Select  /// а вот это уже совсем другое действие, а нужна логика +1 к предыдущему
    Selection.Copy
    Windows("Файл куда копируется.xlsx").Activate
    Cells.Find(What:="telbur", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    Range("D2").Select /// Та же проблема
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("D:D").Select
    Application.CutCopyMode = False


Если знаете ответ, напишите его в очень простом виде без использования сложных терминов и программистских понятий. Не в виде кода, а в виде инструкций куда и как жать в окне Экселя.

Спасибо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 12 июн 2018, 07:36 
Не в сети
Аватара пользователя

Зарегистрирован: 18 июл 2009, 20:57
Сообщения: 34464
50 долларов в час. Гаданием по бартеру не беру.

_________________
Да-да!..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 12 июн 2018, 08:04 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Я б сама, но Эксель - слишком сильное колдунство.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 02:47 
Не в сети

Зарегистрирован: 25 июл 2005, 07:51
Сообщения: 39
ActiveCell.Offset(1, 0)

_________________
http://www.globalresearch.ca/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 06:00 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
nouveau писал(а):
ActiveCell.Offset(1, 0)
Это куда и что с этим потом делать?

У меня макрос на около 300 действий. Мне нужно знать сам принцип, чтобы его использовать при выполнении этих почти 300 действий из окна экселя, не касаясь кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 06:08 
Не в сети
Аватара пользователя

Зарегистрирован: 18 июл 2009, 20:57
Сообщения: 34464
Вот очень живенький форум, там часто помогают (забесплатно! а не так как я :lol: )

https://www.planetaexcel.ru/forum/

_________________
Да-да!..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 07:49 
Не в сети

Зарегистрирован: 25 июл 2005, 07:51
Сообщения: 39
Merlion писал(а):
nouveau писал(а):
ActiveCell.Offset(1, 0)
Это куда и что с этим потом делать?

У меня макрос на около 300 действий. Мне нужно знать сам принцип, чтобы его использовать при выполнении этих почти 300 действий из окна экселя, не касаясь кода.


замените проблемную линию
ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select

_________________
http://www.globalresearch.ca/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 08:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
У меня не одна линия проблемная. У меня сам принцип установления соотношений между искомыми колонками и данными в них проблемный.
Я хочу, чтобы в каждой связке

Найти Имя14 - перейти на 2 строку - копировать 1000 строк - перейти в файл2 - найти ДругоеИмя10 - перейти на 2 строку - вставить

Была относительная связь между найденными ячейками, - которые суть названия колонок, - и ячейками прямо под ними, куда я копирую данные.

Мне кажется, это какая-то очень базовая функция, для которой должна быть галочка или кнопка.


Цитата:
Вот очень живенький форум, там часто помогают (забесплатно! а не так как я :lol: )
https://www.planetaexcel.ru/forum/
Я зарегилась на одном таком, но там в качестве ответов дают непонятный код. Когда говоришь, что непонятно, добавляют непонятного кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 08:24 
Не в сети

Зарегистрирован: 25 июл 2005, 07:51
Сообщения: 39
так функция OFFSET(x,y) это и делает. она переходит на х линий вниз/вверх, или у колон вправо/влево относительно выбранной клетки.

_________________
http://www.globalresearch.ca/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 08:33 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
OK, предположим, поиск нашёл моё значение в D1
Как будет выглядеть копирование со 2-й по 1001-ю ячейки с этим офсетом?

В вашем коде
ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select
целых 3 места, где вводятся координаты. Если в 3-м месте ясно, что это последняя ячейка, то что писать в 2 первых скобках?


Правильно ли я понимаю, что эту замену надо будет потом на все подобные макросы делать вручную по окончании записи макроса и что не существует действия через клавиатуру или мышкой через пользовательских интерфейс, который бы создавал именно такую строку кода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 08:43 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Чёрт возьми, я знала! Есть такая кнопочка!

Изображение

Как только я на неё нажала, в коде появились строчки с офсетом.

Код:
    Cells.Find(What:="aaa", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1:A298").Select
    Selection.Copy
    Windows("another file.xlsx").Activate
    ActiveCell.Offset(18, 7).Range("A1").Select
    Cells.Find(What:="bbb", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


Однако за ними всё равно идут привязанные к колонке обозначения выделяемых данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 08:51 
Не в сети

Зарегистрирован: 25 июл 2005, 07:51
Сообщения: 39
Merlion писал(а):
OK, предположим, поиск нашёл моё значение в D1
Как будет выглядеть копирование со 2-й по 1001-ю ячейки с этим офсетом?

В вашем коде
ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select
целых 3 места, где вводятся координаты. Если в 3-м месте ясно, что это последняя ячейка, то что писать в 2 первых скобках?


Правильно ли я понимаю, что эту замену надо будет потом на все подобные макросы делать вручную по окончании записи макроса и что не существует действия через клавиатуру или мышкой через пользовательских интерфейс, который бы создавал именно такую строку кода?


ActiveCell.Offset(1, 0). - спустится на одну линия вниз, относительно найденной
.Range(ActiveCell.Offset(0, 0) - можно заменить на просто ActiveCell, остаемся в той же клетке

запустите это макро и поиграйте с цифрами

Sub Macro1()
Range("A1").Select
ActiveCell.Offset(1, 0).Range(ActiveCell, ActiveCell.Offset(10, 0)).Select
End Sub

через интерфайс, по-моему нельзя это сделать. по-крайней мере я не знаю как.

_________________
http://www.globalresearch.ca/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 09:14 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Ваш макрос выделил ячейки со 2 по 12.

Предположим, в A1 написано слово "Город". Ищем его через Ctrl+F. Потом нужен переход вниз и вставка названий городов.
И чтобы нигде не фигурировало название колонки А. Потому что если слово "Город" в другом исходном или целевом файле будет стоять в колонке G, то мне надо, чтобы макрос брал колонку G под словом "Город".

У меня появилась мысль разметить целевой файл этими... не знаю, как они по-русски... Которые в Formules > Gestionnaire de noms. Там выделенному массиву ячеек (например, колонке) присваивается имя. Тогда вставка в такой файл выглядит так:

Код:
    Cells.Find(What:="ааа", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    ActiveCell.Offset(1, 0).Range("A1:A298").Select
    Selection.Copy
    Windows("файл.xlsx").Activate
    Application.Goto Reference:="Уникальное имя"
    ActiveSheet.Paste


Наверное, исходный файл так же можно разметить в первых операциях макроса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 10:27 
Не в сети
Аватара пользователя

Зарегистрирован: 18 фев 2009, 07:26
Сообщения: 4483
Откуда: Montreal, Quebec
Ээээ, вообще говоря, для решения таких задач надо таки изучить вижуал бейсик.
Как у нас говорили в начале 90х - басец)
Самоучителей в сети много, скажем вот -
http://office-guru.ru/excel/samouchitel ... a-453.html

Если это разовая акция, то, конечно, можно обойтись и консультациями посторонних людей.
Но если это таки регулярный процесс, то таки надо владеть Excel VBA.

Лично я, например, никогда на нем сам ничего под эксель не писал, у меня для этого дела был программист, который по ходу дела чуток разобрался в вижуал бейске (так то он был программист на совсем другом). Я ему объяснял, что надо, а он уже писал код. Так что если у вас под рукой какой-нибудь программист, то можете его простимулировать написать нужное на VBA, вообще говоря, для нормального программиста достаточно почитать хелп. Упомянутый выше программер первый раз так и начал под эксел писать.
Но только такой программист должен быть, конечно, рядом, и быть вам чем-то обязанным, ибо просто так такой фигней они заниматься не любят.

Я извиняюсь за банальности, это я так, разговор поддержать.

_________________
Лёша


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 12:26 
Не в сети
Аватара пользователя

Зарегистрирован: 18 июл 2009, 20:57
Сообщения: 34464
Леша писал(а):
Ээээ, вообще говоря, для решения таких задач надо таки изучить вижуал бейсик.
Как у нас говорили в начале 90х - басец)
Самоучителей в сети много, скажем вот -
http://office-guru.ru/excel/samouchitel ... a-453.html

Если это разовая акция, то, конечно, можно обойтись и консультациями посторонних людей.
Но если это таки регулярный процесс, то таки надо владеть Excel VBA.

Лично я, например, никогда на нем сам ничего под эксель не писал, у меня для этого дела был программист, который по ходу дела чуток разобрался в вижуал бейске (так то он был программист на совсем другом). Я ему объяснял, что надо, а он уже писал код. Так что если у вас под рукой какой-нибудь программист, то можете его простимулировать написать нужное на VBA, вообще говоря, для нормального программиста достаточно почитать хелп. Упомянутый выше программер первый раз так и начал под эксел писать.
Но только такой программист должен быть, конечно, рядом, и быть вам чем-то обязанным, ибо просто так такой фигней они заниматься не любят.

Я извиняюсь за банальности, это я так, разговор поддержать.

Вы явно были далеки от этого в начале 90-х. "Васик" же! :D
А стимулируются программисты деньгами. но наша гадалка хочет халявы.
Я предложила свои услуги, последние 25 лет я себе на хлеб зарабатываю Васиком в том числе, но мадам осталась недовольна расценками.

_________________
Да-да!..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 12:46 
Не в сети
Аватара пользователя

Зарегистрирован: 18 фев 2009, 07:26
Сообщения: 4483
Откуда: Montreal, Quebec
ну, для кого Васик, а для кого Басец)

А так - ну да, ну да...

_________________
Лёша


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 13:36 
Не в сети
Аватара пользователя

Зарегистрирован: 18 июл 2009, 20:57
Сообщения: 34464
Вся эта история пахнет не только тем, что "сделайте за меня". но и тем. что "найдите время. силы и желание лично мне обьяснить почему так. а не иначе". А это гораздо более тяжелый порок. Но карты сказали - "тебе все обьяснят, люди - они добрые. И работают за орешки ;)".

_________________
Да-да!..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 13 июн 2018, 15:07 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Мне не доплачивают за такие улучшения, так что я решила попытать удачи и закинула удочку мирозданию в пруд "А поговорить?".
Вдруг клюнуло бы... Ну, кто хочет улучшить себе карму?

Я тут поняла, что при первичном назывании столбцов уникальными именами в исходном файле всё равно будут использованы буквы колонок. Возвращаемся к изначальной проблеме сохранения инфы об относительном переходе между ячейками.

Nouveau, та строчка, что вы дали
ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select
В ней вообще-вообще ничего менять не надо? Можно её как есть тупо вставить после каждого блока cell.find и перед началом операции копирования, как если бы она была одним большим иероглифом?

Лёша, я хэтээмэль и цээсэс еле поняла, а вы о языке программирования. Я ж говорю, всё то есть сильное колдунство!
Я иного биологического вида, не предназначенного природой для программирования и математики. Я умею только на кнопочки жать. И карточки с картинками раскладывать. Но это для данной задачи на моём уровне не более актуально, чем томик Шекспира для кенгуру с запором.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 14 июн 2018, 00:34 
Не в сети

Зарегистрирован: 25 июл 2005, 07:51
Сообщения: 39
Merlion писал(а):
Мне не доплачивают за такие улучшения, так что я решила попытать удачи и закинула удочку мирозданию в пруд
Nouveau, та строчка, что вы дали
ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select
В ней вообще-вообще ничего менять не надо? Можно её как есть тупо вставить после каждого блока cell.find и перед началом операции копирования, как если бы она была одним большим иероглифом?


скопируйте ваш файл и попробуйте.
но с вашего примера,
Range("Q2:Q1001").Select одно и тоже должно быть ActiveCell.Offset(1, 0).Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(999, 0)).Select
а это
Range("D2").Select должно быть ActiveCell.Offset(1, 0).Select

_________________
http://www.globalresearch.ca/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос в Экселе
СообщениеДобавлено: 14 июн 2018, 14:10 
Не в сети
Аватара пользователя

Зарегистрирован: 30 июл 2003, 09:12
Сообщения: 12924
Откуда: Msk > Qc > Mtl >
Цитата:
Я иного биологического вида, не предназначенного природой для программирования и математики. Я умею только на кнопочки жать. И карточки с картинками раскладывать.



Вотъ! Математики и программирования здесь нет.

Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC − 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB