如何增加单元格中的范围以向右移动一个单元格

How can I increment the range in a cell to shift right one cell

我正在尝试创建一个 excel 宏来根据需要移动单元格中的 selected 范围。

对于这个例子,假设我 select 一个单元格并且它包含 =sum(A1:A6),我希望代码看到 =sum(A1:A6),然后将它移动 1 到=总和(A2:A7).

我希望代码能够在任何具有相似总和(范围)的活动单元格 selected 中工作,然后只需单击一个按钮。

我的第二个问题是,例如 =sum(A2:A7) 我想加减 1 使其成为 =sum(A2:A8) 或 =sum(A1:A7)。作为单独的宏添加或减去。

感谢您的帮助,我不确定我是否正在搜索正确的术语来寻找解决方案,但我想我会问。

提前致谢。

如果我没理解错的话,也许是这样的?

Sub IncreaseRowFormulaBy1()
Dim v1 As String
Dim v2 As String
Dim x1 As String
Dim x2 As String

With ActiveCell
    v1 = Split(Split(.Formula, ":")(0), "(")(1)
    v2 = Replace(Split(.Formula, ":")(1), ")", "")
    x1 = Range(v1).Offset(1, 0).Address(0, 0)
    x2 = Range(v2).Offset(1, 0).Address(0, 0)
    .Replace What:=v1, Replacement:=x1, LookAt:=xlPart
    .Replace What:=v2, Replacement:=x2, LookAt:=xlPart
End With
End Sub

Sub DecreaseRowFormulaBy1()
Dim v1 As String
Dim v2 As String
Dim x1 As String
Dim x2 As String

With ActiveCell
    v1 = Split(Split(.Formula, ":")(0), "(")(1)
        If Range(v1).Row > 1 Then
            v2 = Replace(Split(.Formula, ":")(1), ")", "")
            x1 = Range(v1).Offset(-1, 0).Address(0, 0)
            x2 = Range(v2).Offset(-1, 0).Address(0, 0)
            .Replace What:=v1, Replacement:=x1, LookAt:=xlPart
            .Replace What:=v2, Replacement:=x2, LookAt:=xlPart
        End If
End With
End Sub

代码假定活动单元格将始终包含一个看起来像这样的单元格地址“(单元格地址1:单元格地址2)”。示例:(A1:A10) ... (B5:B12) ... (C2:C9) 等

v1变量用“:”分隔符拆分公式字符串得到第一个结果,然后用“(”分隔符拆分结果得到第二个结果,最终结果为单元格地址1。

v2变量用“:”分隔符拆分公式字符串得到第二个结果,然后将带有“)”的结果替换为“”。最后的结果就是单元格地址2.

x1变量是将v1地址偏移一(或减一)后得到的。 x2变量是将v2地址偏移一(或减一)后得到的v2地址。

最后代码替换活动单元格中的公式,从变量 v1 到变量 x1,从变量 v2 到变量 x2。

对于 DecreaseRowFormulaBy1 Sub,它将首先检查 cell-address1 行是否大于 1(因为如果它是第 1 行,则它不能减少到第 0 行)。

运行按F8调试宏(一步步),查看Locals中每个变量的值是多少Window.

如果我没记错的话。


我一直在考虑更短的代码,这就是我得到的:

Sub test1()
Dim rgOld As String
Dim rgNew As String
    With ActiveCell
    rgOld = Split(Split(.Formula, "(")(1), ")")(0)
    rgNew = Range(rgOld).Offset(1, 0).Address(0, 0)
    .Replace what:=rgOld, replacement:=rgNew, lookat:=xlPart
    End With
End Sub

Sub test2()
Dim rgOld As String
Dim rgNew As String
    With ActiveCell
    rgOld = Split(Split(.Formula, "(")(1), ")")(0)
        If Range(Split(rgOld, ":")(0)).Row > 1 Then
            rgNew = Range(rgOld).Offset(-1, 0).Address(0, 0)
            .Replace what:=rgOld, replacement:=rgNew, lookat:=xlPart
        End If
    End With
End Sub

过程与之前的sub类似,但使用的变量更少。 rgOld 变量是获取原始公式中单元格地址的范围,而不是获取单元格地址1,然后获取单元格地址2。对于 increase/decrease 一行,它偏移该范围的 1(或 -1),然后将地址作为 rgNew 变量。