2016-10-21 10 views
0

다음과 같이 두 인접하지 않은 열을 연속 배열로 결합 할 수있는 사용자 정의 함수가 있습니다.Excel VBA 비 연속 배열 사용자 정의 함수 수정

Function MakeContig(ParamArray av() As Variant) As Variant 
    Dim avOut() As Variant 
    Dim i  As Long 
    Dim j  As Long 

    ReDim avOut(1 To av(0).Count, 0 To UBound(av)) 
    For j = 0 To UBound(av) 
     For i = 1 To av(j).Rows.Count 
      avOut(i, j) = av(j)(i) 
     Next i 
    Next j 
    MakeContig = avOut 
End Function 

그래서, 입력하면 "= makecontig (A1 : A5, E1 : E5)는"셀에 하나의 어레이는 화학식에 포함되는 두 개의 열로 이루어진 형성된다. 이 함수를 편집하여 오류가 가득 찬 배열 또는 배열이 아닌 모든 항목의 항목을 무시할 수 있도록하고 싶습니다.

예를 들어 "= makecontig (A1 : A5, E1 : E5,)"또는 "= makecontig (A1 : A5, Nothing, E1 : E5)"또는 "= makecontig (A1 : A5, E1 : E5, C1 : C5 * # N/A) "오류 또는 공백 매개 변수를 무시하고 A1 : A5 및 E1 : E5에 대해서만 연속 배열을 생성하고 싶습니다.

내가 UDF 어딘가에 If/Then 문을 포함해야한다고 상상하지만 올바르게 실행하는 방법을 생각할 수 없다.

도움이 될 것입니다.

답변

0

당신은 매개 변수가 범위인지 여부를 테스트해야합니다

Function MakeContig(ParamArray av() As Variant) As Variant 
    Dim avOut() As Variant 
    Dim i  As Long 
    Dim j  As Long 
    Dim x As Long 
    Dim t As Long 
    x = -1 
    For j = 0 To UBound(av) 
     If TypeName(av(j)) = "Range" Then 
      x = x + 1 
      If av(j).Count > t Then 
       t = av(j).Count 
      End If 
     End If 
    Next j 
    ReDim avOut(1 To t, 0 To x) 
    t = 0 
    For j = 0 To UBound(av) 
     If TypeName(av(j)) = "Range" Then 
     For i = 1 To av(j).Rows.Count 
      avOut(i, t) = av(j)(i) 
     Next i 
     t = t + 1 
     End If 
    Next j 
    MakeContig = avOut 
End Function 

당신이 볼 수 있듯이 :

MakeContig($F$1:$F$8+#N/A,$A$1:$A$26,$C$1:$C$26,$B$1:$B$4*#N/A) 

수익률 만 2 열 다양한 :

enter image description here

+0

굉장! 정말 고마워. – Shawn