使用VBA将所选行移动到excel表格的顶部或底部(不包括一列)

Posted

技术标签:

【中文标题】使用VBA将所选行移动到excel表格的顶部或底部(不包括一列)【英文标题】:Move the selected row to the top or bottom of the excel table (excluding one column) using VBA 【发布时间】:2018-10-01 11:56:44 【问题描述】:

我想要两个 VBA 代码,第一个将列(A、C、D、E 和 F)中选定的单元格行移动到顶部,另一个将行单元格移动到 Excel 表的底部。

例如,如果我选择 C3 中的单元格并运行宏,则连续的单元格(A3、C3、D3、E3 和 F3)将移动到表格的底部。

我有以下代码将整行移到底部:

Public Sub MoveToBottom()

    If Selection.Row <> 1 Then

        'move the whole row
        Selection.EntireRow.Cut
        Range("B1").End(xlDown).Offset(1, 0).EntireRow.Insert

    End If

End Sub

我的数据看起来像

提前致谢

【问题讨论】:

不清楚你是否希望它同时移动到顶部和底部,或者你是否有一些未提及的标准来决定它是成为顶部还是底部行 @Marcucciboy2 我想要 2 个代码,一个将选定的行移动到顶部,另一个将选定的行移动到底部。此外,我发布的是将行移至底部的示例。 @Marcucciboy2 感谢反馈我只是将问题编辑得更清楚 【参考方案1】:

这非常快速和肮脏,但应该可以为您解决问题。

它首先检查所选行:有值,不是标题,还不是顶部/底部行(取决于函数)。

然后它插入一行(仅用于顶部),将当前行复制到它所属的位置,并删除“旧”行。

Option Explicit

Sub MoveToTop()

    Dim rowCurrent As Long
    rowCurrent = Selection.row

    If WorksheetFunction.CountA(rows(rowCurrent)) >= 5 _
    And rowCurrent <> 1 And rowCurrent <> 2 Then
        Range("A2, C2:F2").Insert Shift:=xlDown

        Range("A" & rowCurrent).copy Destination:=Range("A2")
        Range("C" & rowCurrent & ":F" & rowCurrent).copy Destination:=Range("C2:F2")

        Range("A" & rowCurrent & ", " & "C" & rowCurrent & ":F" & rowCurrent).Delete
    End If

End Sub


Sub MoveToBottom()

    Dim rowCurrent As Long
    rowCurrent = Selection.row

    Dim rowLast As Long
    rowLast = Range("A" & rows.count).End(xlUp).row

    If WorksheetFunction.CountA(rows(rowCurrent)) >= 5 _
    And rowCurrent <> 1 And rowCurrent <> rowLast Then
        Range("A" & rowCurrent).copy Destination:=Range("A" & rowLast + 1)
        Range("C" & rowCurrent & ":F" & rowCurrent).copy Destination:=Range("C" & rowLast + 1 & ":F" & rowLast + 1)

        Range("A" & rowCurrent & ", " & "C" & rowCurrent & ":F" & rowCurrent).Delete
    End If

End Sub

【讨论】:

非常感谢.. 想法是排除 B 列中的单元格(B 列是优先级,它不应该移动)。您的代码移动整行。你有一个想法如何排除 B 列。 我只是意识到如果表格被格式化为表格,它就不起作用。问题是在最后一行删除一个因为你不能删除表中的行。有想法如何解决吗?

以上是关于使用VBA将所选行移动到excel表格的顶部或底部(不包括一列)的主要内容,如果未能解决你的问题,请参考以下文章

将所选项目滚动到 JList 的顶部

表格怎么快速回到第一行

Excel VBA获取选定数据透视表行的项目详细信息

Excel VBA 临时保存值

Python - 每列中所选行的标准偏差

如何读取表格视图中所选行的背景颜色?