在编写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
发表评论