For循环来改变相对于范围excel vba的公式

哇,我觉得我真的很接近这个。

我有一个模块中的代码:

Range("R1400").Formula = "=(ROUND(AC1400, 0))+0.0625" Range("R1401").Formula = "=(ROUND(AC1401, 0))+0.0625" Range("R1402").Formula = "=(ROUND(AC1402, 0))+0.0625" Range("R1403").Formula = "=(ROUND(AC1403, 0))+0.0625" Range("R1404").Formula = "=(ROUND(AC1404, 0))+0.0625" Range("R1405").Formula = "=(ROUND(AC1405, 0))+0.0625" Range("R1406").Formula = "=(ROUND(AC1406, 0))+0.0625" Range("R1407").Formula = "=(ROUND(AC1407, 0))+0.0625" Range("R1408").Formula = "=(ROUND(AC1408, 0))+0.0625" Range("R1409").Formula = "=(ROUND(AC1409, 0))+0.0625" Range("R1410").Formula = "=(ROUND(AC1410, 0))+0.0625" Range("R1411").Formula = "=(ROUND(AC1411, 0))+0.0625" Range("R1412").Formula = "=(ROUND(AC1412, 0))+0.0625" Range("R1413").Formula = "=(ROUND(AC1413, 0))+0.0625" Range("R1414").Formula = "=(ROUND(AC1414, 0))+0.0625" Range("R1415").Formula = "=(ROUND(AC1415, 0))+0.0625" Range("R1416").Formula = "=(ROUND(AC1416, 0))+0.0625" Range("R1417").Formula = "=(ROUND(AC1417, 0))+0.0625" Range("R1418").Formula = "=(ROUND(AC1418, 0))+0.0625" Range("R1419").Formula = "=(ROUND(AC1419, 0))+0.0625" Range("R1420").Formula = "=(ROUND(AC1420, 0))+0.0625" Range("R1421").Formula = "=(ROUND(AC1421, 0))+0.0625" Range("R1422").Formula = "=(ROUND(AC1422, 0))+0.0625" Range("R1423").Formula = "=(ROUND(AC1423, 0))+0.0625" Range("R1424").Formula = "=(ROUND(AC1424, 0))+0.0625" Range("R1425").Formula = "=(ROUND(AC1425, 0))+0.0625" Range("R1426").Formula = "=(ROUND(AC1426, 0))+0.0625" Range("R1427").Formula = "=(ROUND(AC1427, 0))+0.0625" Range("R1428").Formula = "=(ROUND(AC1428, 0))+0.0625" Range("R1429").Formula = "=(ROUND(AC1429, 0))+0.0625" 

现在,让我清楚,这个代码按我的意思工作。 可能很明显,我在一列中取一个数字范围,将它们四舍五入到最接近的整数,然后添加十六分之一,并将这些值表示在不同的列中。

然而

我觉得这样做可以用更less的代码“更好”执行,我想成为一个更高效的程序员,所以我试图这样写:

 Dim X As Integer For X = 1400 To 1429 Range("R" & X).Formula = "=(ROUND(""AC"" "&X", 0))+0.0625" Next X 

但是这个(以及我试过的变种)都抛出了'1004'错误或语法错误。 我所做的大部分改变都与引号和位置有关,然后我也尝试在这里 , 在 这里, 这里和这里实施这些问题的build议,但是这些问题似乎都没有提供我正在寻找的解决scheme,或者在我的经验不足的情况下对我没有意义。

可能(可能)我的search没有包含我正在寻找的正确的措辞,但这可能是因为我现在正在采取这个我的第一个VBA的刺伤:)

感谢您的帮助或参考。 这是我在StackOverflow上的第一个问题,但是你们这些人肯定教会了我几乎所有我知道的有关编码的东西。

正如我在上面的评论中提到的,你不需要循环,你可以简单地使用:

 Range("R1400:R1429").Formula = "=(ROUND(AC1400, 0))+0.0625" 

Excel会正确调整每一行的公式,所以你会有:

  • R1400公式中=(ROUND(AC1400, 0))+0.0625
  • R1401公式=(ROUND(AC1401, 0))+0.0625
  • …..
  • R1429公式=(ROUND(AC1429, 0))+0.0625

您需要将Range函数中的X值作为string进行投射。 你可以使用相同的技术将引用的单元格的值直接传递给ROUND ,而不是传递单元格引用。 我不知道这是否有进步,但这是我的第一本能。

 Range("R" & CStr(X)).Formula = "=(ROUND(" & Range("AC" & CStr(X)).Value & ", 0))+0.0625" 

正如@simoco所指出的,你根本不需要使用循环。 但是如果你仍然想要,或者将来遇到类似的问题,上面应该可以工作。