2013-05-24 2 views
0

미리 녹음 된 매크로를 수정해야합니다. IF 문을 사용하여 값이 N/A인지 확인하고 CN으로 시작하지 않는 한 0으로 변경 한 다음 셀을 CN* 값으로 설정합니다. IF 문을 사용하여 CN* 또는 V*을 확인하고 그 중 하나의 값을 반환하십시오.중첩 된 IF 문은 #VALUE를 반환합니다.

IF 문은 값이 CN하거나 그 값을 반환해야 V로 시작, 그렇지 않은 경우, 값이 N/A 인 경우 확인하고 0으로 셀을 변경해야합니다.

자료 문의 :

ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 

수정 satement :

ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE)) ORIF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))" 

은 현재 기본 문은 일반적으로 0을 반환하지만 V*로 시작하는 값을 확인하지 않습니다. 수정 문은 반환 #VALUE!

답변

1

mousio의 대답에 추가하면 조건에서 얻은 값을 다시 계산하기 때문에, 당신은 또한, 대신에 단순히 IFIFERROR을 사용할 수 있습니다. 첫 번째의 경우,는 다음과 같습니다

ActiveCell.FormulaR1C1 = _ 
    "=IFERROR(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE),0)" 

것은 VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE)가 오류를 반환하는 경우, 대신 0를 얻을 수 있다는 것을 의미하고, 그렇지 않으면, 당신은 VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE)의 값을 얻을 수있다.

그리고 수정 된 하나 VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE)가 오류를 반환하는 경우이 하나에서

ActiveCell.FormulaR1C1 = _ 
    "=IFERROR(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE), 
     IFERROR(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE), 
     0))" 

은, 그것은 VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE)를 확인하고,이 너무 에러를 반환하는 경우, 그것은 0를 반환합니다.

+0

감사합니다 Jerry,이 코드는 완벽하게 작동합니다. – user2419115

+0

@ user2419115 굉장! :디 – Jerry

1

난 당신이, 즉이 if 하나의 대체 새 수표로 첫 번째 0 결과를 교체 할 필요가 있다고 생각합니다 :

ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE, 
     IF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=TRUE, 
     0, 
     VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE)), 
     VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 
중첩 if에 의해

ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE, 
     0, 
     VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 

(가독성을 위해 조정)

그런 다음 조건을 반전하고 if 인수를 나머지 전환하면

이 더 명확 수 있습니다 :

ActiveCell.FormulaR1C1 = _ 
    "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=FALSE, 
     VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE), 
     IF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=FALSE, 
     VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE), 
     0))" 
+0

+1 그래, 중첩 된 방법이 여기에서 가장 쉬운 방법 일 수 있습니다. – Jerry