
나는 정기적으로 원시 내보내기 파일을 받고 있으며 이를 형식화하고 조작하기 위해 매크로를 작성했습니다. 저는 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
매크로 이후
나는 당신이 아이디어와 그것을 적용하는 방법을 얻을 것이라고 확신합니다.