簡體   English   中英

使用相對參考將公式從 [1,X] 范圍復制到 [Y,X] 范圍

[英]Copy formula from [1,X] range to [Y,X] range with relative reference

我有兩個命名范圍, Source G3:M3 和Target G8:M10。

Source包含一個公式,該公式引用同一行上范圍之外的單元格。 我想復制到目標范圍內,如圖。

設置

我寫了以下例程

Sub CopyFormulas()

TargetRangeName = "Target"
SourceRangeName = "Source"

Range(TargetRangeName).Clear

Range(TargetRangeName).Formula = Range(SourceRangeName).Formula

End Sub

公式在范圍內被復制,但相對引用沒有正確修改,給出如圖所示的結果。

在此處輸入圖片說明

相對引用從第 3 行而不是Target范圍的第一行開始。

一些不適用於我的情況的解決方案:

  • 復制和粘貼會產生正確的結果,但此例程要重復數千次,因此性能至關重要,使用分配的性能改進是 10 倍
  • 更改公式以將引用放在正確的位置,這不適用,因為我正在處理一個大型、復雜和舊的文件,其中更改數百個公式是不可行的,並且Target可以更改相對於Source位置

您可以通過設置做到這一點.FormulaR1C1財產,而不是.Formula屬性。 像這樣:

Public Sub ClientCode()
    Dim srcRng As Range
    Dim tarRng As Range

    Set srcRng = Range("Source")
    Set tarRng = Range("Target")

    tarRng.Formula2R1C1 = srcRng(1).Formula2R1C1
End Sub

.FormulaR1C1維護相對引用

您的宏正在復制字符串,本質上是一個事實上的絕對引用。 如果您從編輯欄中手動復制公式並將其粘貼到另一個單元格中,您將獲得相同的行為。

您說這是一個“大而復雜的舊文件,其中更改數百個公式是不可行的,並且 Target 可能會更改位置”,但您不想使用Copy 討厭把它打破給你,你不能同時擁有它。 要么更新源,要么復制它。

Range(SourceRangeName).Copy Range (TargetRangeNamw)

您可能可以通過刪除Range.Clear來節省一些 CPU 周期,但這可能並不是真正必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM