在编写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


发表评论