2017-11-05 1 views
0

두 범위를 결합한 다음 전체 용어 목록을 쉼표로 구분 된 목록으로 결합하려고합니다.VBA : 범위 결합 및 문자열 합치기

두 범위 모두 용어 목록입니다. 즉, ManualTags는 A1:A5이고 tag1, tag2, tag3입니다. 동적 태그는 동일한 종류의 목록이지만 다른 단어는 B1:B10에 있습니다.

그래서 다음과 같이 호출 것 : SEARCHFORTAGS(A1:A5, B1:B10)

을이 작동 :

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ") 
End Function 

및 반품 : "tag1, tag2, tag3, etc"

하지만를 내가 먼저 다음 태그의 두 가지 유형을 결합 할 때 결합하면 실패합니다. #VALUE!

을 반환

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    joinedTags = Union(ManualTags, DynamicTags) 
    SEARCHFORTAGS = Join(Application.Transpose(joinedTags.Value), ", ") 
End Function 

는 어디에서 잘못 여기에 갈거야?

+0

'Transpose'는 셀의 세로 범위를 가로 범위로 또는 그 반대로 변환합니다. 10 행 x 1 열 범위의 5 행 x 1 열 범위의 'Union'을 수행하면 "수직"범위 ** 또는 "수평"범위가 없으므로 그렇지 않습니다. 너 좋아할거야. – YowE3K

답변

1

Transpose 메서드는 다중 영역 Range를 전달할 때 "WorksheetFunction 클래스의 Transpose 속성을 가져올 수 없습니다."라는 오류 1004와 함께 실패합니다.

다중 영역 범위는 Union 방법으로 생성됩니다. 로 전달 된 각 범위만큼,

귀하의 경우에는
Dim unionArea As Excel.Range 
For Each unionArea In joinedTags.Areas 
    Debug.Print unionArea.Address 
Next 

는이 기능이 작동합니다 : 당신의 라인 joinedTags = Union(ManualTags, DynamicTags) 아래에 추가 된 다음 코드는 지역 수집을 반복하고 디버그 창에있는 각 항목의 주소를 표시합니다 인수는 단일 영역이며 단 하나의 열만 있습니다.

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ") & ", " & Join(Application.Transpose(DynamicTags.Value), ", ") 
End Function