你好,我想知道如何运行 VBA 或宏(或任何其他更简单的方法)来移动仅限值将 Excel 中任何当前选择(从一行中的一个单元格到多个单元格以及跨行、跨列的选择)移到右侧一列或左侧一列。
简而言之,我正在为一家建筑公司准备一份预测表。它的工作方式与 Microsoft Project 相同,时间线行显示在多个月度列上。当项目时间线发生变化时,我需要能够选择一行数据、一个或多个单元格,并将选定的数据仅移动一列。如果能从上一个单元格位置删除数据就好了(本质上只是剪切和粘贴数据)
- 我无法使用复制粘贴,因为它会重复数据
- 使用四星光标选择并拖动边界框的边缘,获取公式、连接和格式
参见附图 - 想象一下 2019 年 4 月和 2019 年 5 月的两个 50% 分配需要推迟到 7 月开始。简单来说,我想选择这些单元格并仅移动数据 - 就像使用右箭头键(或左箭头键)仅移动数据一样,就像俄罗斯方块一样。
答案1
这里有一个答案,尽管我认为这会给你带来更多的痛苦而不是快乐。使用ctrl+x和ctrl+进行剪切和粘贴v可能会省去很多麻烦。
在您的工作簿中创建两个模块。添加以下代码。运行 module1 以激活密钥交换,运行 module2 以将其关闭。打开时,您的左右箭头键将向右或向左移动数据并破坏旧单元格中的数据。公式将被删除。 谨慎使用。
我建议制作按钮来激活这两个模块。
模块1
Sub shifter()
Application.OnKey "{LEFT}", "LShift"
Application.OnKey "{RIGHT}", "RShift"
End Sub
Function LShift()
Selection.Offset(0, -1).Value2 = Selection.Value2
Selection.Value2 = ""
Selection.Offset(0, -1).Select
End Function
Function RShift()
Selection.Offset(0, 1).Value2 = Selection.Value2
Selection.Value2 = ""
Selection.Offset(0, 1).Select
End Function
模块2
Sub Endshifter()
Application.OnKey "{LEFT}"
Application.OnKey "{RIGHT}"
End Sub
答案2
答案3
如果我理解正确,您可以使用该Paste As Formula
功能代替常规粘贴。剪切和粘贴后,点击Ctrl、F、Enter。您还可以指定自定义快捷方式,但上述方法应该可以立即使用。
答案4
如果我没理解错的话,你一开始就不应该使用Cut
and 。相反,你应该通过+ ,使用and 。这会将单元格移动到当前光标位置(上方和/或左侧)并根据你的选择移动单元格;你也可以对行/列执行此操作。这还会保留受更改影响的所有其他单元格的正确计算值(假设它们具有相对引用或绝对引用);如果你不想要自动效果,请使用。Paste
Cut
Insert Copied Cells
CtrlXContext Menu</kbd, EIndirect()