excel - 无法从包含数据的工作表中查找最后一列
问题描述
我试图使用 VBA 找出我的 excel 电子表格中最后使用的列,以便在该列之后立即开始编写一些东西。在下面的图片中,我试图展示我的意思以及我想从哪里开始写作。所需字段已在此处选择,即“F2”。
然而,问题是那里已经可用的数据没有保持一致性。如何使用 VBA 找出最后使用的列?
这是我的尝试:
Sub FindLastColumn()
Dim lCol&
lCol = Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lCol
End Sub
它产生8
的结果与正确的结果不正确5
。
包含数据的工作表如下所示:
解决方案
您似乎想在第 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
可能不会得到您实际想要的结果。
作为附带的好处,您现在有一个方便的函数,您可以在将来调用以确定一行中的最大列,这样您就不必记住正确的方法。(我通常会忘记,所以我必须查找它,或者使用一个漂亮的辅助函数来为我“记住”。)
推荐阅读
- xml - 如何将数据映射转换为 XML 文件
- android - 如何实现 Marathon 测试运行器?
- database - 将 Redis 用作唯一数据库和主数据库
- java - Jackson Databind 中已弃用的属性 SerializationFeature.WRITE_NULL_MAP_VALUES 是否有任何替代品?
- swift - 应用程序中的 iOS 13 深色主题设置不会更改警报控制器呼叫电话号码样式
- python - 使用输入从 excel 启动 python 脚本
- java - 无法运行 JFrame
- javascript - 使用 Google Javascript API 在 GCP 实例上执行脚本
- spring - Spring Boot 2.2.1:禁用内部类的日志记录
- linux - xcopy,net use 在 Linux 机器上不起作用