我正在使用 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 宏交换单个单元格或全等矩形范围
如何使用
- 打开 Excel » 按Alt+ F11» 复制并粘贴代码到新的模块
- 返回 Excel 并选择要交换的两个范围。
它们的大小和单元格数量必须匹配,如上例所示 - 按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