在 Microsoft Excel 工作表中交换两行或两列

在 Microsoft Excel 工作表中交换两行或两列

我正在使用 Excel 2010。假设您的电子表格中有这些数据:

line:   content:
1       data 1
2       data 2
3       data 3
4       data 4
5       data 5

你犯了一个错误,现在需要切换列中的值content(但不是在第 2 行和第 4 行之间添加一个line新列。现在它看起来应该像这样:

line:   content:
1       data 1
2       data 4
3       data 3
4       data 2
5       data 5

如何切换某一列而不改变其他列中的数据?

再举一个例子,如果我输入

                               

然后意识到我混淆了小的、酸的柑橘类水果,我想选择第 2 行和第 4 行(即,我想选择全部的行),

                               

然后自动切换有一些但不是全部这两行中的单元格。

                               

我们假设列子集是恒定的;例如(如上所示),我总是希望保留 A 列和 B 列,并交换 C、D 和 E 列。

不管是什么表,不管里面有什么数据,不管数据有无关联,我都需要选中两行(或两列),然后互相交换。

  • 第 1 行:abcdefg
  • 第 2 行:hijklmn

切换后:

  • 第 1 行:hijklmn
  • 第2行:abcdefg

答案1

交换单元格的懒惰方法

使用 VBA 宏交换单个单元格或全等矩形范围

在此处输入图片描述

如何使用

  1. 打开 Excel » 按Alt+ F11» 复制并粘贴代码到新的模块
  2. 返回 Excel 并选择要交换的两个范围。
    它们的大小和单元格数量必须匹配,如上例所示
  3. Alt+F8并执行swap宏。

Sub swap()

    If Selection.Areas.Count <> 2 Then Exit Sub

    Set range1 = Selection.Areas(1)
    Set range2 = Selection.Areas(2)

    If range1.Rows.Count <> range2.Rows.Count Or _
        range1.Columns.Count <> range2.Columns.Count Then Exit Sub

    range1Address = range1.Address
    range1.Cut
    range2.Insert shift:=xlShiftToRight
    Range(range1Address).Delete shift:=xlToLeft
    
    range2Address = range2.Address
    range2.Cut
    Range(range1Address).Insert shift:=xlShiftToRight
    Range(range2Address).Delete shift:=xlToLeft
    
End Sub

提示:分配快捷方式 + 将代码放入 Excel 插件中,更加方便。在插件中,新swap功能可在所有 Excel 工作表中使用,无需每次都复制代码。

答案2

我发现 nixda 的答案非常有助于作为起点,但无论出于什么原因,它在我的计算机上都不起作用。在今天之前没有任何 VBA 经验的情况下,我能够想出这个,它肯定有效,并且还有一个优点,即对于没有 VBA 经验的人来说更容易理解:

Sub swap()

    If Selection.Areas.Count <> 2 Then Exit Sub

    Dim temp As Variant

    Set range1 = Selection.Areas(1)
    Set range2 = Selection.Areas(2)

        If range1.Rows.Count <> range2.Rows.Count Or _
        range1.Columns.Count <> range2.Columns.Count Then Exit Sub

    temp = range1.Value
    range1.Value = range2.Value
    range2.Value = temp

End Sub

相关内容