VB(A)/당근쨈 & Chronicle 17

[& Chronicle] 공급업체가 다를 경우 행삽입 하기

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=262572939&qb=7Zqo7Jyo7KCB&enc=utf8&section=kin.qna&rank=3&search_sort=0&spq=0 에 등록된 질문글입니다. A열에 공급처명이 나열되어있고 공급처명이 다를 경우 행삽입이 필요한 내용입니다. Chronicle님의 해결방법입니다. - http://blog.naver.com/asaph16/220997504215 필터기능을 활용하여 행삽입을 하는 방식입니다. 이런 수작업은 매크로의 장점을 살릴 수 있는 작업 중 하나입니다. 데이터가 수백건을 넘어가게 되면 이미 사람 손으로는 해결하기가 버거운 면이 있지요. 하지만 매크로를 알면 수만데이터가 존..

[& Chronicle] 불규칙한 그룹의 문자열 구분

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=112564336&page=1#answer2 에 올라온 질문입니다. 하나의 그룹마다 공백으로 이루어져있고, 알파벳부분과 나머지 부분으로 구분하여 셀에 출력하는 내용입니다. 그룹 안에는 데이터가 3개도 있고 4개도 있는 등 불규칙합니다. 아래의 두 가지가 질문에서 파악할 수 있는 규칙입니다. 1. 하나의 그룹마다 공백으로 이루어져있다. 2. 각 그룹의 첫번째 데이터와 나머지 데이터를 분리한다. 먼저 Chronicle님의 수식을 보겠습니다. - http://blog.naver.com/asaph16/220997237905 아래와 같이 보조열을 이용하여 영문자와 그렇지 않은 것을 구분한 것이 인상..

[& Chronicle] 두 날짜 사이에서 특정 요일의 개수 구하기

두 날짜 사이에서 특정 요일의 개수를 세는 법입니다. 먼저 Chronicle님의 배열수식입니다. - http://blog.naver.com/asaph16/220622364366 {=SUM(N(WEEKDAY(ROW(INDIRECT(A1&”:”&B1)),2)=2} 날짜의 일련번호를 구한 뒤 WeekDay 함수로 특정 요일에 해당하는 숫자와 비교 결과값을 모두 더함 의 흐름을 가집니다. 이번 매크로도 위 흐름과 다르지 않습니다. 결국 VBA도 엑셀 안에서 움직이며 이것은 엑셀을 모르면 VBA를 다룰 때 한계가 있다는 것을 의미합니다. 날짜에 대한 개념은 위 Chronicle님 블로그에 자세히 나와있으니 여기서는 VBA만 풀어내겠습니다. 코드는 아래와 같으며 알고리즘은 위 1~3에 해당합니다.Function G..

[& Chronicle] 숫자와 영문자가 혼용된 상태에서 영문자만 추출하기

아래와 같이 숫자와 영문이 혼합되어 있는 셀에서 영문만 골라내는 수식과 사용자정의함수입니다. 먼저 Chronicle님의 수식입니다. =MID(A1,MATCH(TRUE,ISERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),0),LEN(A1)-COUNT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1)) 위 수식의 풀이 과정입니다. 1. 영문자가 시작되는 위치를 파악합니다. 2. 영문자의 수를 알아냅니다.(총 글자수에서 숫자의 글자수를 뺍니다.) 다음은 VBA를 이용한 사용자정의함수입니다. 셀에서 영문자만 골라내는 방법은 여러가지가 있습니다. 저는 텍스트 처리에 특화된 정규식을 선택했습니다. 셀 내용 중 영문자만 쏙쏙 골라내는 간단한 규칙입니다. 그 ..

[& Chronicle] 문자 거꾸로 출력하기

문자열을 뒤집는 매크로와 수식의 차이입니다. 먼저 정복해야할 대상은 아래와 같습니다. A행의 내용을 B행으로 바꾸는 거지요. 수식의 과정은 http://blog.naver.com/asaph16/220996432171 과 같습니다. 간략히 설명하자면 1. 보조열을 이용하여 뒤에서부터 한글자씩 분리한다. 2. 분리된 글자를 합쳐준다. 입니다. 제품이름의 글자수에 해당하는 보조열이 필요하다는 단점이 존재하네요. 그 결과가 바로 아래와 같습니다. 하지만 VBA로는 StrReverse 라는 함수 하나면 해결됩니다. 보조열도 글자를 분리할 필요도 없지요. 수식도 편하지만 경우에 따라선 사용자정의함수로 매우 간단하게 해결할 수 있는 경우가 많습니다. Function ReverseText(Goods As String)..

[& Chronicle] 중복값 제거 & 중복값의 개수

당근쨈 VS Chronicle 같은 주제로 매크로와 수식의 풀이과정을 살펴보는 새로운 도전입니다. 여기서 VS란 경쟁이 아닌 생각의 차이, 즉 접근방식에 따른(매크로 or 수식) 생각하는 과정을 이야기합니다. 해외 사례인 Mr Excel & ExcelisFun 을 보고 이 내용을 착안해내신 씽크탱크 Chronicle님의 아이디어에 감탄합니다. 먼저 카페에 올라온 질문글입니다. http://cafe.naver.com/excelmaster/117697 1. 명단의 중복값을 제거하고 2. 명단의 개수를 나타낸다 가 이 질문의 핵심입니다. 아래는 Chronicle님의 수식입니다. =INDIRECT(TEXT(MIN(IF(($C$2:$J$31"")*(COUNTIF($B$33:B33,$C$2:$J$31)=0),ROW..

[& Chronicle] Dictionary 중복값 추려내며 배열에 담기

Dictionary를 이용하여 중복값 추려내며 데이터를 배열에 담아내는 짧은 코드 수식은 Chronicle님의 블로그에 - http://blog.naver.com/asaph16/220627965891 (감탄) Sub Macro() Dim D As Object Dim vCar, vMsg$() Dim i%, j%, intC% Dim rngMsg As Range vCar = Range("C5", Cells(Rows.Count, "D").End(3)) '이름 및 차량 범위 Set D = CreateObject("Scripting.Dictionary") '딕셔너리 선언 Set rngMsg = Range("F5") '메시지 출력 셀 If LenB(rngMsg) Then rngMsg.CurrentRegion.Clea..