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

使用VBA将选定行移动到excel表格的顶部或底部(不包括一列),vba,excel,Vba,Excel,我想要两个VBA代码,第一个将列(A、C、D、E和F)中选定的单元格行移动到excel表格的顶部,另一个将行单元格移动到excel表格的底部 例如,如果我选择C3中的单元格并运行宏,则行中的单元格(A3、C3、D3、E3和F3)将移动到表的底部 我有以下代码将整行移动到底部: Public Sub MoveToBottom() If Selection.Row <> 1 Then 'move the whole row Selection.

我想要两个VBA代码,第一个将列(A、C、D、E和F)中选定的单元格行移动到excel表格的顶部,另一个将行单元格移动到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
Public submovetobottom()
如果选择。第1行,则
“移动整排
Selection.EntireRow.Cut
范围(“B1”)。结束(xlDown)。偏移量(1,0)。EntireRow.Insert
如果结束
端接头
我的数据看起来像


提前感谢

这很快就完成了,但应该能帮到你

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

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

选项显式
子移动totop()
暗电流与长电流相同
rowCurrent=Selection.row
如果工作表function.CountA(行(行当前))>=5_
然后是当前行1和当前行2
范围(“A2,C2:F2”)。插入移位:=xlDown
范围(“A”和行当前)。复制目标:=范围(“A2”)
范围(“C”&rowCurrent&“:F”&rowCurrent)。复制目标:=范围(“C2:F2”)
范围(“A”&rowCurrent&“,”和“C”&rowCurrent&“:F”&rowCurrent)。删除
如果结束
端接头
子移动到底部()
暗电流与长电流相同
rowCurrent=Selection.row
它能持续多久
rowLast=范围(“A”&rows.count).End(xlUp).row
如果工作表function.CountA(行(行当前))>=5_
然后是当前行1和当前行最后一行
范围(“A”&rowCurrent)。复制目标:=范围(“A”&rowLast+1)
范围(“C”&rowCurrent&“:F”&rowCurrent)。复制目标:=范围(“C”&rowLast+1&“:F”&rowLast+1)
范围(“A”&rowCurrent&“,”和“C”&rowCurrent&“:F”&rowCurrent)。删除
如果结束
端接头

不清楚您是否希望它同时移动到顶部和底部,或者您是否有一些未提及的标准来决定它是成为顶部还是底部row@Marcucciboy2我想要两个代码一个将所选行移动到顶部,另一个执行相反的操作将所选行移动到底部。此外,我发布的是一个将行移到底部的示例。@Marcucciboy2 thanx对于反馈,我刚刚编辑了一个问题,使其更加清晰。。其想法是排除B列中的单元格(B列是优先级,不应移动)。您的代码将移动整行。你知道如何排除B列吗?我只是意识到,如果表被格式化为table,它就不起作用了。问题出在最后一行的Delete one中,因为您无法删除表中的行。你知道怎么解决吗?
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