首页 > 解决方案 > 无法从包含数据的工作表中查找最后一列

问题描述

我试图使用 VBA 找出我的 excel 电子表格中最后使用的列,以便在该列之后立即开始编写一些东西。在下面的图片中,我试图展示我的意思以及我想从哪里开始写作。所需字段已在此处选择,即“F2”。

然而,问题是那里已经可用的数据没有保持一致性。如何使用 VBA 找出最后使用的列?

这是我的尝试:

Sub FindLastColumn()
    Dim lCol&

    lCol = Cells(1, Columns.Count).End(xlToLeft).Column
    MsgBox lCol
End Sub

它产生8的结果与正确的结果不正确5

包含数据的工作表如下所示:

在此处输入图像描述

标签: excelvba

解决方案


您似乎想在第 2 行到数据末尾找到最常用的列。为此,您需要遍历所有数据行,以跟踪哪一列是Max(LastUsedColumn). 不幸的是,没有这样的内置函数,但你可以写一个这样的东西:

Public Function MaxUsedColumnInRow(ByVal SheetToCheck As Worksheet, ByVal RowToCheck As Long) As Long
  MaxUsedColumnInRow = SheetToCheck.Cells(RowToCheck, Columns.count).End(xlToLeft).Column
End Function

现在您有了一个漂亮的函数来确定哪一列是一行中使用的最大列,您可以在循环中调用它,如下所示:

Public Function MaxUsedColumnInRange(ByVal SheetToCheck As Worksheet, ByVal StartRow As Long, ByVal EndRow As Long) As Long

  Dim curRow As Long
  For curRow = StartRow To EndRow
    Dim CurCol As Long
    CurCol = MaxUsedColumnInRow(SheetToCheck, curRow)
    Dim maxCol As Long
    If CurCol > maxCol Then
      maxCol = CurCol
    End If
  Next

End Function

最后,快速测试一下,将“Sheet1”替换为您要特别检查的工作表的名称:

Public Sub TestIt()
  MsgBox "Max Used column on sheet1 = " & CStr(MaxUsedColumnInRange("Sheet1", 2, 50))
End Sub

当然,您需要确定工作表上的最大使用并将其传递给MaxUsedColumnInRange函数 - 除非您恰好有 50 行数据,否则示例测试Sub可能不会得到您实际想要的结果。

作为附带的好处,您现在有一个方便的函数,您可以在将来调用以确定一行中的最大列,这样您就不必记住正确的方法。(我通常会忘记,所以我必须查找它,或者使用一个漂亮的辅助函数来为我“记住”。)


推荐阅读