excel - 使用动态范围进行条件数据提取
问题描述
我必须根据单元格名称与工作表名称匹配从多列复制数据范围。但是,在某些匹配的工作表名称的情况下,我们有 30 个数据,在某些情况下,我们可能有 20 个数据或任何其他值,“A”列中每个 ID 的数据范围是不同的。我当前的代码使我能够从“组合”工作表中提取数据到具有匹配工作表名称的模板工作表。我如何使代码动态并根据 A 列中更改的工作表名称提取数据,而不是使用匹配范围的偏移量提取 30 个数据(每个钻孔名称之后有一些空白单元格,直到“A”列中的下一个名称需要考虑用于开发 VBA 代码)并从 M 和 S 列复制与该名称相对应的数据,并根据匹配的工作表名称粘贴到 E 和 G 列的模板工作表中。
Sub SPT()
Dim wkSht As Worksheet
Dim cell As Range
For Each cell In Sheets("Combine").Range("A5:A116").Cells
For Each wkSht In ThisWorkbook.Worksheets
If cell.Value = wkSht.Name Then
Sheets("Combine").Range(cell.Offset(0, 12), cell.Offset(29, 12)).Copy wkSht.Range("G22")
End If
Next wkSht
Next cell
End Sub
解决方案
复制粘贴过程会根据单元格值偏移Col H
,请测试运行,谢谢:
Sub SPT()
Dim wkSht As Worksheet
Dim cell As Range
Dim lastrow As Long, blankRow As Long, offsetRow As Long
lastrow = Sheets("Combine").UsedRange.Rows.Count
For Each cell In Sheets("Combine").Range("A2", "A" & lastrow).Cells
For Each wkSht In ThisWorkbook.Worksheets
If cell.Value = wkSht.Name Then
If cell.End(xlDown).Row > lastrow Then
blankRow = lastrow
Else
blankRow = cell.End(xlDown).Row - 1
End If
offsetRow = Application.WorksheetFunction.RoundDown(Sheet1.Cells(blankRow, 8).Value, 0)
Sheets("Combine").Range(cell.Offset(0, 12), cell.Offset(offsetRow, 12)).Copy wkSht.Range("G22")
Sheets("Combine").Range(cell.Offset(0, 18), cell.Offset(offsetRow, 18)).Copy wkSht.Range("E22")
End If
Next wkSht
Next cell
End Sub
假设您最后一张表名称Col A
是第 14 行,下面是空白数据
当您使用键盘快捷键ctrl + down arrow key
时,它会跳转到第 1 百万行,因为我知道会发生这种情况但我不想获取row 1mil
,因此我将设置blankRow = lastrow(i.e. 20)
推荐阅读
- python - 查询python列表中的所有字典
- python - Discord.py - 在 Discord 中使用命令时没有任何反应
- amazon-web-services - 如何观察和控制 sagemaker 多模型服务器如何在内存中加载模型
- excel - 应用过滤器后数据透视图更改图表类型
- postgresql - 在 Windows 上复制的 Postgresql 权限被拒绝
- python-3.x - 如何使用 selenium 向下滚动 instagram 中的弹出关注者列表?(Python)
- email - 向 example.com 发送电子邮件是否会导致电子邮件发送服务被列入黑名单或其他问题?
- swift - 如何在 SwiftUI 中将文本推送到边缘
- r - 是否可以删除堆叠条边界线?
- python - detect.tflite v1 对同一对象失去信心( Python )