首页 文章

Excel VBA-查找包含数据的最后一列

提问于
浏览
37

我找到了这种方法来查找工作表中包含行的最后一个数据:

ws.Range("A65536").End(xlUp).row

是否有类似的方法来查找工作表中包含列的最后一个数据?

谢谢 .

5 回答

  • 73

    有很多方法可以做到这一点 . 找到最可靠的 .

    Dim rLastCell As Range
    
    Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
    
    MsgBox ("The last used column is: " & rLastCell.Column)
    

    如果要查找特定行中使用的最后一列,可以使用:

    Dim lColumn As Long
    
    lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column
    

    使用范围(不太可靠):

    Dim lColumn As Long
    
    lColumn = ws.UsedRange.Columns.Count
    

    如果列A中没有数据,则使用已使用的范围将无法工作 . 请参阅此处了解使用范围的另一个问题:

    有关重置使用范围的信息,请参阅Here .

  • 1

    我知道这已经过时了,但我已经在很多方面对它进行了测试,并且它还没让我失望,除非有人能告诉我 .

    行号

    Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    

    专栏信

    ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)
    

    列号

    ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    
  • 11

    激活工作表后尝试使用代码:

    Dim J as integer
    J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    

    如果仅使用 Cells.SpecialCells(xlCellTypeLastCell).Row ,则问题是除非执行"Save file"操作,否则不会更新 xlCellTypeLastCell 信息 . 但是使用 UsedRange 将始终实时更新信息 .

  • 1

    我想我们可以修改@Readify's上面的 UsedRange 代码来获取最后一个使用的列,即使起始列是空白也是空白 .

    所以 lColumn = ws.UsedRange.Columns.Count 修改为

    lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1 总会给出可靠的结果

    enter image description here

    ?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1
    

    以上行在即时窗口中产生 9 .

  • 2

    这是可能有用的东西 . 根据包含数据的行选择整个列,在本例中我使用的是第5行:

    Dim lColumn As Long
    
    lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
    MsgBox ("The last used column is: " & lColumn)
    

相关问题