复制/粘贴后禁用Excel的自动单元格引用更改
我正在处理一个庞大的Excel 2003电子表格。 有很多非常大的公式与很多单元格引用。 这是一个简单的例子。
='Sheet'!AC69+'Sheet'!AC52+'Sheet'!AC53)*$D$3+'Sheet'!AC49
他们中的大多数比这更复杂,但是这给了我正在工作的一个好主意。 这些单元格的引用很less是绝对的($ s)。 我希望能够将这些单元格复制到另一个位置,而不更改单元格引用。 我知道我可以简单地使用f4来使引用是绝对的,但是有很多的数据,我可能需要稍后使用Fill。 有没有办法暂时禁用复制粘贴/填充单元格引用更改,而不使参考是绝对的?
编辑:我只是发现,你可以做到这一点与VBA通过复制单元格内容作为文本,而不是一个公式。 我想不必这样做,因为我想一次复制整个行/列。 有没有一个简单的解决scheme,我错过了?
从http://spreadsheetpage.com/index.php/tip/making_an_exact_copy_of_a_range_of_formulas_take_2 :
- 将Excel放入公式查看模式。 最简单的方法是按Ctrl +`(该字符是“反向撇号”,通常在具有〜(代字号)的同一个键上。
- select要复制的范围。
- 按下Ctrl + C
- 启动Windows记事本
- 按Ctrl + V将复制的数据传送到记事本中
- 在记事本中,按Ctrl + A,然后按Ctrl + C复制文本
- 激活Excel并激活要粘贴公式的左上angular的单元格。 并确保您正在复制的工作表处于公式视图模式下。
- 按下Ctrl + V进行粘贴。
- 按Ctrl +`切换到公式查看模式。
注意:如果粘贴操作返回到Excel无法正常工作,那么您很可能最近使用了Excel的“文本到列”function,并且Excel正在试图通过记住您上次parsing数据的方式来帮助您。 您需要启动“将文本转换为列”向导。 select分隔选项,然后单击下一步。 清除除Tab之外的所有分隔符选项复选标记。
或者,从http://spreadsheetpage.com/index.php/tip/making_an_exact_copy_of_a_range_of_formulas/ :
If you're a VBA programmer, you can simply execute the following code: With Sheets("Sheet1") .Range("A11:D20").Formula = .Range("A1:D10").Formula End With
一个非常简单的解决scheme是select您想要复制的范围,然后查找并replace( Ctrl + h
),将=
更改为公式中未使用的另一个符号(例如#
) – 从而阻止它成为活动公式。
然后,将所选范围复制并粘贴到新位置。
最后,查找和replace将原始范围和新范围中的#
更改为=
,从而将两个范围都恢复为公式。
我来到这个网站寻找一个简单的方法来复制,而不改变单元格引用。 但是现在我认为自己的解决方法比大多数这些方法简单。 我的方法依赖于副本更改引用,但移动不。 这是一个简单的例子。
假设您在A列和B列中有原始数据,并且在C中有一个公式(例如C = A + B),并且您希望列F中具有相同的公式,但是从C复制到F导致F = D + E。
- 将C的内容复制到任何空的临时列中,比如R.相对引用将变为R = P + Q,但即使将其标记为错误,也将忽略此内容。
- 回到C和移动(不复制)到F.公式应该不变,所以F = A + B。
- 现在转到R并将其复制回C.相对参考将恢复为C = A + B
- 删除R中的临时公式
- 鲍勃是你的叔叔。
我已经用一系列单元完成了这个工作,所以我想它可以适用于任何复杂程度的工作。 你只需要一个空的地方停放coiped细胞。 当然,你必须记住你离开他们的地方。
我认为你在编辑中遇到了你提到的解决方法。
我会开始将工作表上的每个公式转换成大致如下的文本:
Dim r As Range For Each r In Worksheets("Sheet1").UsedRange If (Left$(r.Formula, 1) = "=") Then r.Formula = "'ZZZ" & r.Formula End If Next r
'ZZZ
使用'
表示文本值, ZZZ
表示我们可以在将文本转换为公式时查找的值。 显然,如果你的任何一个单元格实际上是以文本ZZZ
开始的,那么把VBAmacros中的ZZZ
值改为别的
当重新安排完成后,我会将文本转换回这样的公式:
For Each r In Worksheets("Sheet1").UsedRange If (Left$(r.Formula, 3) = "ZZZ") Then r.Formula = Mid$(r.Formula, 4) End If Next r
这种方法的一个真正的缺点是,当你重新安排时,你看不到任何公式的结果。 例如,您可能会发现,当您从文本转换回公式时,您会遇到#REF
错误。
分阶段进行这项工作可能是有益的,并且每隔一段时间就把它转换回公式,以确保没有发生灾难
试试这个:左键单击选项卡,制作整个工作表的副本,然后剪切要保持相同的单元格并将其粘贴到原始工作表中。
这个简单的技巧:复制和粘贴。 不要剪切和粘贴。 粘贴后,然后重新select您复制的部分,然后转到编辑,向下滑动到清除和清除内容。
在执行操作时使用查找/replace来禁用公式是很常见的。 例如,复制与转置。 该公式是通过在它前面放置一些占位符(例如“$ =”)来禁用的。 一旦操作完成,查找replace可以摆脱这些。
这个vba只是自动查找/replace活动工作表。
' toggle forumlas on active sheet as active/ inactive ' by use of "$=" prefix Sub toggle_active_formulas() Dim current_calc_method As String initial_calc_method = Application.Calculation Application.Calculation = xlCalculationManual Dim predominant As Integer Dim c As Range For Each c In ActiveSheet.UsedRange.Cells If c.HasFormula Then predominant = predominant + 1 ElseIf "$=" = Left(c.Value, 2) Then predominant = predominant - 1 End If Next c If predominant > 0 Then For Each c In ActiveSheet.UsedRange.Cells On Error Resume Next If c.HasFormula Then c.Value = "$" & c.Formula End If Next c Else For Each c In ActiveSheet.UsedRange.Cells On Error Resume Next If "$=" = Left(c.Value, 2) Then c.Formula = Right(c.Value, Len(c.Value) - 1) End If Next c End If Application.Calculation = initial_calc_method End Sub
没有检查Excel,但是这在Libreoffice4中工作:
地址重写的整个过程都是连续的
(a1)削减
(a2)粘贴
你需要在中间插入一些东西来中断连续性:
(b1)削减
(b2)select一些空单元(大于1)并拖动(移动)它们
(b3)粘贴
步骤(b2)是即将更新的单元停止跟踪。 快速简单。
我发现另一个解决方法非常简单:1.剪切内容2.将它们粘贴到新位置3.将刚刚粘贴的内容复制到所需的新位置。 4.取消剪切粘贴操作,将原始内容放回原来的位置。 5.将剪贴板中的内容粘贴到相同的位置。 这些内容将有原始的参考。
它看起来像很多,但键盘快捷键速度超快:1. Ctrl-x,2. Ctrl-v,3. Ctrl-c,4. Ctrl-z,5. Ctrl-v
点击您想要复制的单元格。 在公式栏中,突出显示公式。
按下Ctrl C
按下转义键(带你离开主动编辑该公式)。
select新的单元格。 Ctrl V