Найдите первую видимую ячейку ниже и получите ссылку

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

If First.AutoFilter.Range.Columns(1).SpecialCells(xlVisible).Count - 1 > 0 Then
Range("A1").Select
Do
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.EntireRow.Hidden = True

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


person Seya    schedule 15.04.2014    source источник


Ответы (4)


Вы можете попробовать это (первые три строки используются в качестве примера кода)

Обновлено по комментарию пользователя

Dim rng1 As Range
Dim rng2 As Range
Set rng1 = [a1:a10]
rng1.AutoFilter Field:=1, Criteria1:="4"
If rng1.SpecialCells(xlVisible).Count > 1 Then
    Set rng2 = rng1.Offset(1, 0).Resize(rng1.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible).Cells(1, 1)
    MsgBox rng2.Address
End If
person brettdj    schedule 15.04.2014
comment
спасибо, но мне это не помогает. Мне нужен способ работы с этой ячейкой в ​​дальнейшем коде, а .Address не предоставляет такой возможности - person Seya; 15.04.2014
comment
Вы можете настроить код @brettdj так, чтобы он возвращал желаемое: попробуйте закончить эту строку с помощью .Row, .Column или .Value. - person Dan Wagner; 15.04.2014

Вы можете просто использовать ActiveCell.Row и ActiveCell.Column.

person rory.ap    schedule 15.04.2014
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его публикацией. - person Brandon Wamboldt; 15.04.2014
comment
@BrandonWamboldt -- Но на следующем шаге мне нужно работать с этой ячейкой, поэтому мне нужны ее номер строки и столбца. Как мне его получить? (без использования lastrow и lastcolumn) Итак, мой ответ. Пожалуйста, объясните, почему это не дает ответа. - person rory.ap; 15.04.2014

Это также будет проходить через столбец A:

Option Explicit
Sub LoopThroughVisibleColA()

Dim MySheet As Worksheet
Dim FilterRange As Range, ColumnARange As Range, _
    Cell As Range
Dim LastRow As Long, LastCol As Long

'set worksheet for easy reference
Set MySheet = ThisWorkbook.Worksheets("Sheet1")

'identify the ranges for our filter and loop action
LastRow = MySheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = MySheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set FilterRange = Range(MySheet.Cells(1, 1), MySheet.Cells(LastRow, LastCol))
Set ColumnARange = Range(MySheet.Cells(1, 1), MySheet.Cells(LastRow, 1))

'apply filter: in this example, filter column A for values >4
FilterRange.AutoFilter Field:=1, Criteria1:=">4"

'loop through the visible cells in our column A range
For Each Cell In ColumnARange.SpecialCells(xlCellTypeVisible)
    If Cell.Row <> 1 Then 'skip the header row
        MsgBox ("We're in row " & Cell.Row & " and column " & Cell.Column)
    End If
Next Cell

End Sub
person Dan Wagner    schedule 15.04.2014

Вы можете использовать Application.Sendkeys "{DOWN}", True, а затем прочитать Selection.Address

person blackworx    schedule 09.11.2016