2016-08-15 2 views
0

내 Excel에서 두 개의 워크 시트가 있습니다. 첫 번째 시트를 사용하면 드롭 다운 목록에서 계산 방법을 선택하고 계산을위한 변수를 입력 할 수 있습니다 (녹색 셀, 파란색 열이 표시됨). 일부 상수). 결과 항목은 두 번째 워크 시트 (데이터베이스)에서 해당 계산 수식을 검색 한 다음 수식을 시트 1에 붙여 넣습니다. 수식을 사용하여 데이터베이스의 셀 대신 시트 1의 셀을 사용하여 계산해야합니다. I는 계산식으로부터 세포를 사용하는 결과를 얻을 것이다 VLOOKUP :=Eval(VLOOKUP(A3,Database!A2:E10,5,FALSE))으로 평가를 조합하여상대 셀을 사용하여 return 공식을 Excel로

Function Eval(ref As String) 
    Eval = Application.Evaluate(ref) 
End Function 

: enter image description here

enter image description here 현재 I는 다음과 같이 평가라는 유저 정의 함수를 만들어 내 데이터베이스, 수식이 시트 1에서 계산 중에 얻은 결과를 어떻게 얻을 수 있습니까?

답변

2

한 가지 간단한 방법은 다음과 같이 하나의 CHOOSE 내의 모든 수식을 사용하는 것입니다 :

Public Function eval(ref As String) 
    eval = Application.Caller.Parent.Evaluate(ref) 
End Function 

이가 보장 : 다른이 같은 Application.Caller을 사용하는 것입니다

=IFERROR(CHOOSE(SUMPRODUCT(MATCH(A2,"Calculation "&ROW($1:$9),0)),B2*C2*D2,B2*C2-D2,B2+C2-D2,B2^2-C2+D2,B2*D2-C2^2,B2+C2*D2,B2*C2-C2*D2,B2-D2-C2*D2,C2-D2*B2),"") 

main-ref로 사용되는 호출자의 부모 (eval() 수식이있는 시트) 사용.

편집
당신의 "행"는 식의 정적 명심하십시오. "계산 4"로 이동하면 5 행 (첫 번째 시트의 수식 행이 아닌)이 사용됩니다. 모든 행 번호가 ## (또는 고유 어떤 식별자 당신이 좋아)로 변경해야하지만

=Eval(SUBSTITUTE(VLOOKUP(A3,Database!A2:E10,5,FALSE),"##",ROW())) 

이 들어 당신은 같은 것을 사용할 수 있습니다. 그런 다음 "계산 1"과 같을 것이다 : 당신은 아직도 단지 :

+0

안녕 더크에게, 질문이 대단히 감사합니다 경우 =B##*C##*D##

, 내가 게시 된 문제는 단지 단순화 된 버전입니다. 고려할 수있는 방정식이 50 개를 넘을 수 있으므로 선택 공식이 길어질 수 있습니다. 그러나 두 번째 경우, UDF를 내 모듈에 직접 복사하면 어떤 이유로 인해 이전 Eval 함수와 동일하게 작동합니다. 해당 UDF에 대한 추가 도움을 제공해 주실 수 있습니까? –

+0

@LiuRoye'Evaluate' 함수는 시트가 아니라 응용 프로그램에서 실행됩니다. 'Sheets ("Sheet1"). Evaluate (...)와 같이 사용되면 항상 "Sheet1"을 사용합니다. 'Application.Evaluate (...)'로 직접 사용될 경우,'ActiveSheet'를 사용합니다. 여러 장을 교차 사용하면'Application.Evaluate (...)'가 매우 실패 할 수 있습니다. Sheet2 A1에서 A2와 A2에서 2. Sheet1 A2에서 '1'을 입력하십시오. 이제 Sheet1에서'Sheet2! A1'을 사용하면'1'이 표시됩니다. 하지만 sheet2로 가서 'A1'을 다시 입력 한 다음 sheet1로 돌아 가면 수식에'2 '가 표시됩니다 (내 코드는 여전히 1이어야합니다). –

+0

@LiuRoye 모든 문제를 피하는 가장 좋은 방법은 사용하고 있습니다. 'Sheet1! B2 * Sheet1! C2 * Sheet1! D2'와 같은 완전한 참고 문헌. 이렇게하면 원하는대로 할 수 있습니다.) –

관련 문제