哇,我觉得我真的很接近这一个。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"
现在,让我清楚,这个代码工作,因为我想它。可能很明显,我在一列中取一个数字范围,将它们全部舍入到最接近的整数,然后添加十六分之一,并在不同列中表示这些值。
然而
我觉得这可能是更少的代码“好”的执行,我想成为一个更有效率的程序员,所以我尽量把它写像这样:
Dim X As Integer
For X = 1400 To 1429
Range("R" & X).Formula = "=(ROUND(""AC"" "&X", 0))+0.0625"
Next X
但是这个(以及我试过的变化)都会抛出'1004'错误或语法错误。我所做的大部分改变都与引号及其位置有关,然后我也试着从这些问题实施建议here,here,here,here,和here,但他们都没有提供相当的我正在寻找的解决方案,或者在我的经验不足的情况下对我没有意义。
这是可能的(可能),我的搜索没有包含我正在寻找正确的空话,但是这可能是因为我刚才把我的第一个尝试在VBA与此:)
感谢任何帮助或参考。这是我在StackOverflow上的第一个问题,但你们这些人肯定教会了我几乎所有我知道的关于编码的知识。
你不需要循环。改用这个:'Range(“R1400:R1429”)。Formula =“=(ROUND(AC1400,0))+ 0.0625”'。顺便说一句,错误发生,因为你已经错过'&'''''''''后'''''AC'周围不需要引号:'“=(ROUND(AC”&X&“,0))+ 0。0625“' –
只是为了解释Simoco的优秀解决方案:VBA可以在一个操作中将单个公式应用于整个单元格范围内,当这样做时,就像在普通Excel中将单个公式向下复制单元格一样,它会根据公式与复制“= SUM(A2:D2)”相比,引用的哪些位用“$”符号固定,哪些位不是(例如复制“= SUM($ A $ 2:$ D $ 2)左单元始终是'锚'单元,所以在这种情况下,将'AC1400'分配到一个范围会自动适当调整,以对应每一行来表示'AC1401','AC1402'等等。 –
@simoco,这就是它,nixing for循环比我所要做的更有效率,如果你提交这个答案,我会很乐意接受它。 –