VB(A) 197

[& Chronicle] 지정기간의 합 구하기

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..

표 변환하기(셀삽입)

https://cafe.naver.com/excelmaster/160211의 질문입니다. 왼쪽 표를 오른쪽 표로 변환하는데F는 각 목록별로 값을 가지고 있어서 셀을 삽입하는 것이 까다로웠습니다.결국 순환문을 몇 번을 써서 해결했네요.로직을 짜는 것이 모든 코딩의 어려운 점인 것 같습니다. 조금 더 고급진 코딩을 하고 싶은데벽에 부딪힌 거 같네요. Option ExplicitOption Base 1Sub Macro() Dim FirstTable As Range Dim SecondTable As Range Dim SingleRange As Range Dim i As Integer Dim ToF As String Application.ScreenUpdating = False Set FirstTable = Ra..

VB(A) 2019.02.18

[& Chronicle] 정규식으로 특수문자 제외하고 문자와 숫자만 분리하기

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] 경우의 수 구하기

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] 연속근무 일수 구하기

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..

명단 출석 체크 추출 및 참가자 명단 파악

https://cafe.naver.com/excelmaster/159162에 올라온 질문입니다.왼쪽의 표에 있는 명단을 가지고각 사람이 출석한 횟수, 1번이라도 출석한 사람 현황 파악하는 것이 질문의 요지입니다. 사실, 이런 표구성으로는 어떤 통계든 뽑아내기가 힘들기에처음부터 표구성을 잘 하는 것이 관건이기도 합니다. 파워쿼리를 이용하면 금방 끝나는 작업이며이번에는 매크로로는 모든 명단을 한 줄로 정렬하여 피벗으로 해결하였습니다. Sub Macro() Dim i As Integer Columns("H:K").Clear '기존 자료 삭제 Range("H1") = "취합" 'H1열에 제목 삽입 With Range("A1").CurrentRegion '모든 명단을 한 줄로 세우는 작업 For i = 1 To ..

VB(A) 2019.01.24

표 내용을 띄엄띄엄 복사

이번 내용은 https://cafe.naver.com/excelmaster/158961 에 올라온 질문입니다.1번과 같은 표가 있고2번의 양식으로 출력하고자 하는 질문입니다.옛날 부산소방학교에서 근무할 때 교육생 명단을 가지고 명찰을 만들던 것과 같은 양상이군요.(사실 VBA를 공부하게 된 계기도 교육생 명찰을 만들기 위함이었지요) 풀이 과정은 다음과 같습니다.1번 표의 A열의 제목을 순환하여2번 양식에 붙여넣습니다.(간단?) 주의할 점은홀수 제목은 왼쪽에 짝수 제목은 오른쪽에 있으니Column에 해당하는 변수를 왔다갔다만 잘 해주면 됩니다. Option Explicit Sub Macro() Dim r As Integer Dim c As Integer Dim SingleRange As Range Dim ..

VB(A) 2019.01.18

데이터를 셀별로 나누기

https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=319076651 에 올라온 질문입니다.왼쪽의 표를 오른쪽 표처럼 바꾸고자 하는 질문입니다.파워쿼리 또는 매크로를 이용하면 쉽게 해결할 수 있습니다. 코드 작성 흐름입니다. 1. B열을 순환하면서 2. , 를 기준으로 나누어 임의의 배열에 삽입합니다. 3. 삽입된 배열을 다시 순환하면서 D, E열에 출력합니다.자세한 코드와 파일은 아래에 있습니다. Sub Macro() Dim SingleRange As Range Dim tmp As Variant Dim i As Integer Dim j As Integer '기존 자료를 삭제합니다. Range("D1").CurrentRegion.Clear..

VB(A) 2019.01.17

[추가기능] 주소변환(지번주소, 도로명주소, 우편번호)

[추가기능] 첨부를 클릭하면 추가기능이 생성되어 추가기능의 버튼을 누르면 지번주소, 도로명주소, 관할 주민센터, 우편번호를 추출해주는 매크로 http://cafe.naver.com/excelmaster/152667 참고 Option Explicit Option Base 1 Sub Macro() Dim AddressRange As Range Dim v Dim addv(), v1 As String Dim r As Integer Dim i As Integer Dim j As Integer Dim sT As Date: sT = Time '시작시간 Dim nT As Date Dim oT As Date '속도 향상 With Application .Calculation = xlCalculationManual .Ena..

VB(A) 2018.06.22

[정규식] 숫자를 한글로 변환

위와 같이 숫자를 한글로 바꿔주는 사용자 정의 함수.정규식을 이용하여 숫자만 추출한 뒤 한글로 변환하였다.두가지 버전의 함수가 있고 개인적으로는 두번째 함수가 마음에 드는 편.정규식의 replace 를 이용해 한번에 바꾸고 싶었는데, 구글링을 통해서도 그런 방법은 찾지 못해 결국 순환문을 사용 Option ExplicitFunction ConvertKorean(tmp As String) As String With CreateObject("vbscript.regexp") .Global = False .Pattern = "(\d+)" Do If .test(tmp) = False Then Exit Do tmp = .Replace(tmp, Application.Evaluate("numberstring(" & ...

VB(A) 2018.02.23