Страницы: 1
RSS
VBA последний заполненный столбец в диапазоне.
 
Еще раз Здравствуйте Уважаемые Эксперты.
Подскажите возможно ли вообще в Диапазоне найти последний заполненный столбец?
Не на листе а в диапазоне?
Я заимствовал с одного схожего сайта конструкцию и на основе ее соорудил следующий код:
Код
Sub Posl_stroka()

Dim rF As Range
Dim lLastRow As Long, lLastCol As Long

Set rF = Range("A5:J16").Find("*", , xlValues, xlWhole, xlPrevious)
   lLastRow = rF.Row    'последняя заполненная строка
   lLastCol = rF.Column 'последний заполненный столбец

MsgBox lLastRow
MsgBox lLastCol

End Sub
По его итогу последней строкой оказалось 7, а столбцом 1. Хотя "Глазами" видно что последний заполненный столбец это 8, а строка 9. Складывается такое ощущение, что дальше 1 столбца предложенный выше вариант не анализировал.
Прошу уточнить, возможно ли именно в диапазоне, т.е. в объекте Range(),  найти последнюю заполненную строку и столбец?
Если не возможно, то остаются только циклы?

Прошу помочь разобраться.

Благодарю Вас?
 
Цитата
IgorBoot написал: с одного схожего сайта
С ЭТОГО? Там много других способов, а по этому способу у меня тоже как-то возник вопрос к Дмитрию (автору), но все недосуг было его озвучить :)  
Изменено: Sanja - 14.02.2019 12:19:11
Согласие есть продукт при полном непротивлении сторон
 
Данные - константы? Или могут быть формулы?
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Уважаемый Sanja.
Источник Вы указали правильно.))

Уважаемый Михаил Лебедев
Значения, ну т.е. константы.

И в принципе если к Range() ничего нельзя добавить, чтобы был адекватный поиск, т.е. уходить на циклы.
то решение я сам докумекаю.

Скажите мне пожалуйста можно все таки с помощью Range() в указанном диапазоне найти последние заполненные строки/столбцы или нет?
 
Код
Sub Макрос1()
    Dim rng1 As Range, rng2 As Range, myCol As Long, myRow As Long
    Set rng1 = Range("A5:J16").SpecialCells(xlCellTypeConstants, 23)
    For Each rng2 In rng1
        If rng2.Column > myCol Then myCol = rng2.Column
        If rng2.Row > myRow Then myRow = rng2.Row
    Next
    Set rng1 = Range("A5:J16").SpecialCells(xlCellTypeFormulas, 23)
    For Each rng2 In rng1
        If rng2.Column > myCol Then myCol = rng2.Column
        If rng2.Row > myRow Then myRow = rng2.Row
    Next
    Cells(myRow, myCol).Select
    MsgBox Cells(myRow, myCol).Address
    Set rng1 = Nothing
End Sub
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Уважаемый Михаил Лебедев.
Благодарю Вас за ответ.

Позвольте у Вас уточнить, где идет присвоение rng2? Я этого к сожалению не вижу.

 
Код
lLastRow = Cells.Find("*", [A1], xlValues, , xlByRows, xlPrevious).Row
lLastCol = Cells.Find("*", [A1], xlValues, , xlByColumns, xlPrevious).Column
 
Цитата
IgorBoot написал:
где идет присвоение rng2
В конструкции For Each...Next (почитайте про неё, там всё просто)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Код
Sub Макрос1()

    Dim rng As Range
    Set rng = [A5:J16]
    MsgBox rng.Find("*", rng(1, 1), , , , xlPrevious).Column

End Sub
 
Уважаемый Kuzmich.

Благодарю Вас за ответ. Предложенное Вами решение к сожалению ищет последние заполненные на листе, а не в границах диапазона.
Все равно Спасибо Вам большое.


Уважаемый Михаил Лебедев.
Благодарю за наводку. обязательно изучу.
 
Уважаемый Sceptic.

Вот это класс так класс. Спасибо Вам.


Уважаемый Sceptic, скажите, а зачем столько запятых?


Я понял почему, это пропуски остальных параметров функции Find
Изменено: IgorBoot - 14.02.2019 13:12:16
 
Цитата
IgorBoot написал:
а зачем столько запятых?
Один из вариантов записи метода с пропуском необязательных аргументов.

Вообще, наверно так более понятно будет:
Код
    MsgBox rng.Find("*", After:=rng.Cells(1, 1), SearchDirection:=xlPrevious).Column
Изменено: Sceptic - 14.02.2019 13:14:47
 
Цитата
Sceptic написал:
Один из вариантов записи метода с пропуском
а есть другой? ;-) Или пропустить или указывать (Arg:=)  .
Изменено: БМВ - 14.02.2019 13:15:45
По вопросам из тем форума, личку не читаю.
 
Цитата
IgorBoot написал: это пропуски остальных параметров функции Find
Не совсем пропуски. Оставление этих параметров в дефолтном состоянии (в том, которое установлено по умолчанию)
Согласие есть продукт при полном непротивлении сторон
 
Цитата
БМВ написал:
Или пропустить или указывать
Ну я это и имел в виду)  
Страницы: 1
Наверх