2014-03-27 1 views
1

와우, 나는이 사실에 정말 가깝다고 느낍니다.루프가 범위와 관련하여 수식을 변경하려면

나는 모듈에이 코드를 가지고 :

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" 

이제, 내가 분명히하자, 나는 그것을에 원하는만큼이 코드가 작동합니다. 하나의 열에서 숫자의 범위를 가져 와서 가장 가까운 전체 정수로 반올림 한 다음 16을 더하고 다른 열에서이 값을 나타내는 것이 분명 할 것입니다.

그러나

나는 '더 나은'이 적은 코드 실행, 나는 더 효율적인 프로그래머가되고 싶습니다 될 수있다이 같은 느낌, 그래서 그렇게처럼 작성하려고 :

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에 관한 제 1 질문이지만, 여러분은 제가 코딩에 대해 알고있는 모든 것의 근처에서 저에게 확실히 가르쳐 주셨습니다.

+3

루프가 필요하지 않습니다. 'Range ("R1400 : R1429"). 수식 = "= (ROUND (AC1400, 0)) + 0.0625"'이 대신 사용하십시오. Btw는'X '다음에'&'를 놓치고 AC (AC = & gt; && 0)) + 0을 따옴표로 묶을 필요가 없기 때문에 오류가 발생합니다.0625 "' –

+0

Simoco의 우수한 솔루션을 설명하기 위해 : VBA는 한 번의 작업으로 전체 셀 범위에 단일 수식을 적용 할 수 있습니다. 이렇게하면 수식을 셀 아래로 복사 할 때 일반 Excel과 마찬가지로 수식이 달라집니다 "= SUM (A2 : D2)"복사와 비교하여 "$ SUM"($ A $ 2 : $ D $ 2)를 복사하는 것과 같은 "$" 왼쪽 셀은 항상 '앵커'셀이므로 제안 된 경우 'AC1400'을 범위에 할당하면 각 행에 대응하여 'AC1401','AC1402' 등이 자동으로 조정됩니다. –

+0

@simoco, 이것은 for 루프를 nixing하는 것이 내가하는 일보다 훨씬 효율적이었습니다.이 질문을 대답으로 제출하면 기꺼이 받아 들일 것입니다. –

답변

3

, 당신은 루프를 필요가 없습니다, 당신은 단순히 사용할 수 있습니다

Range("R1400:R1429").Formula = "=(ROUND(AC1400, 0))+0.0625" 
당신이 가진 것, 그래서 엑셀, 각 행에 대해 제대로 공식을 조정할 것이다

:

  • =(ROUND(AC1400, 0))+0.0625
  • =(ROUND(AC1401, 0))+0.0625
  • ..... 화학식 R1401 화학식에서 R1400
  • in R1429 수식 =(ROUND(AC1429, 0))+0.0625
2

문자열로 Range 함수의 X 값을 캐스팅해야합니다. 셀 참조를 전달하는 대신 동일한 기술을 사용하여 참조 된 셀의 값을 직접 ROUND으로 전달할 수 있습니다. 그게 개선인지는 모르겠지만 그것은 나의 첫 번째 본능이었습니다.

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

@simoco가 지적했듯이 루프를 전혀 사용할 필요가 없습니다. 그러나 앞으로도 비슷한 문제가 발생하기를 원한다면 위의 내용이 효과가 있습니다. 제가 위의 댓글에서 언급 한 바와 같이

+0

당신은이 사이트의 가치를 증명할 수 있도록 돕고 있습니다. 이것은 알아두면 좋습니다. 위와 마찬가지로, 내가 허가를받을 때 나는 upvote거야. –