Excel 如何找到包含数据的最后一列?
我发现了一种查找工作表中最后一行数据的方法:Excel 如何找到包含数据的最后一列?,excel,vba,Excel,Vba,我发现了一种查找工作表中最后一行数据的方法: ws.Range("A65536").End(xlUp).row 有没有类似的方法来查找工作表中最后一个包含列的数据?有很多方法。最可靠的是找到 Dim rLastCell As Range Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByColumns,
ws.Range("A65536").End(xlUp).row
有没有类似的方法来查找工作表中最后一个包含列的数据?有很多方法。最可靠的是找到
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
使用使用范围(可靠性较低):
如果A列中没有数据,则使用已用范围无效。有关已用范围的另一个问题,请参见此处:
请参阅关于重置使用范围的内容。激活工作表后,尝试使用代码:
Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
如果仅使用
Cells.SpecialCells(xlCellTypeLastCell).Row
,则问题在于除非执行“保存文件”操作,否则不会更新xlCellTypeLastCell
信息。但是useUsedRange
将始终实时更新信息。我认为我们可以修改上面答案中的UsedRange
代码,以获得最后使用的列,即使起始列是否为空
所以这个lColumn=ws.UsedRange.Columns.Count
修改为
此lColumn=ws.UsedRange.Column+ws.UsedRange.Columns.Count-1
将始终提供可靠的结果
上面这一行在即时窗口中生成
9
。我知道这是一个老问题,但我已经用很多方法测试了它,它还没有让我失望,除非有人告诉我其他情况
行号
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
这里有一些可能有用的东西。基于包含数据的行选择整个列,在本例中,我使用的是第5行:
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
这可能不适用于Excel 2007+工作簿,它可能有超过一百万行。你可能想改用。啊,谢谢你。我不知道。@ikh,最好使用
ws.Cells(Rows.Count,“A”).End(xlUp)。row
可能与+1 readfidy:重复)一个建议。。。始终将应用程序.CountA
与一起使用。查找以避免错误。看到这里,谢谢@Sidd,你会在我在上面的评论中提供给Ozgrid的链接中找到这个建议和其他信息。对:)我应该访问这个链接:)@Sidd,这仍然是一个很好的观点,值得一提。我只是不想把完整的答案贴在所有的错误处理等上,我认为是在为他们工作,而在我的解释中,这超出了这个论坛的范围。1顺便说一句:)除了简短之外,你的答案与公认的答案有什么不同?另外,请避免使用Select
语句。那真是糟糕的做法。你看,它很短很简单,这就是附加值。感谢您提供有关Select语句的提示。我去看看。Cheers如果对列使用此方法,则会给出错误的列。
ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Dim lColumn As Long
lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)