如何用vba获取excel工作表中数据在任意位置的单元格区域range?

在编写vba的解决方案时,excel工作表的数据所在的单元格区域未必在以A1单元格作为开始,有可能以任意一个单元格所在的位置作为开始,如下图所示:

为了精准地定位到excel工作表中的唯一的数据区域,需要灵活使用Range对象的各种属性。

以下是一个通用的获取excel工作表中唯一的数据区域Range对象的vba代码:

Sub QQ1722187970()
    Excel.Application.ScreenUpdating = False
    Excel.Application.DisplayAlerts = False
    Excel.Application.Calculation = xlCalculationManual
    Dim oWK As Worksheet
    Set oWK = Sheet1
    Dim oRng As Range
    With oWK
        '获取所有已使用的单元格的数据区域
        Set oRng = .UsedRange
        '如果UsedRange不可靠,用定位常量
'        Set oRng = .Cells.SpecialCells(xlCellTypeFormulas).CurrentRegion
        '如果没有常量,用定位公式
'        Set oRng = .Cells.SpecialCells(xlCellTypeConstants).CurrentRegion
        '获取单元格数据区域的第一行的行数
        iRow = oRng.Row
        iColL = .Cells(iRow, 1).End(xlToRight).Column
        iColR = .Cells(iRow, .Cells.Columns.Count).End(xlToLeft).Column
        '获取单元格数据区域的总列数
        iCols = oRng.Columns.Count
        '获取单元格数据区域的总行数
        iRows = oRng.Rows.Count
        '获取单元格数据区域的第一列的列数
        If iColL = iColR And Not (Excel.Application.Intersect(.Range("a1").EntireColumn, oRng) Is Nothing) Then
            iCol = 1
        Else
            iCol = iColL
        End If
        '获取单元格数据区域的第一列的最后一行的行号
        iRowEnd = .Cells(.Cells.Rows.Count, iCol).End(xlUp).Row
    End With
    Excel.Application.ScreenUpdating = True
    Excel.Application.DisplayAlerts = True
    Excel.Application.Calculation = xlCalculationAutomatic
End Sub
       

发表评论