Finding the number of non-blank columns in an Excel sheet using VBA

前端 未结 5 1431
一向
一向 2020-12-05 00:24

How do I find the number of used columns in an Excel sheet using VBA?

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


        
相关标签:
5条回答
  • 2020-12-05 01:07

    Jean-François Corbett's answer is perfect. To be exhaustive I would just like to add that with some restrictons you could also use UsedRange.Columns.Count or UsedRange.Rows.Count.
    The problem is that UsedRange is not always updated when deleting rows/columns (at least until you reopen the workbook).

    0 讨论(0)
  • 2020-12-05 01:12

    Your example code gets the row number of the last non-blank cell in the current column, and can be rewritten as follows:

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

    It is then easy to see that the equivalent code to get the column number of the last non-blank cell in the current row is:

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

    This may also be of use to you:

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

    but be aware that if column A and/or row 1 are blank, then this will not yield the same result as the other examples above. For more, read up on the UsedRange property.

    0 讨论(0)
  • 2020-12-05 01:16

    Result is shown in the following code as column number (8,9 etc.):

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

    Result is shown in the following code as letter (H,I etc.):

    Dim lastColumn As Long
    lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
    MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)
    
    0 讨论(0)
  • 2020-12-05 01:19

    This is the answer:

    numCols = objSheet.UsedRange.Columns.count
    

    Documentation of the UsedRange property

    0 讨论(0)
  • 2020-12-05 01:26

    It's possible you forgot a sheet1 each time somewhere before the columns.count, or it will count the activesheet columns and not the sheet1's.

    Also, shouldn't it be xltoleft instead of xltoright? (Ok it is very late here, but I think I know my right from left) I checked it, you must write xltoleft.

    lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column
    
    0 讨论(0)
提交回复
热议问题