Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/254: Рейтинг темы: голосов - 254, средняя оценка - 4.85
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
1

Выделить ячейки с B4 и до последней заполненной

29.07.2015, 13:39. Показов 48502. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я Вас уже, наверное, достал, но мне нужна Ваша помощь.
В общем мне нужно в макросе прописать выделение диапазона ячеек, начиная с B4 и кончая последней заполненной. Напишите, пожалуйста, как это будет выглядеть для столбца и как для диапазона столбцов и строк.
Поиском нашёл такое:
Visual Basic
1
Range(Selection, Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count)).Select
и подобие, но не пойму как указать начальную ячейку B4 и как указать поиск последней для столбца (вместо ActiveSheet.UsedRange.Columns.Count как указать номер столбца)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2015, 13:39
Ответы с готовыми решениями:

Поиск последней заполненной ячейки
Еще раз здравствуйте. помогите пожалуйста с таким вопросом. Есть формула вида: ...

Определить адрес последней заполненной ячейки
Range("A1").SpecialCells(xlLastCell).Address возвращает тупо последнюю ячейку Cells(Rows.Count,...

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

Макрос для копирования последней заполненной ячейки
Добрый вечер! Уважаемые гуру макросастроения. Буду весьма благодарен за ваше потраченное время ...

23
3917 / 2315 / 784
Регистрация: 02.11.2012
Сообщений: 6,158
29.07.2015, 14:05 2
Лучший ответ Сообщение было отмечено Капитан Экселя как решение

Решение

Visual Basic
1
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select
Добавлено через 6 минут
если нет пустых строк и столбцов для нескольких строк и нескольких столбцов можно так.
Visual Basic
1
ActiveSheet.Range("B4").CurrentRegion.Select
1
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 14:21  [ТС] 3
Vlad999,
Видимо не совсем корректно поставил задачу.
1. В приложенном файле нужно в макросе прописать выделение только закрашенного зелёным диапазона. Но конечная строка диапазона меняется. Нужно, чтобы он находил последнюю заполненную ячейку (могут в последней строке не во всех столбцах, закрашенных зелёным (ну в диапазоне "зелёном") быть заполненные ячейки).
2. Далее в коде делаю сортировку:
Visual Basic
1
2
3
4
ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("B4:B300") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
(начальная часть кода сортировки). Нужно в строке ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("B4:B300") _ вместо Range("B4:B300") _ прописать Range("B4:последняя заполненная ячейка столбца B") _ . Прописываю как Вы сказали (
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select), но почему-то не сортирует. Но если укажу конкретно Range("B4:B300") - всё нормально сортирует.
Вложения
Тип файла: xlsx Выделение ячеек.xlsx (9.3 Кб, 57 просмотров)
0
3917 / 2315 / 784
Регистрация: 02.11.2012
Сообщений: 6,158
29.07.2015, 14:41 4
для сортировки в
Visual Basic
1
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select)
Select не нужен.
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 14:50  [ТС] 5
Vlad999,
А по первому вопросу? "1. В приложенном файле нужно в макросе прописать выделение только закрашенного зелёным диапазона. Но конечная строка диапазона меняется. Нужно, чтобы он находил последнюю заполненную ячейку (могут в последней строке не во всех столбцах, закрашенных зелёным (ну в диапазоне "зелёном") быть заполненные ячейки).?

Добавлено через 1 минуту
Цитата Сообщение от Vlad999 Посмотреть сообщение
Код Visual BasicВыделить код
1
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select)
Не сортирует так. Если указать конкретный столбец (Range("B4:B300")) - сортирует. а так - не хочет.
0
3917 / 2315 / 784
Регистрация: 02.11.2012
Сообщений: 6,158
29.07.2015, 15:10 6
приложите файл с кодом.
П.С. напоминаю в xlsx макросы не жевут.

Добавлено через 3 минуты
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
(начальная часть кода сортировки)
в продолжении тоже должен встречаться такой же диапазон, его тоже нужно прописывать динамическим.
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 15:18  [ТС] 7
Vlad999,
В приложенном файле (диапазон выделен зелёным).
Так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос18()
'
' Макрос18 Макрос
'
 
'
    Range ("B4:E91").Select
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C4:C91"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Лист1").Sort
        .SetRange Range("B3:E91")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
работает, а так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос18()
'
' Макрос18 Макрос
'
 
'
    Range ("B4:E91").Select
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C4", Cells(Rows.Count, 3).End(xlUp)) _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Лист1").Sort
        .SetRange Range("B3:E91")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
нет. И как в приложенном файле в макросе выделить "зелёный" диапазон до последней заполненной в нём ячейки (как видите правее тоже есть столбцы с числами - их не трогаем)?
Вложения
Тип файла: xlsx Выделение ячеек.xlsx (11.7 Кб, 24 просмотров)
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
29.07.2015, 16:28 8
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
А по первому вопросу? "1. В приложенном файле нужно в макросе прописать выделение только закрашенного зелёным диапазона. Но конечная строка диапазона меняется. Нужно, чтобы он находил последнюю заполненную ячейку (могут в последней строке не во всех столбцах, закрашенных зелёным (ну в диапазоне "зелёном") быть заполненные ячейки).?
Ниже зеленого диапазона могут быть строки?

Добавлено через 16 минут
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Так работает, а так - нет.
А вы запятую забыли поставить вот здесь перед переносом:
вот так работает:
Visual Basic
1
ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C4", Cells(Rows.Count, 3).End(xlUp)), _
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 16:36  [ТС] 9
Цитата Сообщение от skol13 Посмотреть сообщение
Ниже зеленого диапазона могут быть строки?
Нет не могут. Но нижняя строка зелёного диапазона может сдвигаться.
Цитата Сообщение от skol13 Посмотреть сообщение
вот так работает:
Вау, спасибо. А у меня красным выделяло. Оказывается я Энтер лишний нажал.
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
29.07.2015, 16:51 10
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Нет не могут. Но нижняя строка зелёного диапазона может сдвигаться.
Ну так используйте решение, которое вам камрад Vlad999, в первом ответе показал.
Тем более, если количество столбцов в "зеленом диапазоне" не изменяется и оно известно.
Ставьте в
Visual Basic
1
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select
нужную цифру последнего столбца диапазона и вперед

Добавлено через 3 минуты
Цитата Сообщение от skol13 Посмотреть сообщение
Ставьте нужную цифру последнего столбца диапазона и вперед
А, не, стоп...
Столбец с комментариями не заполнен - выделяет фигню какую то
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 16:51  [ТС] 11
skol13,
Так а чем тогда этот код будет отличаться, если мой диапазон - 1 столбец?
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
29.07.2015, 16:52 12
Почему один столбец?
Там вроде зеленым столбцов 5 закрашено...
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 16:52  [ТС] 13
Цитата Сообщение от skol13 Посмотреть сообщение
1
Range("B4",Cells(Rows.Count,2).End(xlUp)).Select
Так выделит только один столбец. Не? А как тогда выделить один столбец?
У меня в оригинальном файле нет заливки цветом. Это я в примере подсветил для наглядности.
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
29.07.2015, 17:06 14
Лучший ответ Сообщение было отмечено Капитан Экселя как решение

Решение

Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Так выделит только один столбец. Не? А как тогда выделить один столбец?
Один, да.
В вашем случае, если после последней нужной вам строки больше данных нет, и известно количество столбцов диапазона для выделения можно сделать так:
Visual Basic
1
    Range("B4", Cells(ActiveCell.SpecialCells(xlLastCell).Row, 5)).Select
"5" - это номер последнего столбца для выделения. Меняя эту цифру можно выделить необходимое кол-во столбцов, от 1 до "сколько нужно"
Если "сколько нужно" - понятие переменное - тут надо смотреть уже дальше

Добавлено через 6 минут
И в личку можно не дублировать сообщения
Оповещение работает нормально
1
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 17:08  [ТС] 15
В примере работает, а в оригинальном файле - нет. Вот файл и код (что написано в комментариях никому не говорить). Столбцы от B до E. Стиль ссылок у меня R1C1.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос12()
'
' Макрос12 Макрос
'
 
'
    Range("B4", Cells(ActiveCell.SpecialCells(xlLastCell).Row, 5)).Select
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C4", Cells(Rows.Count, 3).End(xlUp)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Лист2").Sort
        .SetRange Range("B3:E554")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Вложения
Тип файла: xlsx Сравнение ПЕРЕМЕЩЕНИЙ.xlsx (37.5 Кб, 39 просмотров)
0
15 / 15 / 5
Регистрация: 01.12.2014
Сообщений: 117
29.07.2015, 17:14 16
Я не особо вчитывался в тему, не смотрел ответы, и не качал пример.
Но помоему это как-то связано.

Цитата Сообщение от Vlad999 Посмотреть сообщение
приложите файл с кодом.
П.С. напоминаю в xlsx макросы не жевут.
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Вложения
Сравнение ПЕРЕМЕЩЕНИЙ.xlsx (37.5 Кб, 0 просмотров)
0
5 / 5 / 1
Регистрация: 27.07.2015
Сообщений: 88
29.07.2015, 17:15  [ТС] 17
Блин разобрался.

Добавлено через 30 секунд
сороконожка,

Неа. Макрос у меня в Персонале лежит.
0
15 / 15 / 5
Регистрация: 01.12.2014
Сообщений: 117
29.07.2015, 17:19 18
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Неа. Макрос у меня в Персонале лежит.
Ваш язык мне не понятен, ради интереса - скачал, поставил, запустил. Всё сработало. Отсортировало по дате.
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
29.07.2015, 17:19 19
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
что написано в комментариях никому не говорить
Хорошо, никому не скажу
Цитата Сообщение от сороконожка Посмотреть сообщение
Но помоему это как-то связано.
Не, не связано, но формат файла у ТС какой то странный, с двойным расширением. После xlsx идет обычный xls
Ексель ругается но вроде открывает
Без макросов конечно
Цитата Сообщение от Капитан Экселя Посмотреть сообщение
Блин разобрался.
Вопрос решен значит?
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
29.07.2015, 17:20 20
Непонятны метания между листами "Лист1" и "Лист2".
Зачем работаем с "Лист2" , ведь он пустой?
0
29.07.2015, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2015, 17:20
Помогаю со студенческими работами здесь

Поиск последней заполненной ячейки и добавлением примечания в соседнию
Здравствуйте, найти последнюю заполненную ячейку в столбце В и добавить примечание в соседнею...

Номер строки последней заполненной ячейки в заданном диапазоне
Всем доброго времени суток. Помогите наладить код по определению номера строки последней...

Найти номер последней заполненной ячейки в столбце, Excel
Добрый день! Импортирую данные из таблицы Excel,таблица состоит из двух столбцов. Первый очень...

Вывести в сообщении значение последней заполненной ячейки в базе Access
Здравствуйте! Подскажите пожалуйста каким образом с помощью VBA можно вывести в сообщении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru