Страницы: 1
RSS
Определение адреса последней ячейки с помощью vba
 
нашел код, но почему-то он отображает у меня $A$2
хотя таблица заполнена так:

№                Описание                  Комментарий
1                  один                          первый комментарий
2                  два                            второй комментарий
3                  три                            третий комментарий
4                  четыре                      четвертый комментарий
5                  пять                           пятый комментарий

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

Код
Dim rF As Range
    Dim lLastRow As Long, lLastCol As Long
    'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение
    Set rF = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, xlPrevious)
    If Not rF Is Nothing Then
        lLastRow = rF.Row    'последняя заполненная строка
        lLastCol = rF.Column 'последний заполненный столбец
        MsgBox rF.Address 'показываем сообщение с адресом последней ячейки
    Else
        'если ничего не нашлось - значит лист пустой
        'и можно назначить в качестве последних первую строку и столбец
        lLastRow = 1
        lLastCol = 1
    End If
 
Попробуйте немного изменить код:
Код
lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
        lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1

тогда проверку с IF можно убрать.
 
Только при этом следует понимать, что если в ячейке пустое значение, но она содержит формулу, границы, заливку и т. п., то эта ячейка входит в UsedRange.
Поэтому, лучше так:
Код
Sub qq()
    Dim x As Long, y As Long
'Последняя заполненная строка
    x = Cells.Find("*", [A1], xlValues, , xlByRows, xlPrevious).Row
'Последний заполненный столбец
    y = Cells.Find("*", [A1], xlValues, , xlByColumns, xlPrevious).Column
End Sub
Изменено: SAS888 - 30.05.2017 10:15:23
Чем шире угол зрения, тем он тупее.
 
SAS888, не знаю как ТС, а я о таком способе не знал, спасибо.
 
SAS888, спасибо за интересное решение. Не знал от таком способе. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
SAS888,Здравствуйте, у меня код, вообще ни как не реагирует, щелкал разные столбцы, в диапазоне между словом работы и Услуги, и выше и ниже
В представленном коде снизу есть закомментированный код, он работает, но в диапазоне от A7 до A500, а мне нужно чтобы было только между двумя строками ОТ (не включая) с словом РАБОТЫ и ДО (не включая) с словом УСЛУГИ , ниже я скинул скрин, как у меня составлен бланк, причем макрос должен активироваться только в первом столбце, между упомянутыми выше строками.
Это код:
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Cancel = True
''Application.ScreenUpdating = False
 Dim U As Range
    On Error Resume Next
    Set U = ActiveSheet.UsedRange.Find(What:="Работы", LookAt:=xlWhole)
    On Error GoTo 0
    If Not U Is Nothing Then
        Dim t As Range
        On Error Resume Next
            Set t = ActiveSheet.UsedRange.Find(What:="Услуги", LookAt:=xlWhole)
            Set t = t.MergeArea
        On Error GoTo 0
        If Not t Is Nothing Then
            If Not Intersect(Target, Range(t, U)) Is Nothing Then
                Debug.Print "YOUR CODE"
            End If
        End If
    End If
'Dim U As Range
'Set U = Sheets("Áëàíê çàêàçà").Range("A7:A500")
'If Not Intersect(Target, U) Is Nothing Then
'Level1.Show
'End If
''Application.ScreenUpdating = True
End Sub


Из скрина видно, что до строки Работы, будет заполнятся категория товары и разная категория, которая вручную набивается, а после услуги тоже будет забиваться с помощью простого выпадающего списка. ВЫШЕ строки РАБОТЫ и НИЖЕ строки УСЛУГИ, я все сделал, а вот теперь нужно сделать между строками С РАБОТЫ и УСЛУГИ.
 
SAS888,все понял, свой код то не вставил, а как еще указать, чтобы код данный срабатывал ТОЛЬКО В ПЕРВОМ СТОЛБЦЕ, но ТАКЖЕ МЕЖДУ СТРОКАМИ. Сейчас код свой вставил, все работает, но только во всех столбцах, а мне нужно только в первом
 
Дмитрий С,вопрос закрыт
Страницы: 1
Наверх