excel - 工作表中多个数据范围的第一行和最后一行/第一列和最后一列
问题描述
我是 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
。
解决方案
可以这样试试,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
推荐阅读
- excel - 根据特定单元格的内容将某些数据列转换为行
- javascript - 为什么我的 Google Cast 发件人找不到我的收件人?
- r - 如何使用 R 中的 3x3 窗口对光栅执行焦点操作(均值)?我有纬度/经度值
- php - 来自时间戳列的php mysql错误值
- python - 如何让动画在 PyQt5 Qt3D 中正常工作?
- python - 为什么导致 django RQ 变成:pickle 数据被截断?
- android - 错误:链接文件资源失败:守护进程:AAPT2 aapt2-3.2.0-alpha14-4748712-linux Daemon #0
- vba - 将任务从待办事项列表移动到“查询”任务文件夹
- ubuntu - Sed Md5Sum 命令
- python - import flask 给出 ImportError: No module named jinja2