Live Replay
멤버쉽 라이브 강의
엑셀 VBA 4주 완성 특별 스터디 3강 | 백견이 불여일행! 이제 나도 엑셀 프로그래머!
|
2022년07월16일
강의 소개
1. 나만의 Sequence & TextJoin 함수 만들기
오늘 강의에서는 이전 시간에 알아본 For문과 IF문을 활용하여 나만의 Sequence 함수를 만드는 방법을 알아봅니다.
이후 10줄 내외의 간단한 코드를 작성하여 나만의 TextJoin 함수를 만드는 방법을 알아봅니다.
2. 범위 자동인식 & 필터링 매크로 만들기
이후 시트에 사용된 마지막 셀을 자동으로 인식하여 원하는 범위를 동적으로 선태하는 DynamicRange 함수를 작성합니다.
이후 DynamicRange 함수를 활용하여 조건을 만족하는 값만 필터링하는 나만의 필터 매크로를 작성합니다.
3. 시트 이벤트 기초 & 실시간 필터링 매크로 완성
오늘 강의에서는 실무에서 가장 많이 사용되는 핵심 시트 이벤트 2가지의 차이점과 실전 사용법에 대해 알아봅니다.
이후 시트 이벤트와 필터링 매크로를 접목하여, 셀 안에 입력한 값을 실시간으로 필터링하는 자동화 서식을 완성합니다.
라이브 미션
미션 완성 코드는 영상 댓글의 완성파일을 확인하세요!
- [미션1] MyTextJoin 함수 만들기
- [미션2] 동적범위 DynamicRange 함수 만들기
- [미션3] 필터링 매크로 만들기
보충 자료
① Squence / MyTextJoin 함수 만들기 사전 미션
'-----------------------------------------
'미션1) 나만의 Sequence 매크로 만들기
'Column로 시작열을 지정하고, Count로 순번 개수를 지정하면
'시작열의 1행부터 순번을 출력하는 매크로를 작성합니다.
'예상풀이시간 : 3분
'-----------------------------------------
Sub SequenceNumber()
Dim Column As String '시작열 @ 예) "A", "B", "C", ...
Dim Count As Long '출력할 순번 개수 @ 예) 5, 10,15 ...
Dim i As Long ' For문 변수
'힌트1) Column = "A"
'힌트2) Count = 10
'힌트3) For i = 1 To Count
'힌트4) Range(Column & i).Value
End Sub
'-----------------------------------------
'미션2) 나만의 Sequence 매크로를 동적으로 만들기
'InitCell로 시작셀을 지정하고, Count로 출력할 순번 개수를 지정하면
'InitCell을 기준으로 한칸씩 내려가며 순번을 출력하는 매크로를 작성합니다.
'예상풀이시간 : 5분
'-----------------------------------------
Sub DynamicSequence()
Dim InitCell As Range '시작셀 @ 예) Range("A1")
Dim Count As Long '출력할 순번 개수 @ 예) 5, 10 15 ..
Dim i As Long 'For문 변수
'힌트1) Set InitCell = Range("A1")
'힌트2) Count = 10
'힌트3) For i = 1 To Count
'힌트4) InitCell.Offset(i-1).Value
End Sub
'-----------------------------------------
'미션3) 나만의 TextJoin 함수 만들기
'문자를 병합할 범위를 Rng로 입력하고, 구분자를 지정하면
'Rng의 각 셀을 돌아가며 구분자로 병합하는 함수를 작성합니다.
'예상풀이시간 : 7분
'-----------------------------------------
Function MyTextJoin(Rng As Range, _
Optional Delimiter As String = ",")
'@ 인수 설명
'Rng : 값을 병합할 범위입니다.
'Delimiter : [선택인수] 구분자입니다. 기본값은 쉼표(,)입니다.
Dim r As Range 'For Each문 변수
Dim Result As String '결과로 출력할 문자열
'힌트1) For Each r In Rng
'힌트2) If r.Value <> "" Then
'힌트3) Result = Result & r.Value & Delimiter
'힌트4) MyTextJoin = Left(○○○, Len(○○○) - 1)
End Function
② 시트 이벤트 매크로 마스터 코드
Application.ScreenUpdating = False
Application.EnableEvents = False
If Not Intersect(Target, Range("셀주소")) Is Nothing Then
'실행할 명령문
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
혹시 사내망을 사용중이신가요?
만약 회사에서 드롭박스 접근을 제한할 경우, 다운로드가 안될 수 있습니다.
그럴 경우, 다른 인터넷 환경(예: 휴대폰 테더링)에서 다시 시도해보시겠어요?
감사합니다.
Object variable or withblock variable not set
제가 작성한 수식은
Function dynamicrange(ws As Worksheet, column As String, initrow As Long) As Range
Dim i As Long
Dim address As String
i = ws.Range(column & "1048576").End(xlUp).Row
address = column & initrow & ":" & column & i
Set dymanicrang=ws.Range(address)
End Function
Sub test1()
MsgBox dynamicrange(Sheet1, "b", 2).address
End Sub
오탈자 확인해보세요
어떤 오류가 발생하는지 조금 더 자세히 적어주시겠어요? :)
감사합니다.
강의 세번 째 강의 듣고 응용해보고 싶어서 이것 저것 만지다가 질문 드립니다.
E2셀 아래에 구분을 더 추가해서 한 번에 여러개를 필터링할 수 있을까요?
ex) E2(육류), E3(채소) 입력 시 두 카테고리에 포함된 내용 모두 순서대로 필터링
코드에 E2가 들어가는 부분을 E2:E3 이런식으로 바꿔서 테스트는 해봤는데 작동하지 않더라고요..
관련 내용을 사이트 내에서 검색 해봤는데 이 내용과 관련된 포스팅은 보이지 않아서 댓글 남깁니다.
혹시 이 부분과 관련된 강의가 있다면 알려주시면 보고 따라해볼게요!
네 물론 가능합니다. 홈페이지에서 제공하는 Filtered_DB 함수의 구조를 한번 확인해보시면 도움이 되실 것 같습니다.
아래 링크를 한번 확인해보세요.
엑셀 데이터 필터링 함수 :: Filtered_DB 명령문 - 오빠두엑셀 (oppadu.com)
감사합니다.
필터링 매크로 만들기 공부 중 여러 시도를 해보다가 막혀서 여쭤봅니다.
목적은 상담센터에서 사례관리 시스템을 만들려고 하고 있어요. 서비스 성격에 따라 시트를 여러 개로 분류해서 관리하려고 하고 있구요. 검색시트에서 내담자 이름 or 상담자를 검색하여 관련 정보를 필터링하려고 합니다.
시트1에 검색시트를 만들고 시트2,3,4,5에 원데이터가 있을때, 알려주신 FilterItems에서 어떤 부분을 수정해야 할까요? (모두 시트의 구성과 서식은 동일하다고 가정했을때)알려주신 코드에 이것저것 변경을 해봤지만... 실패했어요ㅠㅠㅠ
Set GroupRng = DynamicRange(Sheet1, "A", 2) '필터할 동적범위
FilterVal = Sheet1.Range("E2").Value '필터에 필요한 조건; 참조값
i = 2
For Each r In GroupRng
If r.Value = FilterVal Then '
Sheet1.Range("G" & i).Value = r.Offset(0, 1).Value
Sheet1.Range("H" & i).Value = r.Offset(0, 2).Value
i = i + 1
End If
Next
시트 2,3,4,5에 있는 모든 데이터를 동시에 필터링해야 하는 상황인가요?
만약 그렇다면, VBA로만 해결하는 것 보다 파워쿼리나 m365에서 제공되는 VSTCK 함수를 사용해 여러 시트의 데이터를 한 곳으로 취합한 후 매크로를 사용해보시길 권장드립니다.
매크로만으로도 적용 가능하지만, 매크로로 해결하려면 상당부분 커스텀이 필요합니다.
힌트를 드리자면, For 문으로 여러 시트를 돌아가며 검색하도록 작성하면 됩니다.
예를 들어,
와 같은 형태로 작성해보세요.
남겨드린 답변이 문제를 해결하시는데 도움이 되었길 바랍니다. 감사합니다.
만약 아이패드에서 재생 시, 회원 전용이라는 메세지와 함께 재생이 안된다면
아이패드의 유튜브(또는 구글) 앱에 여러 계정이 동시에 로그인되어 있는지 한번 확인해보시겠어요?
여러 계정이 동시에 로그인되어 있을 경우, 가끔 해당 오류가 발생하는 것으로 알고 있습니다.
따라서 우선 모든 계정을 로그아웃한 후, 멤버십으로 가입할 계정으로 로그인 후 다시 재생해보시길 바랍니다. :)
감사합니다.