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
信息。但是use
UsedRange
将始终实时更新信息。

我认为我们可以修改上面答案中的
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)