VB(A)/당근쨈 & Chronicle
-
[& Chronicle] 지정기간의 합 구하기VB(A)/당근쨈 & Chronicle 2019. 2. 22. 18:56
https://cafe.naver.com/excelmaster/160457에 올라온 질문입니다. 워크시트 함수인 EoMonth 함수를 사용하여3개월 전의 첫날, 1개월 전의 마지막날을 구하여 그 사이에 있는 기간의 출고수량을 구하면 됩니다. Chronicle님은 아래와 같이 풀었습니다.https://blog.naver.com/asaph16/221472345497풀이 과정은 같지만 이런 건 함수가 훨씬 간단하네요. Option Base 1Option Explicit Sub Macro() Dim vAll, vDate Dim i As Integer Dim LastInput As Date Dim StartDay As Date Dim LastDay As Date Dim SumOutput As Long Dim wk..
-
[& Chronicle] 정규식으로 특수문자 제외하고 문자와 숫자만 분리하기VB(A)/당근쨈 & Chronicle 2019. 2. 15. 17:07
https://cafe.naver.com/excelmaster/160106에 올라온 질문입니다. ◁SOFT CREAM 120[G] 라는 텍스트가 있으면특수문자를 제외하여 SOFT CREAM 120G 라는 결과물을 원하는 내용입니다.정규식에서 Replace를 이용하여 영어, 숫자, 띄어쓰기만 제외하고 나머지는 없애는 코드를 짜면 됩니다. Chronicle 님은 아래와 같이 풀었습니다.텍스트를 워드에 복사해서 찾아 바꾸기를 하는 과정인데워드에서도 정규식이 적용되는지도 몰랐습니다.https://blog.naver.com/asaph16/221466733776 Function GetText(tmp As String) As String With CreateObject("Vbscript.regexp") .Global..
-
[& Chronicle] 경우의 수 구하기VB(A)/당근쨈 & Chronicle 2019. 2. 13. 21:07
https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=321105342에 올라온 질문입니다.5개의 경우이므로 순환문을 다섯개로 하드하게 했습니다. Chronicle 님은 함수 한 줄로 멋지게 해결했습니다.함수의 세계는 알면 알 수록 무궁무진한 것 같습니다.https://blog.naver.com/asaph16/221465069552 Option Base 1Sub Macro() Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Dim e As Integer Dim v(2) As String Dim tmp(5) As String Dim r As Integer r = 1 v(..
-
[& Chronicle] 연속근무 일수 구하기VB(A)/당근쨈 & Chronicle 2019. 2. 13. 11:14
https://cafe.naver.com/excelmaster/159887 에 올라온 질문입니다.한달동안 연속근무 7일 이상이 되는 사람은 '7일 연속근무' 셀에 '연속근무' 라는 표시를 해야합니다. Chronicle 님은 배열수식으로 해결했습니다.이런 게 함수로 되는지도 몰랐네요. 함수는 알면 알 수록 신기합니다.- https://blog.naver.com/asaph16/221464697666 아래는 매크로로 풀어낸 과정입니다. 1. A라는 사람부터 S라는 사람까지 크게 순환을 하고 2. 사람별로 1일부터 30일까지 다시 순환을 하면서 3. 근무를 하면 1씩 더하고 휴무일 땐 0으로 되돌려서 4. 합이 7이 되면 7일간 연속근무를 한 것이므로 '연속근무' 라는 표시를 하고 다음 행으로 넘어갑니다. Fo..
-
[& Chronicle] 원하는 글자 추출하기VB(A)/당근쨈 & Chronicle 2017. 5. 14. 21:06
지식인 질문인데, 어떤 이유인지 '비공개' 처리가 되어있습니다. Chronicle님의 풀이내용입니다. - http://blog.naver.com/asaph16/221003500708LEFT, FIND, REPLACE 와 같은 비교적 대중화 된 함수로 풀이를 하였습니다. 매크로의 경우, 텍스트 추출은 정규식이 와따입니다.패턴을 짜는 게 까다롭긴 하지만 규칙만 찾아내면 정규식만큼 편한 것도 없습니다.텍스트 추출이 업무에서 많은 비중을 차지한다면 정규식을 공부해보세요. Function Macro$(tmp$) Dim Reg As Object Dim MySet As Object Dim v$(), i% Set Reg = CreateObject("vbscript.regexp") With Reg .Global = Tr..
-
[& Chronicle] 표 구조 바꾸기VB(A)/당근쨈 & Chronicle 2017. 5. 11. 21:26
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=271030829&qb=7Zqo7Jyo7KCB&enc=utf8§ion=kin.qna&rank=80&search_sort=0&spq=0 위의 표를 아래처럼 변경하는 질문입니다.행방향으로 된 데이터를 열방향으로 바꾸면 됩니다. Chronicle님은 OFFSET, INDEX, MATCH, LARGE 함수와 보조열로 해결하였습니다.- http://blog.naver.com/asaph16/221000026754 제가 풀이한 과정은 아래와 같습니다.모든 데이터를 한 줄로 풀어낸 후에 빈 칸을 삭제하는 과정을 거쳤습니다. 오늘도 큰 힘 들이지 않고 코드 하나 날로 먹었네요.Sub Macro() ..
-
[& Chronicle] 일치하는 패턴 개수VB(A)/당근쨈 & Chronicle 2017. 5. 8. 22:37
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=276037321 A행에는 패턴이 나와있고 C행에는 데이터가 나열되어 있습니다.A행의 패턴이 C행에 몇 개나 있는지 파악하는 질문입니다.Chronicle님은 PHONETIC 함수와 이름관리자를 이용하여 해결하였습니다. - http://blog.naver.com/asaph16/220999094014 매크로의 해결방법에는 여러가지가 존재합니다만역시 이런 류는 정규식이 편합니다.정규식을 적용하기 위해 A행과 C행을 문자열로 변환하여 준 다음 일치하는 패턴의 개수를 구해주면 됩니다. Sub Macro() Dim MyPattern As String Dim PatternData As String '패..
-
[& Chronicle] 그룹별 합계 구하기VB(A)/당근쨈 & Chronicle 2017. 5. 7. 10:15
http://cafe.naver.com/excelmaster/138780 G행에 각 그룹별로 숫자가 입력되어 있고 그룹의 맨 아래 빈칸에 그룹별 합계를 입력하는 내용입니다. 이런 경우는 Chronicle님의 해법처럼 G행을 선택하여 빈셀만 선택한 후 자동합계를 구하는 것이 제일 쉬워보입니다. - http://blog.naver.com/asaph16/220998378905 저는 매크로를 이용하여 다음과 같은 흐름으로 코드를 짰습니다. 1. SpecialCells로 데이터가 있는 영역만 선택합니다. 2. Areas를 이용하여 그룹별로 순환합니다. 3. 그룹의 맨 마지막 빈칸에 합계를 출력합니다. 어떻게든 코드는 짰지만 아무래도 엑셀 기본기능을 이용하는 것이 이번 문제에서는 더 편리할 듯 합니다. Sub Ma..
-
[& Chronicle] 파트별 생산 합계 구하기VB(A)/당근쨈 & Chronicle 2017. 5. 5. 08:03
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=275916203 위 그림과 같이 파트별 생산 합계를 구하는 질문입니다. 타트타임이 모두 채워져있다면 쉽게 해결될 문제입니다만 어쩐 이유에서인지 그렇게는 안 되나봅니다. Chronicle님은 위와 같이 LookUp을 이용하여 풀어냈습니다. - http://blog.naver.com/asaph16/220997871985 이번 문제를 풀어낸 흐름은 맨 마지막에서 End(xlUp)로 위 데이터로 차례로 올라가며 파트별 생산합계를 구하는 방식입니다. 불규칙하게 반복되는 경우는 Do Loop문이 역시 편리합니다. Sub Macro() Dim r As Integer '기존자료 삭제 Range("E4"..
-
[& Chronicle] 상대참조 주소 유지하여 수식 복사하기VB(A)/당근쨈 & Chronicle 2017. 5. 4. 22:47
http://cafe.naver.com/excelmaster/138783 엑셀의 장점이자 단점이지요.복사를 하여 다른 곳에 붙여넣으면 이동거리만큼 참조 또한 변한다는 겁니다. 그러기를 원치 않은 사람들도 있는데 말이지요. Chronicle님은 엑셀의 기본기능을 이용하여 다음과 같이 풀었습니다. - http://blog.naver.com/asaph16/2209984337101. 등호를 다른 기호로 바꾼다.2. 원하는 곳에 붙여넣는다.3. 다른 기호를 다시 등호로 바꾼다.그러면 상대참조를 유지한 채 깔끔하게 복사가 됩니다. 매크로로는 아래와 같이 진행합니다.수식을 그대로 복사한다는 한 줄입니다.사실 코드라고 할 것까지 없어서 첨부도 하지 않았습니다. 매크로는 한번씩 허무함을 안겨줍니다. Sub Macro()..
-
[& Chronicle] 공급업체가 다를 경우 행삽입 하기VB(A)/당근쨈 & Chronicle 2017. 5. 3. 22:00
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=262572939&qb=7Zqo7Jyo7KCB&enc=utf8§ion=kin.qna&rank=3&search_sort=0&spq=0 에 등록된 질문글입니다. A열에 공급처명이 나열되어있고 공급처명이 다를 경우 행삽입이 필요한 내용입니다. Chronicle님의 해결방법입니다. - http://blog.naver.com/asaph16/220997504215 필터기능을 활용하여 행삽입을 하는 방식입니다. 이런 수작업은 매크로의 장점을 살릴 수 있는 작업 중 하나입니다. 데이터가 수백건을 넘어가게 되면 이미 사람 손으로는 해결하기가 버거운 면이 있지요. 하지만 매크로를 알면 수만데이터가 존..
-
[& Chronicle] 불규칙한 그룹의 문자열 구분VB(A)/당근쨈 & Chronicle 2017. 5. 3. 08:16
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] 두 날짜 사이에서 특정 요일의 개수 구하기VB(A)/당근쨈 & Chronicle 2017. 5. 2. 22:35
두 날짜 사이에서 특정 요일의 개수를 세는 법입니다. 먼저 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] 숫자와 영문자가 혼용된 상태에서 영문자만 추출하기VB(A)/당근쨈 & Chronicle 2017. 5. 2. 16:01
아래와 같이 숫자와 영문이 혼합되어 있는 셀에서 영문만 골라내는 수식과 사용자정의함수입니다. 먼저 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] 문자 거꾸로 출력하기VB(A)/당근쨈 & Chronicle 2017. 5. 2. 14:04
문자열을 뒤집는 매크로와 수식의 차이입니다. 먼저 정복해야할 대상은 아래와 같습니다. A행의 내용을 B행으로 바꾸는 거지요. 수식의 과정은 http://blog.naver.com/asaph16/220996432171 과 같습니다. 간략히 설명하자면 1. 보조열을 이용하여 뒤에서부터 한글자씩 분리한다. 2. 분리된 글자를 합쳐준다. 입니다. 제품이름의 글자수에 해당하는 보조열이 필요하다는 단점이 존재하네요. 그 결과가 바로 아래와 같습니다. 하지만 VBA로는 StrReverse 라는 함수 하나면 해결됩니다. 보조열도 글자를 분리할 필요도 없지요. 수식도 편하지만 경우에 따라선 사용자정의함수로 매우 간단하게 해결할 수 있는 경우가 많습니다. Function ReverseText(Goods As String)..
-
[& Chronicle] 중복값 제거 & 중복값의 개수VB(A)/당근쨈 & Chronicle 2017. 5. 2. 09:05
당근쨈 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 중복값 추려내며 배열에 담기VB(A)/당근쨈 & Chronicle 2016. 1. 6. 22:56
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..