如何增加单元格中的范围以向右移动一个单元格
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 变量。
我正在尝试创建一个 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 变量。