使用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表格的顶部或底部(不包括一列)的主要内容,如果未能解决你的问题,请参考以下文章