如何向上移动一个可见行?

How to move up one visible row?

我正在尝试在上面插入一行,然后向上插入到过滤后的电子表格中的下一个可见行。因为我想将操作应用于可见行(可以随机间隔),所以这行代码是不够的:

ActiveCell.Offset(-8, 0)

据我了解,这告诉 Excel 向上移动八行(因为我用来记录宏的单元格集恰好间隔八个单元格),而不是当前下的下一个可见行筛选条件。

显示可见数据行随机间隔的电子表格摘录

在这种情况下相隔 6 行,但它可以是任何数字。

宏代码:

ActiveCell.Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(-8, 0).Rows("1:1").EntireRow.Select

我希望将最后一行代码“上升八行”替换为“在给定当前数据过滤器的情况下上升到下一个可见行”。

过滤器显示列 R = 0 的行,但我更喜欢一种方法,我不将该指令合并到 VBA 代码中,只查看可见数据而不是整个电子表格.

您应该检查或行被隐藏:

If Rows(15).Hidden then 'we are checking is Row 15 Hidden
    'row is Hidden
Else
    'row is Visible
End If

据我了解,您想在当前行上方插入一行,然后按 Ctrl-up 以便它跳到非空白的最后一行?试试这个:

r = Selection.Row: c = Selection.Column
Rows(LTrim(Str(r)) + ":" + LTrim(Str(r))).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
destrow = Range("A" & r).End(xlUp).Row
Cells(destrow, c).Select

请原谅我的编码风格孩子们,我是在 GW-BASIC 长大的,我对 21 世纪唯一的风格让步是我没有全部大写。

根据 Timothy 的建议,这是我根据 bankeris 的工作得出的代码:

    'row is Hidden
    ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
    'move up one cell
Else
    'row is Visible
    ActiveCell.Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select
    'insert row above then move up one.
End If

虽然我发现上面 Michael Angelico 的 post 是满足我的特定要求的更快的解决方案,但这是一个更通用的选项。