使用VBA查找Excel工作表中的非空白列数

时间:2011-08-01 10:48:06

标签: excel vba excel-vba

如何使用VBA在Excel工作表中找到已使用的列数?

Dim lastRow As Long
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
MsgBox lastRow

使用上面的VBA,我能够找到行数。但是如何在给定的excel文件中找到列数?

5 个答案:

答案 0 :(得分:38)

您的示例代码获取当前列中最后一个非空单元格的行号,可以按如下方式重写:

Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow

然后很容易看出,获取当前行中最后一个非空单元格的列号的等效代码是:

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

这也可能对您有用:

With Sheet1.UsedRange
    MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"
End With

但请注意,如果列A和/或第1行为空,则不会产生与上述其他示例相同的结果。有关更多信息,请阅读UsedRange属性。

答案 1 :(得分:8)

Jean-FrançoisCorbett的回答非常完美。为了详尽无遗,我只想添加一些限制,您也可以使用UsedRange.Columns.CountUsedRange.Rows.Count
问题是删除行/列时并不总是更新UsedRange(至少在重新打开工作簿之前)。

答案 2 :(得分:2)

您可能在sheet1之前的某个地方忘记columns.count,或者它会计算activesheet列,而不是sheet1

另外,不应该是xltoleft而不是xltoright吗? (好吧,现在已经很晚了,但我想我从左边知道我的权利)我检查了一下,你必须写xltoleft。

lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column

答案 3 :(得分:2)

这就是答案:

numCols = objSheet.UsedRange.Columns.count

Documentation of the UsedRange property

答案 4 :(得分:0)

结果在以下代码中显示为列号(8,9等):

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

结果在以下代码中显示为 letter (H,I等):

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)