excel - 使用相对引用将公式从 [1,X] 范围复制到 [Y,X] 范围

标签 excel vba

我有两个命名范围,Source G3:M3 和 Target G8:M10。
Source包含引用同一行范围外的单元格的公式。我想把它复制到目标范围内,如图。

setup

我写了以下例程

Sub CopyFormulas()

TargetRangeName = "Target"
SourceRangeName = "Source"

Range(TargetRangeName).Clear

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

End Sub

公式在范围内被复制,但相对引用没有正确修改,得到如图所示的结果。

enter image description here

相对引用从第 3 行开始,而不是从 Target 的第一行开始。范围。

一些不适用于我的解决方案:
  • 复制和粘贴会产生正确的结果,但此例程要重复数千次,因此性能至关重要,使用赋值的性能提高 10 倍
  • 更改公式以将引用放在正确的位置,这是不适用的,因为我正在处理一个大型、复杂和旧的文件,其中更改数百个公式是不可行的,Target可以改变相对于 Source 的位置
  • 最佳答案

    您可以通过设置 .FormulaR1C1 来做到这一点。属性而不是 .Formula属性(property)。像这样:

    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维护相对引用

    关于excel - 使用相对引用将公式从 [1,X] 范围复制到 [Y,X] 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59813984/

    相关文章:

    excel - 具有多列的 Excel 中的唯一值

    vba - 加密和保护 VBScript 和 VBA 代码的最有效方法是什么?

    arrays - 使用 VBA 将过滤后的行复制到另一个工作表中

    excel - VBA - END IF 的运行时错误

    vba - 填充所有非可选参数后,函数参数对话框执行 UDF

    javascript - 如何使用 VBA 定位 onmouseover 元素?

    excel - 在 VBA 中编码时出现 Å、Ä 和 Ö(对于其他用户)的问题

    VBA宏: Formula is Based on a Column that changes locations

    Excel - 导出为 csv 并保存到另一个位置

    excel - 过滤数据透视表列,仅在以下情况下计数