首页 > 解决方案 > 工作表中多个数据范围的第一行和最后一行/第一列和最后一列

问题描述

我是 VBA 新手,正在尝试编写一个简单的代码来识别单个数据块的第一行、最后一行、第一列和最后一列。

我在工作表中有多个数据块,这些数据块是模板形式的,但是是动态的,数据块中的行可能每次(或报告期间)都在不断变化。

第一个数据块的范围是 B2:E10
第二个数据块的范围是 B13:F29
第三个数据块的范围是 B32:H35

我编写了以下代码来测试是否可以选择从特定单元格到第一个数据块的最后一行和最后一列的数据范围,但它选择了整个数据(B2:I35)

Private Sub RangeIdentification()

 Dim Dsheet As Worksheet
 Dim rng1 As Range, rng2 As Range, rng3 As Range
 Dim firstrow1 As Long, firstrow2 As Long, firstrow3 As Long
 Dim lastrow1 As Long, lastrow2 As Long, lastrow3 As Long
 Dim lastcol1 As Long, endcol2 As Long, finalcol3 As Long

 Set Dsheet = Worksheets("Data")

 lastrow1 = Dsheet.Cells(Rows.Count, 2).End(xlUp).Row
 lastcol1 = Dsheet.Cells(2, Columns.Count).End(xlToLeft).Column

 Set rng1 = Dsheet.Cells(2, 2).Resize(lastrow1 - 1, lastcol1)
 rng1.Select

End Sub

我想选择B2:E10然后B13:F29和最后B32:I35

标签: excelvba

解决方案


可以这样试试,B列的所有数据块都会被选中(不包括中间的空格)

Sub test()
Dim Dsheet As Worksheet, Rng As Range, NextRow As Long
Dim TRng As Range
Set Dsheet = ThisWorkbook.Sheets("Data")

Set Rng = Dsheet.Cells(Rows.Count, "B").End(xlUp).CurrentRegion
Set TRng = Rng
    Do
    NextRow = Rng(1, 2).End(xlUp).Row
    If NextRow = 1 Then Exit Do
    Set Rng = Dsheet.Cells(NextRow, "B").CurrentRegion
    Set TRng = Union(TRng, Rng)
    Loop

If Not TRng Is Nothing Then TRng.Select
End Sub

推荐阅读