Vba 找到活动单元格值后,如何选择上面的5行和下面的20行

Vba 找到活动单元格值后,如何选择上面的5行和下面的20行,vba,Vba,我已经在其他问题上得到了帮助,但这是一个新问题,当一个单元格的数据值为4时,我需要在该单元格上方选择5行,在该单元格下方选择20行,然后将该数据剪切/复制到另一个工作表中。我已对所有其他内容进行了排序,只在数据点上方和下方进行了此剪切。复制行 子行() Const cSource As Variant=“Sheet1”源工作表名称/索引 Const cTarget As Variant=“Sheet2”目标工作表名称/索引 常量扩展为String=“A7”'源单元格范围地址 常量cCrit,长度

我已经在其他问题上得到了帮助,但这是一个新问题,当一个单元格的数据值为4时,我需要在该单元格上方选择5行,在该单元格下方选择20行,然后将该数据剪切/复制到另一个工作表中。我已对所有其他内容进行了排序,只在数据点上方和下方进行了此剪切。

复制行
子行()
Const cSource As Variant=“Sheet1”源工作表名称/索引
Const cTarget As Variant=“Sheet2”目标工作表名称/索引
常量扩展为String=“A7”'源单元格范围地址
常量cCrit,长度=4'标准
Const cRowsA长度=5'以上的源行
Const cRowsB长=20'源行
将ws设置为工作表的目标工作表
变暗FER为“长”目标第一个空行
'在源单元格范围内
使用此工作簿。工作表(cSource)。范围(cRange)
'创建对目标工作表的引用。
设置ws=.Parent.Parent.Worksheets(cTarget)
'使用列1(A)计算目标第一个空行。
FER=ws.Cells(ws.Rows.Count,1).End(xlUp).Row+1
'检查源单元格范围中的值是否符合(等于)条件。
如果.Value=cCrit,则
'计算上述目标范围。
'计算上述震源范围。
'将上面的源范围值复制到上面的目标范围。
ws.Rows(FER).Resize(cRowsA).Value_
=.Worksheet.Rows(.Row-cRowsA).Resize(cRowsA).Value
'通过在上面添加源行来计算新的目标第一个空行。
费尔=费尔+克罗萨
'计算以下目标范围。
'计算下面的源范围。
'将下面的源范围的值复制到下面的目标范围。
ws.Rows(FER).Resize(cRowsB).Value_
=.Worksheet.Rows(.Row+1).调整大小(cRowsB).Value
如果结束
以
端接头
表1

第2张

复制和删除行 小型演示:

Option Explicit
Const NEGOFFSET = 5
Const POSOFFSET = 20
Sub test()
    Dim r As Range

    Set r = Range("a6") 'Assuming A6 is the target cell
    r.Select 'Just to show the selected range this far
    Set r = r.Offset(-NEGOFFSET, 0).Resize(NEGOFFSET + 1, 1)
    r.Select 'Just to show the selected range this far
    Set r = r.Resize(POSOFFSET + NEGOFFSET + r.Row, 1)
    r.Select 'Just to show the selected range
    '*
    '* Here r holds the wanted range. Handle it
    '*
End Sub

也许可以看看。谢谢,但我想出了一个更简单的选择。范围(Selection.EntireRow,Selection.Offset(-5,0).EntireRow)。选择范围(Selection.EntireRow,Selection.Offset(20,0).EntireRow)。选择Selection.Cut
Option Explicit
Const NEGOFFSET = 5
Const POSOFFSET = 20
Sub test()
    Dim r As Range

    Set r = Range("a6") 'Assuming A6 is the target cell
    r.Select 'Just to show the selected range this far
    Set r = r.Offset(-NEGOFFSET, 0).Resize(NEGOFFSET + 1, 1)
    r.Select 'Just to show the selected range this far
    Set r = r.Resize(POSOFFSET + NEGOFFSET + r.Row, 1)
    r.Select 'Just to show the selected range
    '*
    '* Here r holds the wanted range. Handle it
    '*
End Sub