Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 13384|回复: 12

[已解决]excel中选定任意2个单元格内容互换?

[复制链接]
发表于 2014-6-10 10:13 | 显示全部楼层 |阅读模式
本帖最后由 eikok 于 2014-6-10 13:39 编辑

excel中选定任意2个单元格内容互换?
最佳答案
2014-6-10 10:27
试试!{:34:}
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Target.Count = 2 Then
  3.         TEMP = Target.Areas(1)
  4.         Target.Areas(1) = Target.Areas(2).Value
  5.         Target.Areas(2) = TEMP
  6.     End If
  7. End Sub
复制代码

excel中选定任意2个单元格内容互换?.rar

3.24 KB, 下载次数: 80

发表于 2014-6-10 10:27 | 显示全部楼层    本楼为最佳答案   
试试!{:34:}
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Target.Count = 2 Then
  3.         TEMP = Target.Areas(1)
  4.         Target.Areas(1) = Target.Areas(2).Value
  5.         Target.Areas(2) = TEMP
  6.     End If
  7. End Sub
复制代码

excel中选定任意2个单元格内容互换?.zip

7.89 KB, 下载次数: 70

回复

使用道具 举报

发表于 2014-6-10 10:40 | 显示全部楼层
这样怎么样?
excel中选定任意2个单元格内容互换?.rar (7.29 KB, 下载次数: 177)
回复

使用道具 举报

 楼主| 发表于 2014-6-10 13:36 | 显示全部楼层
810126769 发表于 2014-6-10 10:40
这样怎么样?

多谢,太神奇了{:1112:}
回复

使用道具 举报

发表于 2014-6-10 14:24 | 显示全部楼层
给个有趣的代码思路:
每次点选非空单元格之后,把结果暂存在VBA内存中。
再次点选后进行交换。

而点选空白单元格时则清空暂存数据。

因此,标准的操作如下:
0. 点选任意空白单元格 → 清空暂存
1. 点选单元格-1 → 数据-1读入暂存
2. 点选单元格-2 → 暂存中的数据-1写入单元格-2 数据-2读入暂存
3. 再次点选单元格-1 → 暂存中的数据-2写入单元格-1 数据-1读入暂存
4. 点选任意空单元格 → 清空暂存。(这一步可以不做)

虽然麻烦了一点,但好处是不需要同时选中2个相距很远的单元格。
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Static tmp
  3.     If Target.Count > 1 Then Exit Sub
  4.     If Target = "" Then tmp = Empty: Exit Sub
  5.     If tmp = Empty Then tmp = Target Else tmp2 = Target: Target = tmp: tmp = tmp2
  6. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-6-10 14:34 | 显示全部楼层
香川群子 发表于 2014-6-10 14:24
给个有趣的代码思路:
每次点选非空单元格之后,把结果暂存在VBA内存中。
再次点选后进行交换。

有想法
{:1112:}
回复

使用道具 举报

发表于 2014-6-10 14:53 | 显示全部楼层
还是改成这样子吧!

1. 点选单元格-1
→ 当前内容读入暂存t1
→ 单元格-1地址读入add1

2. 点选单元格-2
→根据单元格-1地址把当前内容写入单元格-1
→暂存中单元格-1内容写入当前单元格
→清空暂存结束本次配对置换。

这样大概比较自由了。
重点:
1. 每次先后点击两个独立的有内容的单元格之后,立即进行内容交换并结束过程。
2. 如果点击一个有内容单元格之后,接着点击任意空白单元格,则取消本次过程。
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Static t1, add1
  3.     If Target.Count > 1 Then Exit Sub
  4.     If Target = "" Then t1 = Empty: Exit Sub
  5.     If t1 = Empty Then
  6.         t1 = Target: add1 = Target.Address
  7.     Else
  8.         Range(add1) = Target: Target = t1: t1 = Empty
  9.     End If
  10. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-6-10 15:56 | 显示全部楼层
香川群子 发表于 2014-6-10 14:53
还是改成这样子吧!

1. 点选单元格-1

这个也很好{:1112:}
回复

使用道具 举报

发表于 2014-6-10 16:53 | 显示全部楼层
热心人真多。mark。
回复

使用道具 举报

 楼主| 发表于 2014-6-11 07:54 | 显示全部楼层
savagery1982 发表于 2014-6-10 16:53
热心人真多。mark。

世界需要热心肠{:3512:}
这就是论坛的精髓{:1112:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 21:29 , Processed in 0.368706 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表