본문 바로가기

VBA/엑사남_기초방93

[기초방] VBA 100제 #42 [ 고급필터 ] 데이터를 새롭게 추가하고 또한 검색을 하는 이벤트 문제이다. 각 시트에 해당하는 이벤트들은 해당시트에서 한번만 사용가능하므로 여러가지 또는 여러 영역에서 이벤트를 발생하려면 Boolean을 통해서 KEY 역할을 하게 하여 적지적소에 이벤트를 발생시켜야 한다. 이 구문은 이렇다. 데이터 영역과 검색 영역이 있는데, 데이터 영역에는 모든 데이터가 입력되었을 때 이벤트가 발생해야 하고, 고급필터의 검색 영역은 일부 검색어 일치에 반응해야 함으로 이를 억지로 하나로 묶어버리면 의도한대로의 이벤트가 발생하지 않는다. 그렇기 때문에 Bln으로 영역을 양분해서 각각의 상황에 맞게 이벤트를 발생시키면 된다. If Not Intersect(rngS, Target) Is Nothing Then bln = True '= 검.. 2023. 3. 16.
[기초방] VBA 100제 #41 [ 테이블 정렬하기 ] 이번 41번문제는 표를 간단한 테이블 형태로 변경하는것인데..엑셀을 하는 사람들은 절대로 이러한 41번 형태의 테이블로 data를 작성하면 안된다. 엑셀에서 많이 사용되는 것중하나인 빈셀들을 윗셀의 값을 참조하는 코드는 아래와 같다. rngU.SpecialCells(4).FormulaR1C1 = "=R[-1]C" vtemp = Application.Transpose(rngA(1, -4).Resize(Application.CountIf(rngAll.Columns(2), rngA(1, -3)), 1)) vtemp에서 타임파트중 같은 파트들을 Countif를 통해서 그 크기를 Resise의 행의 크기로 하여 배열화 하면 2차원 배열이 됨으로 이를 Transpose를 통해 1차원 배열로 만든다. 이같은 일련의 .. 2023. 3. 15.
[기초방] VBA 100제 #40 [ 가로정렬 ] 이번 문제는 이렇다. 알파벳과 숫자가 섞여있는 것에 알파벳을 삭제 후 가로로 정렬을 해야한다. 2007년 엑셀 이후 버전에서는 가로정렬이 가능하다. 위의 코드를 한줄로 표현하면 이렇다 rngA.Sort rngA.Cells(1), 1, Orientation:=xlLeftToRight 행의 첫 영역을 key로 하여 올림차순으로 왼쪽에서 오른쪽 정렬을 하는 코드이다.. 꼭 가져가기 바란다. 더보기 Sub 기초방40() Dim rngAll As Range: Set rngAll = [c5:l20] Dim rngA As Range rngAll.FormatConditions.Delete '= 기존 조건부서식 삭제 Sheets("문제").[c5:l20].Copy Sheets("결과").[c5] '= 문제 복사 rngA.. 2023. 3. 15.
[기초방] VBA 100제 #39 [ 문자조합하기 ] 이번 문제는 characters + 정규식 문제의 확장편 정도로 생각해주면 좋을것 같다. 39번 문제는 [이전] 데이터를 보면 알겠지만 처음을 제외하곤 숫자 뒤에 % 가 4자리씩 순환하고 있는데 이걸 나머지 숫자에도 %을 삽입하라는 문제이다. 39-1은 이웃하지 않은 알파벳과 숫자의 조합으로 조합문자를 만들어 내는 것이다. 39번은 정규식으로 풀려면 패턴을 일치시켜야 하기에 정규식 패턴을 다음과 같이 만들어 보았다. 패턴설명은 뒤에 % 가 없는 숫자를 패턴으로 하는 정규식 패턴이다. firstindex는 일치 패턴의 바로 직전까지를 의미하기 때문에 firstindex + cnt를 함으로서 글자가 삽입되더라도 그 위치를 변경해가면서 결국 의도한대로 패턴과 일치된 숫자들 뒤로 % 를 삽입할 수 있다. Set.. 2023. 3. 14.