Excel vba,更改公式中的单元格引用以指向不同的单元格位置

Excel vba,更改公式中的单元格引用以指向不同的单元格位置

我正在尝试将公式列位置的某些部分移动(偏移)到不同的列位置,偏移量为指定的列数。公式单元格在工作表中会发生变化。我有数千个公式,它们的单元格位置都不同。所以我更喜欢某种 vba 宏解决方案。这是原始公式:

=IF(AND($A$9=1,GH10=GT12),0,IF(AND($A$9=2,GI10=GS13),0,IF(AND($A$9=3,GJ10=GR14),0,1)))

并希望将其更改为:

=IF(AND($A$9=1,GI10=GT12),0,IF(AND($A$9=2,GJ10=GS13),0,IF(AND($A$9=3,GK10=GR14),0,1)))

这是多了一列,但只有分子(GH10 -> GI10 和 GI10 -> GJ10 等)。并且具有相同的恒定行号。

我找到了此代码(如下),它允许我从下拉框中选择要移动的列数(只要我可以手动将其输入到代码中,就没有必要),但这也会改变公式的分母。(注意:我不能将 $ 添加到我不想更改的公式部分。公式必须保持动态)。

Sub Macro1()
    Dim nbr As Long, cel As Range, cels As Range, sh As Worksheet
    Set cels = Selection

    nbr = CLng(InputBox("Enter offset:"))

    Set sh = Worksheets.Add

    For Each cel In cels

        If cel.HasFormula Then

            sh.Cells(cel.Row, cel.Column + nbr).FormulaR1C1 = cel.FormulaR1C1
            cel.Formula = sh.Cells(cel.Row, cel.Column + nbr).Formula

        End If

    Next

    Application.DisplayAlerts = False
        sh.Delete
    Application.DisplayAlerts = True

End Sub

这是一次针对一个单元格。如果有可用的 VBA 代码,它是否可以容纳选定的范围,而不是一次容纳单个单元格?

相关内容