2011-07-12 33 views
41

我正在處理一個龐大的Excel 2003電子表格。有很多非常大的公式與很多單元格引用。這是一個簡單的例子。複製/粘貼後禁用Excel的自動單元格引用更改

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

其中大多數比這更復雜,但是這提供了我正在使用的東西的一個好主意。這些單元格引用很少是絕對的($ s)。我希望能夠將這些單元格複製到其他位置,而不更改單元格引用。我知道我可以簡單地使用f4來使引用絕對,但是有很多數據,我可能需要稍後使用Fill。有沒有什麼辦法可以暫時禁用複製粘貼/填充的單元格引用更改,而不使引用變爲絕對的?

編輯:我剛剛發現,你可以通過複製單元格內容作爲文本而不是一個公式的VBA做到這一點。我想不必這樣做,因爲我想一次複製整行/列。有沒有簡單的解決方案,我失蹤了?

+0

偉大的問題! VBA中的循環能否解決您的剩餘問題? –

回答

50

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

  1. 將Excel的公式視圖模式。最簡單的方法是按Ctrl +`(該字符是「反向撇號」,並且通常位於具有〜(代字號)的同一個鍵上
  2. 選擇要複製的範圍
  3. 按Ctrl + C
  4. 啓動Windows記事本
  5. 按Ctrl + V將粘貼複製數據到記事本
  6. 在記事本中,按Ctrl + A,然後按Ctrl + C複製文本
  7. 激活Excel和激活上左邊的單元格要粘貼公式,並確保要複製的工作表處於公式視圖模式下。
  8. 按Ctrl + V進行粘貼。
  9. 按下Ctrl +`切換出公式視圖模式。

注意:如果粘貼操作返回到Excel工作不正常,很可能你已經使用Excel的文本到列最近功能,和Excel正試圖通過記住你最後怎麼解析是有幫助你的數據。您需要啓動「將文本轉換爲列嚮導」。選擇分隔選項,然後單擊下一步。清除除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 
+0

看起來您可以將其粘貼到未處於「公式視圖」模式下的工作表中;儘管如此,所有其他內容都是絕對必要的。 +1,因爲這非常有幫助且易於遵循。我不明白爲什麼Excel會假設我們想引用另一個文件中的單元格,但至少有一個很好的解決方法。 – ZeroK

+3

這個答案很棒 - 我希望我能接受原始海報。我是一個程序員,所以VBA不會嚇到我,但我不打算只用它來複制和粘貼一些單元格,如果我可以避免它的話......真的應該有一個「粘貼而不更新公式」選項的構建進入Excel。 – JPhi1618

+1

謝謝,謝謝,謝謝。 :) – Tamer

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錯誤。

這可能是有益的分階段這方面的工作,並轉換回公式,每隔一段時間檢查是否有災難發生

22

一個很簡單的辦法就是選擇要複製的範圍內,然後查找和替換(Ctrl + h),改變=到未在公式中使用的另一種符號(如#) - 從而阻止它成爲一個積極的公式。

然後,複製並粘貼選擇的範圍,以它的新位置。

最後,在原始範圍和新範圍內,查找並替換以將#更改回=,從而將兩個範圍都恢復爲公式。

+3

到目前爲止,可悲的是,這是我最滿意的解決方案。簡單地做到這一點的替代捷徑會很方便。 –

5

我來到這個網站尋找一種簡單的方法不改變單元格引用複製。但是現在我認爲自己的解決方法比大多數這些方法簡單。我的方法依賴於Copy更改引用但Move不行。這是一個簡單的例子。

假設您在列A和B以及C中的公式(例如C = A + B)中有原始數據,並且您希望列F中有相同的公式但從C複製到F會導致F = D + E 。

  1. 將C的內容複製到任何空的臨時列,比如R.相對引用將更改爲R = P + Q,但即使將其標記爲錯誤,也會忽略此內容。
  2. 回到C和移動(不能複製)到F.式應該是不變所以F = A + B。
  3. 現在去R和複製回C.相對引用將恢復到C = A + B
  4. 刪除臨時公式R.
  5. 鮑勃是你的叔叔。

我已經完成了一系列的單元格,所以我想它幾乎適用於任何複雜程度的工作。你只需要一個空的區域來停放coiped細胞。當然,你必須記住你離開他們的地方。

+0

說明不是簡單:) 如果你想複製第1行(與行其參考文獻2)能排11,則: 1.複製它排11,那麼它會參考排12 2.切並將其粘貼到第21行,然後它仍然會引用第12行。 3.將它從21複製到11,然後它會根據需要引用第2行。 – alexkovelsky

+0

對我來說似乎很簡單,複製到一個偏移量,移動原來的,複製偏移量,刪除偏移量。 – will

+0

簡單和工作,+1 – davidhigh

0

有沒有在Excel檢查,但這部作品在Libreoffice4:

地址重寫整個事情的過程中來連續
(A1)切
(A2)粘貼

您需要
(B1)削減
(B2)選擇一些空單元格(大於1)並拖動(移動)他們
:通過把東西之間中斷的連續性3210(B3)粘貼

工序(b2)爲其中爲約自我更新細胞停止跟蹤。快速簡單。

+0

我認爲這個答案是不合適的,因爲它還沒有經過測試。 – Fjodr

+0

Fjodr,我沒有excel。你能測試一下嗎?我期望它能夠工作,這聽起來像是所有提議的解決方案中最簡單的。最被投票的答案包括9個步驟!我的工作更容易。請嘗試! – user1501439

0

試試這個: 左鍵單擊該選項卡,製作整個工作表的副本,然後剪切要保持相同的單元格並將其粘貼到原始工作表中。

1

這個簡單的技巧工程:複製和粘貼。不要剪切和粘貼。粘貼後,然後重新選擇您複製的部分並轉到編輯,向下滑動到清除和清除內容。

-1

我發現了另一種解決辦法,這是非常簡單的: 1.把內容 2.在新位置 3.複製您剛剛粘貼到你想要的新位置的內容粘貼他們。 4.撤消剪切粘貼操作,將原始內容放回原來的位置。 5.將剪貼板中的內容粘貼到同一位置。這些內容將具有原始參考。

看起來很多,但超快與鍵盤快捷鍵: 1.按Ctrl-X,2,按Ctrl-V,3 CTRL-C 4.按Ctrl-Z,5,按Ctrl-V

0

在執行操作時使用查找/替換來禁用公式很常見。例如,複製轉置。該公式通過在其前面放置一些佔位符(例如「$ =」)來禁用。一旦操作完成,查找替換可以擺脫這些。

此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 
+0

您能否在此文章中添加更多詳細信息? – cdomination

-1

單擊要複製的單元格。在公式欄中,突出顯示公式。

Ctrl C

新聞轉義(帶你離開積極編輯該公式)。

選擇新的細胞。 Ctrl V.