我该如何简化

时间:2019-12-24 04:00:22

标签: excel vba excel-2010

我正在尝试编写一个代码,该代码适用于存储在硬盘驱动器上的旧文件。我已经编写了代码,并且可以正常工作,但是它相当长,并且随着某些部分的重复,它可以使用一些简化方法。

由于旧文件稍有变化,总和的位置可能会更改,这就是为什么我将变量用于行引用。有问题的代码是

ws1.Cells(n + first, 52).Formula = "=" & Split(Cells(1, 52).Address, "$")(1) & n + first - 1 & "+" & Split(Cells(1, 5).Address, "$")(1) & n + first & "+" & Split(Cells(1, 8).Address, "$")(1) & n + first & "+" & Split(Cells(1, 11).Address, "$")(1) & n + first & "+" & Split(Cells(1, 14).Address, "$")(1) & n + first & "+" & Split(Cells(1, 17).Address, "$")(1) & n + first & "+" & Split(Cells(1, 20).Address, "$")(1) & n + first & "+" & Split(Cells(1, 23).Address, "$")(1) & n + first & "+" & Split(Cells(1, 26).Address, "$")(1) & n + first & "+" & Split(Cells(1, 29).Address, "$")(1) & n + first & "+" & Split(Cells(1, 32).Address, "$")(1) & n + first & "+" & Split(Cells(1, 35).Address, "$")(1) & n + first & "+" & Split(Cells(1, 38).Address, "$")(1) & n + first & "+" & Split(Cells(1, 41).Address, "$")(1) & n + first & "+" & Split(Cells(1, 44).Address, "$")(1) & n + first & "+" & Split(Cells(1, 47).Address, "$")(1) & n + first

如您所见,每次将拆分重复更改为3列。

代码的重点是简单的cell(x,y)= cell(x-1,y)+和......

我相信可以通过for循环传递它来返回串联的字符串吗?

注意:这在for循环中,循环通过n值。首先是一个变量,用于标识计算的开始

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您不必要使用拆分来获取地址。您可以使用Cells(n,m).Address(False, False) instead of Split(Cells(1,m).Address,“ $”)(1)&n`

然后使用字符串concat来获取整个公式,

stri = "=" & Cells(52,n + first - 1).Address(False, False)
i=5
Do While i < 48 
   stri = stri & "+" & Cells(i,n + first).Address(False, False)
   i=i+3
Loop
ws1.Cells(n + first, 52).Formula = stri