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

如何使用VBA查找Excel工作表中使用的列的数量?

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

使用上面的VBA,我可以find行数。 但是,如何find我给定的excel文件中的列数?

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

 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属性。

让 – 弗朗索瓦·科贝特的答案是完美的。 为了穷举,我只想添加一些限制,你也可以使用UsedRange.Columns.CountUsedRange.Rows.Count
问题是在删除行/列时(至less在您重新打开工作簿之前),UsedRange并不总是被更新。

这是答案:

 numCols = objSheet.UsedRange.Columns.count 

UsedRange属性的文档

你可能会在activesheet之前的某个地方忘记sheet1 ,或者它会计数activesheet列而不是sheet1的列。

另外,不应该是xltoleft而不是xltoright? (好吧,这里很晚,但我想我知道我的权利从左)我检查了,你必须写xltoleft。

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

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

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

结果在下面的代码中显示为字母 (H,I等):

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