Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создать Макрос по выполнению последовательных действий - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создать Макрос по выполнению последовательных действий (Формулы/Formulas)
Создать Макрос по выполнению последовательных действий
rever27 Дата: Воскресенье, 10.05.2015, 17:05 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Добрый День.
Имеется таблица, которую приходится каждый раз сортировать и редактировать вручную.
Хотелось бы поинтересоваться у знатоков, как автоматизировать этот процесс через макрос?
Подробнее:
Сортируемый диапазон с 3 строки до первой пустой строчки. Сортируются все столбцы
1. Сортировка по столбцу Q и удаление всех значения от 1 до 20
2. Сортировка по столбцу R и удаление всех значения меньше 1.4
3. Через функцию "Удалить дубликаты" удаление всех копий, которые одинаковые в столбцах P, Q, T, W, X
4. Сортировать по значению R, затем по S
К сообщению приложен файл: 8768835.xlsx (21.8 Kb)
 
Ответить
СообщениеДобрый День.
Имеется таблица, которую приходится каждый раз сортировать и редактировать вручную.
Хотелось бы поинтересоваться у знатоков, как автоматизировать этот процесс через макрос?
Подробнее:
Сортируемый диапазон с 3 строки до первой пустой строчки. Сортируются все столбцы
1. Сортировка по столбцу Q и удаление всех значения от 1 до 20
2. Сортировка по столбцу R и удаление всех значения меньше 1.4
3. Через функцию "Удалить дубликаты" удаление всех копий, которые одинаковые в столбцах P, Q, T, W, X
4. Сортировать по значению R, затем по S

Автор - rever27
Дата добавления - 10.05.2015 в 17:05
Serge_007 Дата: Воскресенье, 10.05.2015, 17:32 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте

Запишите Ваши действия макрорекордером - вот и будет Вам практически готовый макрос, в котором только останется определять количество строк:
[vba]
Код
'для определения последней строки в столбце A
iLastRow& = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
iLastRow& = Range("A65536").End(xlUp).Row
iLastRow& = Cells(65536, 1).End(xlUp).Row
iLastRow& = Cells(65536, ActiveCell.Column).End(xlUp).Row
iLastRow& = Cells(65536, "A").End(xlUp).Row
MsgBox iLastRow&
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

Запишите Ваши действия макрорекордером - вот и будет Вам практически готовый макрос, в котором только останется определять количество строк:
[vba]
Код
'для определения последней строки в столбце A
iLastRow& = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
iLastRow& = Range("A65536").End(xlUp).Row
iLastRow& = Cells(65536, 1).End(xlUp).Row
iLastRow& = Cells(65536, ActiveCell.Column).End(xlUp).Row
iLastRow& = Cells(65536, "A").End(xlUp).Row
MsgBox iLastRow&
[/vba]

Автор - Serge_007
Дата добавления - 10.05.2015 в 17:32
rever27 Дата: Воскресенье, 10.05.2015, 21:40 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо за функцию.
Но мне сложновато сопоставить все вместе, когда в VBA полный 0.
Макрорекордером воспользовался, но он записывает последовательность моих действий, т.е. на другом листе, с другим диапазоном он уже не будет работать
 
Ответить
СообщениеСпасибо за функцию.
Но мне сложновато сопоставить все вместе, когда в VBA полный 0.
Макрорекордером воспользовался, но он записывает последовательность моих действий, т.е. на другом листе, с другим диапазоном он уже не будет работать

Автор - rever27
Дата добавления - 10.05.2015 в 21:40
Serge_007 Дата: Воскресенье, 10.05.2015, 22:09 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
...на другом листе, с другим диапазоном...
А поменять имя листа и диапазон в коде Вы не в силах?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
...на другом листе, с другим диапазоном...
А поменять имя листа и диапазон в коде Вы не в силах?

Автор - Serge_007
Дата добавления - 10.05.2015 в 22:09
rever27 Дата: Вторник, 12.05.2015, 15:43 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
К сожалению не могу, диапазон всегда разный, на одном листе меняется много раз, нужна зависимость от текущей выделенной ячейки.

[vba]
Код
Sub b_Sort_O()

lastCol = ActiveSheet.Range("w50").End(xlToRight).Column
LastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range(ActiveCell, ActiveSheet.Cells(LastRow, lastCol)).Select

     Selection.Sort Key1:=Range("O1"), Order1:=xlAscending, Header:=xlGuess, _
         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
         DataOption1:=xlSortTextAsNumbers
[/vba]

Вот нашел код для выделения ячейки относительно текущей.

Но обычным макрорекордером не обойтись при использовании "Удалить дубликаты", поэтому и хотелось бы получить совет в виде кода от специалистов
 
Ответить
СообщениеК сожалению не могу, диапазон всегда разный, на одном листе меняется много раз, нужна зависимость от текущей выделенной ячейки.

[vba]
Код
Sub b_Sort_O()

lastCol = ActiveSheet.Range("w50").End(xlToRight).Column
LastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range(ActiveCell, ActiveSheet.Cells(LastRow, lastCol)).Select

     Selection.Sort Key1:=Range("O1"), Order1:=xlAscending, Header:=xlGuess, _
         OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
         DataOption1:=xlSortTextAsNumbers
[/vba]

Вот нашел код для выделения ячейки относительно текущей.

Но обычным макрорекордером не обойтись при использовании "Удалить дубликаты", поэтому и хотелось бы получить совет в виде кода от специалистов

Автор - rever27
Дата добавления - 12.05.2015 в 15:43
SAGE Дата: Вторник, 12.05.2015, 18:45 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 5 ±
Замечаний: 0% ±

Excel 2007
rever27,
определить координаты выделенной ячейки на листе проще так

[vba]
Код
dim x
dim y

x = ActiveCell.Row ' номер строки
y = ActiveCell.Column '  номер колонки
[/vba]

из вашего сообщения не ясно по какому условию сортировка производится?
также какие условия должны выполнятся при удалении дубликатов (удаляется вся строка?)


Best regards,
SAGE
 
Ответить
Сообщениеrever27,
определить координаты выделенной ячейки на листе проще так

[vba]
Код
dim x
dim y

x = ActiveCell.Row ' номер строки
y = ActiveCell.Column '  номер колонки
[/vba]

из вашего сообщения не ясно по какому условию сортировка производится?
также какие условия должны выполнятся при удалении дубликатов (удаляется вся строка?)

Автор - SAGE
Дата добавления - 12.05.2015 в 18:45
Wasilich Дата: Вторник, 12.05.2015, 21:38 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
диапазон всегда разный, на одном листе меняется много раз, нужна зависимость от текущей выделенной ячейки.
Расшифруйте!
И проверьте, может так надо.
Буду не скоро :)
К сообщению приложен файл: rever27.xls (61.5 Kb)
 
Ответить
Сообщение
диапазон всегда разный, на одном листе меняется много раз, нужна зависимость от текущей выделенной ячейки.
Расшифруйте!
И проверьте, может так надо.
Буду не скоро :)

Автор - Wasilich
Дата добавления - 12.05.2015 в 21:38
rever27 Дата: Среда, 13.05.2015, 10:18 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
из вашего сообщения не ясно по какому условию сортировка производится?
также какие условия должны выполнятся при удалении дубликатов (удаляется вся строка?)

Да, удалятся должна вся строка. Суть в том, что я ставлю курсор на ту строчку, с которой я хочу удалить дубликаты, в моем случае это O3, макрос должен выделить всю строку полностью и столбец до первой пустой ячейки (ибо там потом пойдет отчерк и новые данные). далее он должен сравнить значения каждого столбца (P, Q, T, W, X), и при совпадении всех 5 условий - удалить их. (К примеру это строки с 12 по 15.
 
Ответить
Сообщение
из вашего сообщения не ясно по какому условию сортировка производится?
также какие условия должны выполнятся при удалении дубликатов (удаляется вся строка?)

Да, удалятся должна вся строка. Суть в том, что я ставлю курсор на ту строчку, с которой я хочу удалить дубликаты, в моем случае это O3, макрос должен выделить всю строку полностью и столбец до первой пустой ячейки (ибо там потом пойдет отчерк и новые данные). далее он должен сравнить значения каждого столбца (P, Q, T, W, X), и при совпадении всех 5 условий - удалить их. (К примеру это строки с 12 по 15.

Автор - rever27
Дата добавления - 13.05.2015 в 10:18
rever27 Дата: Среда, 13.05.2015, 10:23 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Расшифруйте!
И проверьте, может так надо.
Буду не скоро


Кнопка SORT очень полезная! Спасибо. Но как сделать, чтобы она сортировала значения только от ячейки под кнопкой до первой пустой строки? Как писал выше, таблица будет состоять из нескольких частей, и работу нужно будет производить над каждой. Поэтому хотелось бы, чтобы макрос начинал работу именно от положения выделенной ячейки, и использовал данный всей строки, но ограничивал столбцы.

Макрос Кнопка!_Щелкнуть у меня не запустился. "Не удается выполнить макрос. Возможно, этот макрос отсутствует в текущей книге".
Скопировал его и в лист, и в другую книгу - результата 0


Сообщение отредактировал rever27 - Среда, 13.05.2015, 11:04
 
Ответить
Сообщение
Расшифруйте!
И проверьте, может так надо.
Буду не скоро


Кнопка SORT очень полезная! Спасибо. Но как сделать, чтобы она сортировала значения только от ячейки под кнопкой до первой пустой строки? Как писал выше, таблица будет состоять из нескольких частей, и работу нужно будет производить над каждой. Поэтому хотелось бы, чтобы макрос начинал работу именно от положения выделенной ячейки, и использовал данный всей строки, но ограничивал столбцы.

Макрос Кнопка!_Щелкнуть у меня не запустился. "Не удается выполнить макрос. Возможно, этот макрос отсутствует в текущей книге".
Скопировал его и в лист, и в другую книгу - результата 0

Автор - rever27
Дата добавления - 13.05.2015 в 10:23
Wasilich Дата: Четверг, 14.05.2015, 19:15 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Макрос Кнопка!_Щелкнуть у меня не запустился.
Исправил но, ничего не менял. Нет времени.
К сообщению приложен файл: 0081170.xls (63.5 Kb)
 
Ответить
Сообщение
Макрос Кнопка!_Щелкнуть у меня не запустился.
Исправил но, ничего не менял. Нет времени.

Автор - Wasilich
Дата добавления - 14.05.2015 в 19:15
rever27 Дата: Пятница, 15.05.2015, 10:01 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic
Отлично, все работает как нужно.
Осталось понять, как настроить удаление дубликатов, как я описал 3 постами выше )
 
Ответить
СообщениеWasilic
Отлично, все работает как нужно.
Осталось понять, как настроить удаление дубликатов, как я описал 3 постами выше )

Автор - rever27
Дата добавления - 15.05.2015 в 10:01
Wasilich Дата: Понедельник, 18.05.2015, 18:27 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
таблица будет состоять из нескольких частей, и работу нужно будет производить над каждой
Это и есть усложнение задачи. Не проще ли разные таблицы разместить на разных листах.
К сообщению приложен файл: 0483257.xls (69.0 Kb)
 
Ответить
Сообщение
таблица будет состоять из нескольких частей, и работу нужно будет производить над каждой
Это и есть усложнение задачи. Не проще ли разные таблицы разместить на разных листах.

Автор - Wasilich
Дата добавления - 18.05.2015 в 18:27
rever27 Дата: Понедельник, 18.05.2015, 22:54 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic Спасибо за труды.
Но вариант не совсем тот. Он удаляет только ячейки, расположенные рядом друг с другом.

Добавлено.
Все оказалось проще и красивее, чем я думал. Методом Тыка додумал вот такой код:
[vba]
Код
Sub b_RemoveDuplicates()

Dim r As Long, rng As Range
     Application.ScreenUpdating = False
     Application.EnableEvents = False
         ActiveSheet.Range(ActiveCell, Selection.End(xlDown).EntireRow).RemoveDuplicates Columns:=Array(18), Header:=xlNo  
          
         For r = 1 To ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
             If Application.CountA(Rows(r)) = 0 Then
                 If rng Is Nothing Then Set rng = Rows(r) Else Set rng = Union(rng, Rows(r))
             End If
         Next r
         If Not rng Is Nothing Then rng.Delete

     Application.ScreenUpdating = True
     Application.EnableEvents = True
End Sub
[/vba]


Сообщение отредактировал rever27 - Вторник, 19.05.2015, 00:22
 
Ответить
СообщениеWasilic Спасибо за труды.
Но вариант не совсем тот. Он удаляет только ячейки, расположенные рядом друг с другом.

Добавлено.
Все оказалось проще и красивее, чем я думал. Методом Тыка додумал вот такой код:
[vba]
Код
Sub b_RemoveDuplicates()

Dim r As Long, rng As Range
     Application.ScreenUpdating = False
     Application.EnableEvents = False
         ActiveSheet.Range(ActiveCell, Selection.End(xlDown).EntireRow).RemoveDuplicates Columns:=Array(18), Header:=xlNo  
          
         For r = 1 To ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
             If Application.CountA(Rows(r)) = 0 Then
                 If rng Is Nothing Then Set rng = Rows(r) Else Set rng = Union(rng, Rows(r))
             End If
         Next r
         If Not rng Is Nothing Then rng.Delete

     Application.ScreenUpdating = True
     Application.EnableEvents = True
End Sub
[/vba]

Автор - rever27
Дата добавления - 18.05.2015 в 22:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создать Макрос по выполнению последовательных действий (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!