Excel 2010: VBA 들어오는 텍스트를 다중 선택 드롭다운 목록으로 변환

Excel 2010: VBA 들어오는 텍스트를 다중 선택 드롭다운 목록으로 변환

나는 정기적으로 원시 내보내기 파일을 받고 있으며 이를 형식화하고 조작하기 위해 매크로를 작성했습니다. 저는 Excel 2010을 사용하고 있으며 VBA에 어느 정도 익숙합니다.

들어오는 열 중 하나에는 세미콜론으로 구분된 알려진(유한하지만 큰) 목록의 이름 목록이 있습니다. 그러나 자동 필터를 사용하면 항목이 실제 다중 선택처럼 처리되지 않습니다.

질문:"사과; 포도"를 "사과"와 "포도" 모두의 다중 선택으로 표시하도록 프로그래밍 방식으로 Excel에 지시할 수 있나요?

예:

목록에 다음 이름만 포함되어 있다고 가정합니다. 사과 체리 포도 오렌지 복숭아

열 (A)의 셀에는 ";"로 구분된 조합으로 1개, 2개, ... 또는 5개의 과일이 포함될 수 있습니다.

(A1) = 사과 (A2) = 사과; 포도(A3) = 사과; 복숭아(A4) = 체리; 포도(A5) = 체리; 주황색

운 좋게도 들어오는 데이터는 항상 알파벳 순서로 내보내집니다. 따라서 "사과; 포도"가 포함된 셀 하나와 "포도; 사과"가 포함된 다른 셀이 발생하지 않습니다.

문제:자동 필터는 가능한 각 조합이 고유한 '선택' 옵션이라고 가정합니다. 이후 단계에서는 여러 기준을 기반으로 결합/필터링해야 하므로 사용이 복잡해집니다.정렬- 모든 조합 순열을 고유한 가능성으로 보기에는 목록이 너무 크기 때문입니다.

[예: 데이터 그룹을 새 탭에 복사하기 위해 필터링하고 있으며 때로는 "포도"가 포함된 항목을 새 탭으로 이동하지만 때로는 "포도" 또는 "체리"가 포함된 항목이 새 탭으로 복사되는 경우도 있습니다. 동일한 새 탭.]

내가 이것을 지나치게 생각하고 있어 필요한 것보다 더 어렵게 만들고 있을 가능성이 뚜렷합니다!

감사해요!

편집: 즉, 기하급수적으로 큰 조합 집합을 사용하여 Range().Autofilter Field... Criteria1:=()을 합리적으로 반복하는 방법을 알 수 없습니다. 말이 되나요?

답변1

원하는 만큼 많은 기준을 처리할 수 있으므로 advancedfilter대신 사용하세요 . 다음은 실제 예입니다. 첫 번째 스크린샷과 같이 Excel 시트를 설정하고 매크로를 실행하세요.autofilter

매크로 이전
여기에 이미지 설명을 입력하세요

Sub AdvancedFilterTest()

    'clear old results and old filters
    Range("C:C").Clear
    Range("D:D").Clear

    'criteria header name and data header name needs to be the same
    [C1] = [B1]

    'Split multiple criterias by semicolon and save them as array
    Criterias = Split([A2], ";")

    'write the array to cells since advancedfilter needs a range as criteria
    For i = 0 To UBound(Criterias)
        Cells(i + 2, 3) = Criterias(i)
    Next i

    'Set the cells as a range so advancedfilter can use them
    Set critrange = Range(Cells(1, 3), Cells(UBound(Criterias) + 2, 3))

    'advanced filter will filter and copy your data to a new target range
    Range("B:B").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critrange, CopyToRange:=Sheets(1).[D1]

End Sub

매크로 이후
여기에 이미지 설명을 입력하세요

나는 당신이 아이디어와 그것을 적용하는 방법을 얻을 것이라고 확신합니다.

관련 정보