2016-08-31 2 views
1

이것은 내 첫 번째 게시물이므로 가능한 한 명확히하기 위해 최선을 다할 것입니다.가변 워크 시트의 범위 합계를위한 Excel UDF

저는 올바른 해결책으로 UDF에 정착했습니다.하지만 그것은 기능이 내장되어있는 것이 무엇인지 파악할 수 없었기 때문입니다.

내 통합 문서는 "요약 시트"와 "{시스템 템플릿}"의 두 시트가 있습니다. 요약 시트에서 필자는 시스템 목록을 만들고이 목록에서 {System Template}을 사용하여 새 워크 시트를 생성하고 목록의 값을 기준으로 시트의 이름을 지정합니다.이 값은 정상적으로 작동합니다. 요약 시트에 시스템 이름이 포함 된 셀 옆에있는 셀에서 해당 시트의 각기 다른 시스템에 대해 "Q : Q"범위의 값을 합산하려고합니다. 변경되는 범위의 유일한 부분은 데이터가 들어오는 시트 이름입니다. 이것이 내가 문제를 일으키는 곳입니다. #Value 오류가 발생하고 문제의 위치를 ​​파악하는 방법을 알지 못합니다. 일반적으로 내장 된 수식 평가 도구를 사용하지만 UDF에서는 쓸모가 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

=SUM(INDIRECT("'" & A1 & "'!Q:Q")) 

당신이 원하는 것을 수행해야합니다

Function FrictionSum(rngInput As Range) 
    Dim rngCell, rngDomain As Range 
    Dim strName As String 
    FrictionSum = 0 

    'FrictionSum = rngInput.Value 
    Set rngDomain = Sheets(strName).Range("Q:Q") 

     For Each rngCell In rngDomain 
      FrictionSum = FrictionSum + rngCell.Value 
     Next rngCell 

End Function 
+2

당신은'Function' 정의하고 있지만, 당신은 그냥하는'Sub' 사용할 수 있습니다 아무것도 반환하지 않거나 당신이'로 정의 할 필요가 기능 FrictionSum (rngInput로 범위) As Long. 또한, 당신은'rngInput'을 전달하고 있지만, ** UDF ** 내부에서는 아무 것도하지 않습니다. –

+0

그래서'= SUM (INDIRECT (" '"& A1' "! Q : Q"))'여기서 A1은 시트 이름이 작동하지 않았습니까? –

+1

또한 strName에 값을 지정하지 않으므로 Excel에서 추측 할 수 있습니까? –

답변

0

으로 수식을 밝혔다.

워크 시트 함수 Sum은 반복 할 필요없이 원하는대로 처리합니다. 또한 strName에 값을 할당해야합니다.

코드 :

Function FrictionSum(rngInput As Range) As Double 
    Dim rngDomain As Range 
    Dim strName As String 


    strName = rngInput.Value 


    Set rngDomain = Sheets(strName).Range("Q:Q") 
    FrictionSum = Application.WorksheetFunction.Sum(rngDomain) 


End Function 
+0

처음에 SUM을 간접적으로 사용해 보았습니다. 그러나 한 가지 이유 또는 다른 이유로 나에게 (아마 따옴표가 빠져 있음) 작동하지 않았을 것입니다. 이제 작동합니다. UDF에서 strName을 할당하지 않은 유일한 이유는 문제를 해결하기 때문입니다. FrictionSum을 rngInput.Value에 할당 한 다음, 문제가 해결 될 때 주석 처리했습니다. strName을 다시 할당하지 않았습니다. 노 리턴에 관해서는 왜 For Each 루프 내의 FrictionSum을 반환 값으로 사용하지 않을까요? – Tom

+0

미안하다. 있어야합니다. 어쩌면 계단식이었을 수도 있고, 하나의 오류를 수정하여 다른 계단식 오류를 만들 수도 있습니다. 그러나 이것은 더 빨라야합니다. –

관련 문제