首页 文章

如何在复制/粘贴后禁用Excel的自动单元格引用更改?

提问于
浏览
41

我有一个庞大的Excel 2003电子表格,我正在努力 . 有很多非常大的公式,有很多细胞参考 . 这是一个简单的例子 .

='Sheet'!AC69+'Sheet'!AC52+'Sheet'!AC53)*$D$3+'Sheet'!AC49

他们中的大多数都比这更复杂,但这可以很好地了解我正在使用的内容 . 这些细胞参考中很少是绝对的($ s) . 我希望能够将这些单元格复制到不同的位置,而不会更改单元格引用 . 我知道我可以简单地使用f4来使引用绝对,但是有很多数据我可能需要稍后使用Fill . 有没有办法临时禁用复制粘贴/填充更改单元格引用而不使引用绝对?

编辑:我刚刚发现你可以通过将单元格内容复制为文本而不是公式来对VBA执行此操作 . 我不想这样做,因为我想一次复制整行/列 . 我缺少一个简单的解决方案吗?

11 回答

  • 0

    单击要复制的单元格 . 在公式栏中,突出显示公式 .

    Ctrl C .

    按转义(让您不再主动编辑该公式) .

    选择新单元格 . Ctrl V.

  • 52

    在类似情况下我刚刚使用的简单解决方法:

    • 复制工作表

    • 从重复的工作表中剪切粘贴

    • 删除重复的工作表以进行清理

    您的单元格引用现在已被复制,无需更改 .

  • -1

    来自http://spreadsheetpage.com/index.php/tip/making_an_exact_copy_of_a_range_of_formulas_take_2

    • 将Excel置于公式视图模式中 . 最简单的方法是按Ctrl`(该字符是"backwards apostrophe,",并且通常位于具有〜(代字号)的相同键上 .

    • 选择要复制的范围 .

    • 按Ctrl C.

    • 启动Windows记事本

    • 按Ctrl V将复制的数据传递到记事本中

    • 在记事本中,按Ctrl A,然后按Ctrl C复制文本

    • 激活Excel并激活要粘贴公式的左上角单元格 . 并确保要复制的工作表处于公式视图模式 .

    • 按Ctrl V进行粘贴 .

    • 按Ctrl`切换出公式视图模式 .

    注意:如果粘贴操作返回到Excel无法正常工作,则可能是您最近使用了Excel的文本到列功能,而Excel正在尝试通过记住您上次解析数据的方式来提供帮助 . 您需要启动“将文本转换为列向导” . 选择“分隔”选项,然后单击“下一步” . 清除除Tab之外的所有Delimiter选项复选标记 .

    或者,从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
    
  • -1

    一个非常简单的解决方案是选择要复制的范围,然后选择查找和替换( Ctrl + h ),将 = 更改为公式中未使用的另一个符号(例如 # ) - 从而使其不再是活动公式 .

    然后,将所选范围复制并粘贴到其新位置 .

    最后,查找和替换将原始范围和新范围中的 # 更改回 = ,从而将两个范围恢复为公式 .

  • 22

    我来到这个网站寻找一种简单的方法来复制,而无需更改单元格引用 . 但现在我认为我自己的解决方法比大多数这些方法简单 . 我的方法依赖于Copy更改引用但Move不引用的事实 . 这是一个简单的例子 .

    假设你在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细胞 . 当然,你必须记住你离开他们的地方 .

  • -1

    这个简单的技巧有效:复制和粘贴 . 不要剪切和粘贴 . 粘贴后,重新选择复制的部分,然后转到编辑,向下滑动到清除,清除内容 .

  • 0

    我认为您坚持使用编辑中提到的解决方法 .

    我首先将表单上的每个公式转换为大致如下:

    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 开头,那么将VBA宏中的 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 错误 .

    分阶段进行这项工作并经常转换回公式以检查没有发生灾难可能是有益的

  • 5

    在执行操作时使用find / replace来禁用公式是很常见的 . 例如,使用转置进行复制 . 通过在其前面放置一些占位符(例如“$ =”)来禁用该公式 . 一旦操作,查找替换可以摆脱这些完成 .

    此vba只是自动执行活动工作表的查找/替换 .

    ' 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
    
  • -1

    试试这个:左键单击选项卡,复制整个工作表,然后剪切要保持相同的单元格并将其粘贴到原始工作表中 .

  • 1

    我找到了另一种非常简单的解决方法:1 . 剪切内容2.将它们粘贴到新位置3.将刚粘贴的内容复制到所需的新位置 . 4.撤消剪切粘贴操作,将原始内容放回到获取它们的位置 . 5.将剪贴板中的内容粘贴到同一位置 . 这些内容将具有原始参考 .

    看起来很多,但键盘快捷键超快:1 . Ctrl-x,2 . Ctrl-v,3 . Ctrl-c,4 . Ctrl-z,5 . Ctrl-v

  • -1

    没有签入Excel,但这在Libreoffice4中有效:

    地址重写的全部内容都是连续发生的
    (a1)削减
    (a2)粘贴

    您需要通过在中间放置一些内容来中断连续性:
    (b1)切
    (b2)选择一些空单元格(大于1)并拖动(移动)它们
    (b3)粘贴

    步骤(b2)是即将更新的单元停止跟踪的地方 . 快速而简单 .

相关问题