如何在过滤列上查找第一个未使用的单元格

时间:2019-03-11 23:28:16

标签: excel vba

我对范围进行了过滤,可以管理主题,但是找不到过滤范围之外的第一个未使用的单元格。

看一下我的初始类的代码:

Public Sub init(rowList As Range, Optional hasHeader As Boolean = True)
    Dim rw As Range
    Dim i As Integer
    Dim k As Integer

    Set aa.rowsList = rowList

    For i = 1 To aa.rowsList.Areas.count
        k = k + aa.rowsList.Areas(i).rows.count
    Next

    If k < aa.blockSize Then
        k = k + aa.blockSize
    Else
        k = k + aa.blockSize * 2
    End If

    ReDim aa.rowDataArray(0 To k) As Range

    i = 0
    For Each rw In aa.rowsList
        If i = 0 And hasHeader And aa.rowHeader Is Nothing Then
            Set aa.rowHeader = rw
        Else
            Set aa.rowDataArray(i) = rw
            i = i + 1
        End If
    Next

    k = aa.rowsList.rows(65536).End(xlUp).Row + 1
    Set aa.rowDataArray(i) = aa.rowsList.rows(k).EntireRow

    Set rw = Nothing

    aa.count = i
    aa.rowCursor = -1

End Sub

行列表为:myWorkSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).rows

所以我的过滤器仅返回指令aa.rowsList.rows(65536).End(xlUp).Row '--> 1的1行(标头)

但是我需要确定未使用的第一行,可能是2544(工作表中有很多行)。

有没有比循环遍历一列所有单元格更有效的想法了?

P.S。 如果我删除了过滤器,那么它可以工作,但是由于过滤器应用于类之外,因此不正确。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

Public Function FindLastUnusedCell(rowList As Range)
    'Count the total rows   (Office 2003 has 65500, Office and up has 1048576)
    totalrows = Rows.Count
    FindLastUnusedCell = Cells(totalrows, rowList.Column).End(xlUp).Offset(1, 0).Row
End Function

我希望这会有所帮助! 干杯!