2017-11-30 3 views
0

현재 셀의 내용을 인수로 사용하여 사용자 정의 함수에 전달하려고합니다.범위 인수로 udf에 셀 내용을 전달합니다.

즉, 나는이 셀 "sheet1! X17 : X37"과 같은 것을 얻을 수있는 셀에 관심이있는 범위를 계산합니다.

이제이 셀 (예 : A1)을 udf에 전달하고 싶습니다. 예를 들어 난에 "= myFunction이 (! Sheet1의 X17 : X37) 반대"= myFunction이 (A1) "를 가지고 B1에서 원하는.

어떤 아이디어를

내 함수는 다음과 같다 :

Public Function ConcatItNoDuplicities(ByVal cellsToConcat As Range) As String 
    ConcatItNoDuplicities = "" 
    If cellsToConcat Is Nothing Then Exit Function 
    Dim oneCell As Range 
    Dim result As String 
    For Each oneCell In cellsToConcat.Cells 
     Dim cellValue As String 
     cellValue = Trim(oneCell.Value) 
     If cellValue <> "" Then 
      If InStr(1, result, cellValue, vbTextCompare) = 0 Then _ 
       result = result & cellValue & "," 
     End If 
    Next oneCell 
    If Len(result) > 0 Then _ 
     result = Left(result, Len(result) - 1) 
    ConcatItNoDuplicities = result 
End Function 
간접

최저 T

+0

음 ... 어쩌면 내가 뭔가를 놓친 거지하지만, 하나의 셀의 연결이없고, 단지 해당 셀 수 있습니다 :이 작은 UDF()는 대상의 간단한 연결합니까? 그래서 이것은 '= A1'과 동일하지 않습니까? –

+0

사실 A1에는 내가 결합하고자하는 범위가 포함되어 있고, A1의 내용이 아니라 A1의 내용이 내 함수의 인수로 사용되기를 원합니다. –

답변

0

사용 :

=ConcatItNoDuplicities(INDIRECT(A1)) 
+0

많은 감사! 그건 아주 간단했습니다 ... 얼마나 많은 시간을 소비했는지 믿을 수 없습니다. –

+0

@theodorcarp 답을 클릭하여 올바른 것으로 표시하십시오. –

0

또 다른 방법 .

에는 셀 블록 주소와 비슷한 텍스트가 들어 있습니다.

Public Function TakeOneStepBeyond(rng1 As Range) As String 
    Dim rng2 As Range, r As Range 

    Set rng2 = Range(rng1.Value) 

    TakeOneStepBeyond = "" 
    For Each r In rng2 
     TakeOneStepBeyond = TakeOneStepBeyond & r.Value 
    Next r 
End Function 

enter image description here