2012-10-30 4 views
1

두 개의 입력 매개 변수 중 하나를 시트의 다른 곳에서 전역 설정에 따라 입력되는 셀의 수식으로 반환하는 Excel VBA 함수를 작성하려고합니다. IE에서 어딘가 다른 사람이 A 또는 B를 설정하면 functon을 호출하는 수식 AorB는 전역 설정이 무엇인지에 따라 A 또는 B를 반환합니다. 이 같은수식 선택을 반환하는 Excel 함수

뭔가 :

Function AOrB(A As Variant, B As Variant) As Variant 
    If someSetting = A Then 
     AOrB.formula = A 
    ElseIf someSetting = B Then 
     AOrB.formula = B 
    End If 
End Function 

나는 꽤 많이 돌아 다녔다했지만 난 그냥 입력에 어떤 종류의 지식을 가지고 함수가 반환 할 수 있도록하기 위해 반환하지 않습니다.

도움을 주시면 감사하겠습니다.

+1

그런 식으로 값을 반환 할 수는 없습니다. 값은 설정에 따라 두 가지 방법으로 계산할 수 있지만 함수는 값을 반환합니다. – nutsch

+0

정말 펑키하지 않는 한 - http://stackoverflow.com/questions/8520732/i-dont-want-my-excel-add-in-to-return-an-array-instead-i-need-a-udf 변화가 없다 - nutsch이 말했듯이이 값은 값만 반환 할 수 있습니다. – brettdj

답변

2

수식을 UDF에서 바꾸는 것은 좋은 생각이 아닙니다. 그것은 가능하지만 복잡합니다. 당신이 코드를 저장하는 무언가가

=IF(someSetting = A, AFormula, If(someSetting = B,BFormula,"")) 

someSetting 경우 해당 값을 검색 할 수있는 UDF를 만들 수 있습니다

나는 적절한 방법은 당신이 설명하는 것은 수식의 IF 경유 할 생각 . 좋아요 :

+0

"셀 수식을 UDF에서 변경할 수 없습니다."- 할 수 있습니다. 그러나 그것은 복잡합니다. 위의 링크를 참조하십시오. – brettdj

+0

많은 IF 문을 사용하지 않으려면 UDF를 개발하여 시트의 복잡성을 다소 줄이려고했습니다. 그것이 그렇듯이, 나는 IF로 시작하는 수백 개의 세포를 가지고 있습니다 (somesetting = A .........). 단순화하고 그 과정을 정리하고 싶습니다. 가치가있는 것보다 더 많은 어려움이있을 수 있습니다. 그러나 – DPierce

+0

음 ...이 방법을 더 간단하게 생각하면 잘 모르겠지만 UDF SomeSetting을 수정하여 변수를 전달하여 모든 설정을 검색 할 수 있습니다 . –

1

"ABChoice"와 같이 전역 설정을 저장할 셀을 지정하십시오. (수식 입력 줄의 왼쪽을 클릭하면 현재 셀 위치가 표시되고 원하는 이름을 입력 할 수 있습니다.) 그런 다음

공식을 다시 쓰기 :

Function AOrB() 
    If ThisWorkbook.Range("ABChoice") = "A" Then 
     AOrB = "A" 
    ElseIf ThisWorkbook.Range("ABChoice") = "B" Then 
     AOrB = "B" 
    Else 
     AOrB = "A" 'could switch to B, whichever is the default 
    End If 
End Function 

에만 입력 "A"또는 "B"할 수있는 사용자를 확인하기 위해 (데이터 메뉴에서) 데이터 유효성 검사를 사용하지만, 최종 else 절을 ​​사용하여 수 당신이 선택한 기본 상태라고 가정 할 때 불필요하게 만듭니다.

이것은 실제로 글로벌 셀의 이름을 지정하고 VBA를 필요로하지 않는 나중의 수식에서이를 참조하는 것입니다. 나는 당신의 기능이 UDF를 필요로하는 장면 뒤에서 좀 더 복잡하다고 가정하고있다. 그렇지 않다면 명명 된 범위를 사용하십시오.

실제로 "A"또는 "B"대신 1 또는 2를 사용하는 것이 좋습니다. 왜냐하면 전역 설정을 참조해야 할 때 선택 기능을 사용할 수 있기 때문입니다.이 설정은 IF 기능.

+0

+1 for choice ...'CHOICE (TestCell, DoIf1, DoIf2)'일부 수식을 더 읽기 쉽게 만듭니다 – SeanC